我写了一行代码,直到我做了一点调整。问题是我不明白为什么我的调整会抛出错误:运行时错误1004,此命令至少需要两行源数据....
代码工作线:
Range("E1", Range("E65536").End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
破码:( LastRow是长变量)
Range("E1", Range("E" & LastRow).End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
答案 0 :(得分:2)
尝试Range("E1", "E" & LastRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
。
当您已经引用最后一行时,似乎您正在使用.End(xlUp)
。
答案 1 :(得分:2)
我不能为我的生活找到评论链接,所以我道歉这不是评论。我相信Excel使用xlUp来查找最后一行数据(而不是获取最后一行数据和实际最后一行之间的所有空行 - 65536)。在你的调整中,似乎你已经开始或知道最后一行,所以我不确定你需要使用xlUp。我想在第二个例子中你可以拿出“.End(xlUp)”。那会有用吗?在这种情况下,您还可以缩短对以下内容的引用:
Range("E1:E" & LastRow).AdvancedFilter...
让我知道这是否有帮助,或者我是否误解。
答案 2 :(得分:2)
在我生成的假数据集上,我得到了代码示例的错误。在尝试确定选择的范围时,我发现有时候有用的技巧是使用activate方法。
试试这个
Range("E1", Range("E65536").End(xlUp)).Activate
并查看选择的内容。我不知道你的数据是什么样的,我不太确定你要选择的范围,但我猜测单元格E65536实际上是空的,所以范围(“E65536”)。结束(xlUp) )实际上与Range(“E1”)相同。结束(xlDown)。由于您的代码正在运行,我假设选择的内容将是一个包含多行的范围。
接下来试试......
Range("E1", Range("E" & LastRow).End(xlUp)).Activate
并查看您的工作簿以查看选择的内容。我不确定你是如何在没有看到所有代码的情况下定义LastRow的,但我敢打赌选择的内容只是一个单元格。坦率地说,我认为最好的解决方案(如果你确实要从E1开始并抓住所有行直到它们为空)就是这样做:
Range("E1", Range("E1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
如果这不是您想要的,请说明您想要的范围,也许我们可以为您提供更好的服务。祝你好运!