我正在尝试遍历从一个工作簿复制自动过滤范围并将其粘贴到另一个工作簿的代码。我
I am trying to loop through code that copies an autofiltered range from one workbook and paste it into another. I
我有一个循环,它在工作簿 A 中获取动态范围并将其粘贴到工作簿 B 的单元格 D4 中。然后它再次循环并在工作簿 C 的单元格 D4 中粘贴另一个动态范围。但是这两个范围可能大小不同。
我收到 "PasteSpecial method of Range class failed"
我已经尝试了这里 copy/paste 的所有三种方法 https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/
前两个示例不复制,最后一个示例复制但给我上面的 PasteSpecial 错误。
Sub CopyPaste()
Dim AX As Workbook
Dim WB As Workbook
Dim rng As Range
Dim autofiltrng As Range
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")
Set AX = Workbooks.Open("C:\Desktop\AXFile.xlsx")
Set WB = Workbooks.Open("C:\Desktop\ClientA.xlsx")
'filtering AX file to show 1 specific client
With Axys
AX.Sheets(1).Range("A2").AutoFilter Field:=4, Criteria1:="ClientA"
End With
With ActiveSheet.AutoFilter.Range
On Error Resume Next
Set autofiltrng = .Offset(1, 0).Resize(.Rows.Count - 1,_
1).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
Set rng = AX.Sheets(1).AutoFilter.Range
'copy/paste data for specific client in their own XLS
rng.Offset(1, 5).Resize(rng.Rows.Count - 5).Copy
WB.Sheets(1).Range("a14").PasteSpecial xlPasteValues
Application.CutCopyMode = False
WB.Save
WB.Close
AX.Close
End Sub
我从上面的代码中取出了循环,但每次我循环遍历 50 多个客户端以创建 50 多个 EXCEL 文件时,我都会在过程中的某个随机点遇到 PasteSpecial 错误。永远不在同一个地方。
建议您明确捕获您感兴趣的信息,而不是使用过滤器和 copy/paste。然后将该信息直接加载到目标中。
没有必要创建一个你永远不会使用也永远不会处理的 xlApp (Set xlApp=Nothing)。
从筛选范围中减去“5”行(即这一行:rng.Offset(1, 5).Resize(rng.Rows.Count - 5).Copy
,看起来像是一个潜在的错误。如果只是想从范围中删除字段 header,请更改5 比 1。
我有一个循环,它在工作簿 A 中获取动态范围并将其粘贴到工作簿 B 的单元格 D4 中。然后它再次循环并在工作簿 C 的单元格 D4 中粘贴另一个动态范围。但是这两个范围可能大小不同。
我收到 "PasteSpecial method of Range class failed"
我已经尝试了这里 copy/paste 的所有三种方法 https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/ 前两个示例不复制,最后一个示例复制但给我上面的 PasteSpecial 错误。
Sub CopyPaste()
Dim AX As Workbook
Dim WB As Workbook
Dim rng As Range
Dim autofiltrng As Range
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")
Set AX = Workbooks.Open("C:\Desktop\AXFile.xlsx")
Set WB = Workbooks.Open("C:\Desktop\ClientA.xlsx")
'filtering AX file to show 1 specific client
With Axys
AX.Sheets(1).Range("A2").AutoFilter Field:=4, Criteria1:="ClientA"
End With
With ActiveSheet.AutoFilter.Range
On Error Resume Next
Set autofiltrng = .Offset(1, 0).Resize(.Rows.Count - 1,_
1).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
Set rng = AX.Sheets(1).AutoFilter.Range
'copy/paste data for specific client in their own XLS
rng.Offset(1, 5).Resize(rng.Rows.Count - 5).Copy
WB.Sheets(1).Range("a14").PasteSpecial xlPasteValues
Application.CutCopyMode = False
WB.Save
WB.Close
AX.Close
End Sub
我从上面的代码中取出了循环,但每次我循环遍历 50 多个客户端以创建 50 多个 EXCEL 文件时,我都会在过程中的某个随机点遇到 PasteSpecial 错误。永远不在同一个地方。
建议您明确捕获您感兴趣的信息,而不是使用过滤器和 copy/paste。然后将该信息直接加载到目标中。
没有必要创建一个你永远不会使用也永远不会处理的 xlApp (Set xlApp=Nothing)。
从筛选范围中减去“5”行(即这一行:rng.Offset(1, 5).Resize(rng.Rows.Count - 5).Copy
,看起来像是一个潜在的错误。如果只是想从范围中删除字段 header,请更改5 比 1。