0

我有这段代码,它将三个工作表中的数据附加到摘要表中,但是在执行时,它将表 1 和 2 中的 13 行中的 12 行以及表 3 中的 13 行带到摘要中我也希望通过发送到一个来工作不同工作簿中的摘要表

Sub SummurizeSheets()
Dim ws As Worksheet

Application.ScreenUpdating = False
Sheets("Summary").Activate

For Each ws In Worksheets
    If ws.Name <> "Summary" Then
        ws.Range("D2:D6, D8:D15").Copy
        Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp).Offset(0, 0).PasteSpecial (xlPasteValues)
    End If
Next ws
End Sub
4

1 回答 1

1

更改Offset(0,0)Offset(1,0)。发生的不是它复制 12 行,而是从前一个块的末尾开始粘贴后续块。即第一个块粘贴到D1:D13,第二个块粘贴到D13:D26。通过使用Offset(1,0),将从第一个空单元格(即D14)开始粘贴第二个块。

您只需在代码中创建结果并在粘贴中引用它即可将结果放入新工作簿中,例如:

Option Explicit

Sub SummurizeSheets()
    Dim ws As Worksheet
    Dim currentWB As Workbook: Set currentWB = ActiveWorkbook
    Dim newWB As Workbook: Set newWB = Application.Workbooks.Add

    newWB.Worksheets(1).Name = "Summary"

    For Each ws In currentWB.Worksheets
        ws.Range("D2:D6, D8:D15").Copy
        With newWB.Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp)
            If IsEmpty(.Value) Then
                .PasteSpecial (xlPasteValues)
            Else
                .Offset(1, 0).PasteSpecial (xlPasteValues)
            End If
        End With
    Next ws
End Sub

编辑更新为粘贴到列中的第一个空单元格,即使那是第 1 行。

于 2013-10-22T12:03:57.093 回答