Vb.net 如何将多个工作表复制到摘要页面,但不合并数据。

Vb.net 如何将多个工作表复制到摘要页面,但不合并数据。,vb.net,vba,excel,Vb.net,Vba,Excel,首先,我要说的是,我对实际编程中的VB代码一无所知,我正试图用Excel 2010中的工作簿帮助一位朋友。我在谷歌上搜索了一下,找到了我认为可能对他们有用的东西,但它似乎并没有像我希望的那样抓取所有东西并粘贴到汇总表中 我想要的是从每个工作表中获取一组单元格,将其复制,并将其放到摘要工作表中,当它将我想要的数据从工作表2传递到该范围时,从工作表3向下移动一行,经过相同的范围,依此类推,而不是像现在这样将所有数据合并到相同的单元格中 这是我目前正在使用的代码,当我使用它时,它只抓取最后一张表的数据

首先,我要说的是,我对实际编程中的VB代码一无所知,我正试图用Excel 2010中的工作簿帮助一位朋友。我在谷歌上搜索了一下,找到了我认为可能对他们有用的东西,但它似乎并没有像我希望的那样抓取所有东西并粘贴到汇总表中

我想要的是从每个工作表中获取一组单元格,将其复制,并将其放到摘要工作表中,当它将我想要的数据从工作表2传递到该范围时,从工作表3向下移动一行,经过相同的范围,依此类推,而不是像现在这样将所有数据合并到相同的单元格中

这是我目前正在使用的代码,当我使用它时,它只抓取最后一张表的数据,并将其放在前一张表的顶部,而不是粘贴然后向下移动,然后粘贴下一张表的数据

谢谢你的帮助

Sub CopyRangeFromMultiWorksheets()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim CopyRng As Range

With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

' Delete the summary sheet if it exists.
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("Summary Sheet").Delete
On Error GoTo 0
Application.DisplayAlerts = True

' Add a new summary worksheet.
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "Summary Sheet"

' Loop through all worksheets and copy the data to the
' summary worksheet.
For Each sh In ActiveWorkbook.Worksheets
    If sh.Name <> DestSh.Name Then

        ' Find the last row with data on the summary worksheet.
        Last = 0

        ' Specify the range to place the data.
        Set CopyRng = sh.UsedRange

        ' Test to see whether there are enough rows in the summary
        ' worksheet to copy all the data.
        If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
            MsgBox "There are not enough rows in the " & _
               "summary worksheet to place the data."
            GoTo ExitTheSub
        End If

        ' This statement copies values and formats from each
        ' worksheet.
        CopyRng.Copy
        With DestSh.Cells(Last + 1, "A")
            .PasteSpecial xlPasteValues
            .PasteSpecial xlPasteFormats
            Application.CutCopyMode = True
        End With

        ' Optional: This statement will copy the sheet
        ' name in the H column.
        'DestSh.Cells(Last + 1, "H").Resize(CopyRng.Rows.Count).Value = sh.Name

    End If
Next

ExitTheSub:

Application.Goto DestSh.Cells(1)

' AutoFit the column width in the summary sheet.
DestSh.Columns.AutoFit

With Application
    .ScreenUpdating = True
    .EnableEvents = True
End With
End Sub
多工作表()的子副本范围
将sh设置为工作表
将DestSh设置为工作表
持续时间一样长
暗拷贝As范围
应用
.ScreenUpdate=False
.EnableEvents=False
以
'删除汇总表(如果存在)。
Application.DisplayAlerts=False
出错时继续下一步
活动工作簿。工作表(“摘要表”)。删除
错误转到0
Application.DisplayAlerts=True
'添加新的摘要工作表。
设置DestSh=ActiveWorkbook.Worksheets.Add
DestSh.Name=“汇总表”
'循环浏览所有工作表并将数据复制到
'摘要工作表。
对于ActiveWorkbook.工作表中的每个sh
如果sh.Name DestSh.Name那么
'查找摘要工作表上包含数据的最后一行。
最后一个=0
'指定放置数据的范围。
设置CopyRng=sh.UsedRange
'测试以查看摘要中是否有足够的行
'工作表以复制所有数据。
如果Last+CopyRng.Rows.Count>DestSh.Rows.Count,则
MsgBox“&_
“用于放置数据的摘要工作表。”
下地狱
如果结束
'此语句从每个
“工作表。
复制,复制
带目标单元格(最后+1,“A”)
.Paste特殊XLPaste值
.Paste特殊XLPaste格式
Application.CutCopyMode=True
以
'可选:此语句将复制工作表
'名称在H列中。
'DestSh.Cells(Last+1,“H”).Resize(CopyRng.Rows.Count)。Value=sh.Name
如果结束
下一个
退出主题:
应用程序。转到DestSh。单元格(1)
'自动调整汇总表中的列宽。
DestSh.Columns.AutoFit
应用
.ScreenUpdate=True
.EnableEvents=True
以
端接头

由于以下原因,每次通过时,您的粘贴都会恢复到第1行

Last = 0
对于重叠数据,请尝试以下更改:

' Find the last row with data on the summary worksheet.
Last = DestSh.Rows.Count + 1