【发布时间】:2017-01-23 15:17:40
【问题描述】:
这似乎是一项简单的任务,但我不断遇到各种错误。我需要过滤工作表 B,然后复制一列数据。然后我需要过滤工作表 A,然后将复制的数据粘贴到列中。
Worksheets("SheetB").Select
lastRowOne = Range("B" & Rows.Count).End(xlUp).Row
Range("DL2:DL" & lastRowOne).AutoFilter Field:=116, Criteria1:="<>Apples"
lastRowTwo = Range("B" & Rows.Count).End(xlUp).Row
Range("DG2:DG" & lastRowTwo).AutoFilter Field:=111, Criteria1:=Target
'Target is already defined earlier in the Macro and functions fine
lastRowThree = Range("B" & Rows.Count).End(xlUp).Row
Range("DX2:DX" & lastRowThree).Copy
Worksheets("SheetA").Activate
lastRowFour = Range("B" & Rows.Count).End(xlUp).Row
Range("A2:A" & lastRowFour).AutoFilter Field:=1, Criteria1:=Target
lastRowFive = Range("B" & Rows.Count).End(xlUp).Row
Range("Z2:Z" & lastRowFive).SpecialCells(xlCellTypeVisible).Select
Selection.PasteSpecial Paste:=xlPasteRange, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
我也试过代替最后一行:
ActiveSheet.Paste
第一个返回“运行时错误'1004': 范围类的 PasteSpecial 方法失败
ActiveSheet.Paste 返回“运行时错误‘1004’: Worksheet 类的粘贴方法失败
虽然这段代码不是最干净的,但除了“粘贴”到 Z 列中的“sheetA”上之外,它所有的功能都可以。如果可以将其包含在修复中,我还需要粘贴到 AA 中的数据。
谢谢!
【问题讨论】:
-
我有一种预感,是因为你使用了
.Select/.Activate。使用这些不是最佳实践——你想avoid using.Select/.Activate,你可以看到它会抛出一些错误。我高度建议通读该页面并应用它。如果您仍然遇到错误,请告诉我们。尤其是在工作表之间切换时,使用.Activate可能会失败。 -
@BruceWayne 谢谢——我修改了我的宏以使用:
lastRow = Range("B" & Rows.Count).End(xlUp).RowDim Adjustment As Range'Set Adjustment = Worksheets("Sheet").Range("DX2:DX" & lastRow)' 然后激活并过滤工作表 A,然后输入以下代码:Range("Z2:Z" & lastRowTwelve).SpecialCells(xlCellTypeVisible).Value = Adjustment.Value这“粘贴”在正确的列中,但“复制”的数据不正确。它忽略了 SheetB 上的过滤器(在我的原始代码中它正确复制。有什么建议吗?我正在继续尝试清理 .activate 和 .selection! -
我改为:
Set Adjustment = Worksheets("YTD Promo Review").Range("DX2:DX" & lastRowTen).SpecialCells(xlCellTypeVisible)这导致四行正确的行将“粘贴”到 Z 列中的 SheetA。但前四行以下的其余行不正确。他们说#N/A -
@BruceWayne 谢谢你的帮助。您发布的代码运行没有错误,但“粘贴的数据”不正确。它从工作表 B 上的正确列中提取,但行不正确。它是从列顶部“复制”,而不仅仅是可见单元格(来自过滤器)。我将:
Set copyRng = .Range("DX2:DX" & lastRow)更改为:Set copyRng = .Range("DX2:DX" & lastRowLast).SpecialCells(xlCellTypeVisible)这正确“复制”并“粘贴”了前四行,但其余行现在包含 #N/A - 只是作为一个值 - 其中没有公式。有什么想法吗? -
不看数据就很难判断,尤其是在添加过滤器时。这两个范围肯定相等吗?在复制之前,请查看
copyRng,看看是否有任何原因可能使单元格成为/变成#N/A。这些公式是我假设您将值粘贴到另一张表吗?如果可以,我建议手动执行这部分步骤,并打开宏记录器。因此,复制您的范围,将其作为值粘贴到另一张纸上。然后查看生成的代码,并检查是否有任何#N/A单元格。 (PS:在回复我的答案时,请在该答案下发表评论)
标签: excel macros runtime-error paste worksheet