未在新工作簿的现有行下添加新行

时间:2019-04-25 10:59:18

标签: excel vba

我正在尝试将某些行从一个工作簿复制到另一个工作簿中。但是,它不会在新工作簿的现有行下添加新行。

源工作簿有10个工作表,每个工作表中都有不同的详细信息,但是每张工作表的设置方式相同,即列标题相同。每个工作表都有其自己的按钮,该按钮将“是”行复制到相同的目标工作簿中,所有行都结束于同一工作表上。 L列是“是/否”列。我只能将yes行复制到目标工作簿中,但是将它们粘贴在最上面的行上,该行将覆盖已经存在的行。在源工作表上,我需要从第14行复制并粘贴到目标工作表的第6行。对我的代码的任何帮助将不胜感激。

Private Sub CommandButton2_Click()
    Dim i As Long
    Dim outRow As Long
    Dim sourceWs As Worksheet, destWs As Worksheet

    Set sourceWs = Workbooks("SrcTest.xlsm").Worksheets("SRU 1")
    Set destWs = Workbooks.Open("DestTest.xlsx").Worksheets("All Data")

    outRow = 6

    For i = 14 To 200
        If sourceWs.Cells(i, 12).Value = "Yes" Then
            sourceWs.Rows(i).EntireRow.Copy
            destWs.Rows(outRow).PasteSpecial (xlPasteValues)
            outRow = outRow + 1                 ' not adding new rows under existing rows
            Application.CutCopyMode = False
        End If
    Next i 
End Sub

预期结果是每次单击按钮时,L列中所有带有“是”的行都将复制到目标工作簿中任何现有行下。无论我使用哪个原始工作表(1到10),都需要发生这种情况。

1 个答案:

答案 0 :(得分:0)

您可以仅使用"Yes"标准过滤数据并复制粘贴,而不必像遍历每一行那样(很费时间):

Option Explicit
Private Sub CommandButton2_Click()
    Dim i As Long
    Dim outRow As Long
    Dim Col As Integer
    Dim sourceWs As Worksheet, destWs As Worksheet

    Set sourceWs = Workbooks("SrcTest.xlsm").Worksheets("SRU 1")
    Set destWs = Workbooks.Open("DestTest.xlsx").Worksheets("All Data")

    outRow = destWs.Cells(destWs.Rows.Count, 1).End(xlUp).Row + 1 'next available row on destination workbook

    With sourceWs
        i = .Cells(.Rows.Count, 1).End(xlUp).Row 'last used row on the sheet
        .Rows(13).AutoFilter Field:=12, Criteria1:="Yes" 'no need to loop, just filter the sheet with your criteria
        .Range("A2", .Cells(i, "M")).SpecialCells(xlCellTypeVisible).Copy 'copy the visible rows
        .AutoFilterMode = False
    End With
    destWs.Cells(outRow, 1).PasteSpecial xlPasteValues
    destWs.Cells(outRow, 1).PasteSpecial xlPasteFormats

End Sub

我的代码假定您在两张纸的A列中都有数据。