将循环数据从一个工作簿复制并粘贴到另一个工作簿

时间:2019-06-12 10:52:43

标签: excel vba loops

我已经编写了这段代码,并且在从一张纸到另一张纸的工作中都可以使用。 (相同的工作簿)。但是,当我循环浏览工作簿之间的行时,出现“运行时错误9”下标超出范围。

我已经检查了好几次文件名是否符合代码中的说明,这似乎不是问题。另外,如果我在第一篇文章中写y.sheets(“ Tavledisplay”)而不是worksheets(“ Tavledisplay”),则调试器会告诉我那里存在问题。使用后一种方法,它将发送1个数据循环,并在y.sheets("Tavledisplay").Activate处停止。

我的代码:

Dim x As Workbook
Dim y As Workbook

Set x = Workbooks.Open("C:\Users\u054939\Desktop\Diverse filer\Safecard\Safecardmaster.xlsm")
Set y = Workbooks.Open("C:\Users\u054939\Desktop\Diverse filer\Safecard\Tavleark1.xlsm")

    a = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To a

        If Worksheets("Tavledisplay").Cells(i, 14).Value = "Ja" Then
            Worksheets("Tavledisplay").Rows(i).Select
            Selection.Copy
            x.Sheets("Løsninger").Activate
            b = Worksheets("Løsninger").Cells(Rows.Count, 1).End(xlUp).Row
            x.Sheets("Løsninger").Cells(b + 1, 1).Select
            ActiveSheet.Paste
            y.Sheets("Tavledisplay").Activate
            Selection.ClearContents


    End If

Next i

Application.CutCopyMode = False
x.Sheets("Løsninger").Select

我希望代码循环遍历所有给定的行,在第14列中有一个“ Ja”,并将它们粘贴到我的其他工作簿工作表“Løsninger”中,并将它们从其他工作簿中删除。

1 个答案:

答案 0 :(得分:0)

您不需要遍历每个循环,一个简单的过滤器就能解决问题:

Option Explicit
Sub Test()

    Dim x As Workbook
    Dim y As Workbook
    Dim CopyRange As Range
    Dim LastRow As Long

    Set x = Workbooks.Open("C:\Users\u054939\Desktop\Diverse filer\Safecard\Safecardmaster.xlsm")
    Set y = Workbooks.Open("C:\Users\u054939\Desktop\Diverse filer\Safecard\Tavleark1.xlsm")

    'Look for the range to copy and set it
    With y.Worksheets("Tabledisplay")
        .UsedRange.AutoFilter Field:=14, Criteria1:="Ja"
        LastRow = .Cells(.Rows.Count, 14).End(xlUp).Row
        Set CopyRange = .Range("A2", .Cells(LastRow, .UsedRange.Columns.Count)).SpecialCells(xlCellTypeVisible)
        .AutoFilterMode = False
    End With

    'Paste it to the other sheet
    With x.Worksheets("Løsninger")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        CopyRange.Copy .Cells(LastRow, 1)
    End With

    'Delete the range from the original sheet
    CopyRange.Delete

End Sub