【问题标题】:Advanced Filter - Variable not defined高级过滤器 - 未定义变量
【发布时间】: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的两个实例。

标签: excel vba


【解决方案1】:

命名参数在 = 符号前需要一个冒号(以及所有相关行之间的逗号和行继续字符):

shProject.Range("A5:A" & lngLastRow).AdvancedFilter _
        Action:=xlFilterCopy, _
        CopyToRange:=shBudget.Range("A2"), _
        Unique:=True

【讨论】:

  • 谢谢大本,罗里。您的建议修复了错误,现在运行良好。
猜你喜欢
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 2012-07-10
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多