【发布时间】:2019-09-30 22:15:27
【问题描述】:
我正在尝试在 vba 中创建一个高级过滤器并将独特的内容粘贴到新工作表中。但是,我收到一条错误消息,指出“未定义变量” - 请注意,我是 VBA 的完整初学者
我正在尝试从工作表中复制值并将其粘贴到新工作表中。但是有重复项,我尝试了 vba 中的高级过滤方法。仅当某个选择列的 1 或 2 为空白时,才应应用数据副本。
Sub copyuniqval()
shBudget.Range("A2:c1048576").ClearContents
Dim lngLastRow As Long: lngLastRow = shProject.Range("A1048576").End(xlUp).Row
If shProject.Range("K1048576").End(xlUp).Row = "" And shProject.Range("L1048576").End(xlUp).Row = "" Then
MsgBox "Do Nothing"
Else
shProject.Range("A5:A" & lngLastRow).AdvancedFilter_
Action = xlFilterCopy_
CopyToRange = shBudget.Range("A2")
Unique = True
End Sub
它应该查看列 K 和 L,如果它是空白的,则 msgBox 带有“什么都不做”。如果它不为空,则复制 A 列中的值,并将它们粘贴到新工作表中。并仅粘贴唯一值。
但是,使用上面的代码,我得到了 compile error: Variable not defined
【问题讨论】:
-
您缺少
End If- 您需要在Range.AutoFilter部分的参数之间使用续行符和逗号。 -
另外——代表行号的
.Row永远不会= ""。所以shProject.Range("K1048576").End(xlUp).Row = "" And shProject.Range("L1048576").End(xlUp).Row = ""将永远是False。我假设您不想要.Row的实例。 -
在 BigBen,正确。我不想要一个假的。您会建议任何其他有助于此的代码吗?
-
删除
.Row的两个实例。