1

我写了一行代码,直到我做了一点调整。问题是我不明白为什么我的调整会抛出错误:运行时错误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
4

3 回答 3

2

试试Range("E1", "E" & LastRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True

.End(xlUp)当您已经引用最后一行时,您似乎正在使用。

于 2012-06-05T20:37:19.903 回答
2

我一辈子都找不到评论链接,所以我很抱歉这不是评论。我相信 Excel 使用该 xlUp 来查找最后一行数据(而不是获取最后一行数据和实际最后一行之间的所有空白行 - 65536)。在您的调整中,您似乎已经从最后一行开始或知道最后一行,所以我不确定您是否需要使用 xlUp。我认为在第二个示例中,您可以取出“.End(xlUp)”。那行得通吗?在这种情况下,您还可以缩短对以下内容的引用:

Range("E1:E" & LastRow).AdvancedFilter...

让我知道这是否有帮助或我是否有误解。

于 2012-06-05T20:37:38.257 回答
2

在我生成的假数据集上,您的代码的两个示例都出现错误。当我试图弄清楚选择了哪些范围时,我发现有时一个有用的技巧是使用 activate 方法。

试试这个

Range("E1", Range("E65536").End(xlUp)).Activate

看看什么被选中。我不知道您的数据是什么样的,我不太确定您要选择什么范围,但我猜单元格 E65536 实际上是空的,所以 Range("E65536").End(xlUp ) 实际上与 Range("E1").End(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

如果这不是您想要的,请说明您想要什么样的范围,也许我们可以为您提供更好的工作。祝你好运!

于 2012-06-05T20:41:44.360 回答