Excel 复制过滤信息

Excel 复制过滤信息,excel,vba,Excel,Vba,我想把两本不同的工作簿中的信息复制到第三本。下面的代码适用于B,但对于A,它只粘贴第一行信息 我将A的目标设置为源工作簿的另一个选项卡,结果成功了。然后,我将目标设置为一个新创建的工作簿,并且也开始工作 当我再次尝试使用我想要的工作簿时,它只粘贴第一行 'open file A Set W_Book = Workbooks.Open(Folder_Path & A_Rep) Sheets("A").Activate 'filter out information and

我想把两本不同的工作簿中的信息复制到第三本。下面的代码适用于B,但对于A,它只粘贴第一行信息

我将A的目标设置为源工作簿的另一个选项卡,结果成功了。然后,我将目标设置为一个新创建的工作簿,并且也开始工作

当我再次尝试使用我想要的工作簿时,它只粘贴第一行

'open file A
    Set W_Book = Workbooks.Open(Folder_Path & A_Rep)
    Sheets("A").Activate
'filter out information and copy it
    With ActiveSheet
        .AutoFilterMode = False
        .UsedRange.AutoFilter
        .UsedRange.AutoFilter Field:=5, Criteria1:=Start_Date
        .UsedRange.AutoFilter Field:=10, Criteria1:="AAA10"
        .UsedRange.SpecialCells(xlCellTypeVisible).Copy
    End With

'paste on the tracker and close the report
    Windows("Tracker.xlsm").Activate
    Sheets("Sheet A").Range("A1").PasteSpecial
    W_Book.Close False

'open file B
    Set W_Book = Workbooks.Open(Folder_Path & B_Rep)

'filter out information and copy it
    With ActiveSheet
        .AutoFilterMode = False
        .UsedRange.AutoFilter
        .UsedRange.AutoFilter Field:=7, Criteria1:="BBB10" 
        .UsedRange.AutoFilter Field:=24, Criteria1:="Done"
        .UsedRange.SpecialCells(xlCellTypeVisible).Copy
    End With

'paste on the tracker and close the report
    Windows("Tracker.xlsm").Activate
    Sheets("Sheet B").Range("A1").PasteSpecial
    W_Book.Close False

出现这种情况是因为您在筛选数据时使用了ActiveSheet,但在打开工作簿B后,您没有指定要复制的工作表,请尝试下面的代码,它会给您带来更好的结果。我指定了要复制数据的第一个工作表,您可能需要修改它:

Sub foo()
Dim wbTracker As Workbook: Set wbTracker = Workbook("Tracker.xlsm")
'open file A
    Set W_Book = Workbooks.Open(Folder_Path & A_Rep)
'filter out information and copy it
    With W_Book.Sheets("A")
        .AutoFilterMode = False
        .UsedRange.AutoFilter
        .UsedRange.AutoFilter Field:=5, Criteria1:=Start_Date
        .UsedRange.AutoFilter Field:=10, Criteria1:="AAA10"
        .UsedRange.SpecialCells(xlCellTypeVisible).Copy
    End With

'paste on the tracker and close the report
    wbTracker.Sheets("Sheet A").Range("A1").PasteSpecial
    W_Book.Close False

'open file B
    Set W_Book = Workbooks.Open(Folder_Path & B_Rep)

'filter out information and copy it
    With W_Book.Sheets(1)
        .AutoFilterMode = False
        .UsedRange.AutoFilter
        .UsedRange.AutoFilter Field:=7, Criteria1:="BBB10"
        .UsedRange.AutoFilter Field:=24, Criteria1:="Done"
        .UsedRange.SpecialCells(xlCellTypeVisible).Copy
    End With

'paste on the tracker and close the report
    wbTracker.Sheets("Sheet B").Range("A1").PasteSpecial
    W_Book.Close False
End Sub

嗨,Xabier,谢谢你的帮助。我尝试了上面的代码,但不幸的是,我得到了相同的结果。它只粘贴第一行,不粘贴其他行。问题在于选项卡A。在这一点上我没有任何意义。当您单步执行代码时,开始日期的值是多少?开始日期定义为用户通过InputBox输入的日期。实际上,我只是通过将其定义为字符串解决了这个问题,但是我不确定为什么这很重要,因为它确实在另一个工作簿中正确地进行了筛选和粘贴…@Dadaz应用筛选器可能是错误地设置了日期格式,而将其定义为字符串则格式保持输入状态。。很高兴你让它工作了..: