【发布时间】:2018-06-09 11:17:45
【问题描述】:
假设我有一个列向量
1 2 1 2 1 1 1 1 1
我需要以编程方式删除重复项。所以删除重复后的输出应该是:
1 2
但是,VBA 的 .removeDuplicates 方法失败,触发错误 1004(应用程序定义错误)。
我的设置如下:
我有一本包含实际数据的工作簿。第二个工作簿包含在第一个工作簿上运行的 vba 代码。
观察#1:
当我从包含数据的工作簿和包含数据的工作表中执行 .removeDuplicates 方法时,代码就像一个魅力。
sub test
ActiveSheet.Range("$a$2:$a$20").RemoveDuplicates Columns:=1, Header:=xlYes
end sub
观察 #2:
但是,当我尝试从另一个工作簿运行相同的代码时(稍作修改以解决代码在第一个工作簿之外的事实),.removeDuplicates 失败:
Sub test()
Dim wb As Workbook
Dim sh As Worksheet
'get a handle to data containing workbook and sheet
Set wb = Workbooks(1) 'change wb index as needed
Set sh = wb.Sheets("s2") ' change sheet name as needed
sh.Range("$a$2:$a$20").RemoveDuplicates Columns:=Array(1), Header:=xlYes
End Sub
以前有人处理过这个吗?我不能使用另一个工作簿中的 .removeDuplicates 吗?我查看了 MSDN 的 API,没有提及限制...
【问题讨论】:
-
您是否使用 Workbooks(2) 而非 Workbooks(1) 进行测试。
-
代码成功地为我工作,即使是从不同的工作簿运行。您是否有任何未向我们展示的
On Error声明? (我想我应该问一个明显的问题......“s2”是Worksheet还是Chart或其他什么?例如,如果它是一个宏表,它会给出1004错误。) -
忽略我之前评论的最后一部分 - 如果它是宏表而不是工作表,即使代码从同一个工作簿运行,您也会收到 1004 错误。
-
s2 只是工作表的名称。因此,为了确保我正确理解您,您可以在工作簿 #2 之外运行 .removeDuplicates 方法并在工作簿 #1 中成功应用该方法?
-
是的。我可以让它失败的唯一方法是如果“s2”不是工作表,例如如果它实际上是一个宏工作表(看起来与工作表非常相似)。我没有测试它,但我认为如果工作表受到保护,或者某些单元格被合并或类似的东西,它也会失败。但是,当您在实际工作簿中运行宏时,这些原因都不允许它工作 - 即仅从不同的工作簿运行宏不会导致错误。
标签: vba excel duplicates