Vba 删除可变列数中的重复项

Vba 删除可变列数中的重复项,vba,excel,Vba,Excel,我有下面的代码,可以从3列中删除重复项 Sub RemoveDuplicates() ' ' RemoveDuplicates Macro ' ' Keyboard Shortcut: Ctrl+Shift+Q ' Intersect(Selection.EntireColumn, ActiveSheet.UsedRange).RemoveDuplicates _ Columns:=Array(1,2,3), _ Header:=xlNo End Su

我有下面的代码,可以从3列中删除重复项

Sub RemoveDuplicates()
'
' RemoveDuplicates Macro
'
' Keyboard Shortcut: Ctrl+Shift+Q
'

    Intersect(Selection.EntireColumn, ActiveSheet.UsedRange).RemoveDuplicates _
        Columns:=Array(1,2,3), _
        Header:=xlNo

End Sub
问题在于
数组(1,2,3)
-我希望列的数量与
选择.列.计数
相匹配,即如果有1列,它就是
数组(1)
,或者如果有4列,它就是
数组(1,2,3,4)
,因此我需要能够动态构建它

我曾尝试构建一个
Long
s数组,将其复制到
变量中,并执行
拆分(Join(…)
,但将其中任何一个传递到方法中都会出现错误:

Run-time error  '5':
Invalid procedure call or argument
使用
Array()
函数似乎是唯一有效的参数,但我无法动态构建它

列数组需要传递
byval
,而不是
byref

使用arrCols不使用arrCols


只需从代码中省略
数组(1,2,3)
。它对我有用

ActiveSheet.Range(Cells(1, 1), Cells(lastRow, lastCol)).RemoveDuplicates , Header:=xlYes

Columns:=(arrCols)
Columns:=arrCols
之间的区别是什么?
Columns:=(arrCols)
是ByVal,而
Columns:=arrCols
是ByRef(答案中突出显示了相同的内容:))。读这篇文章:我认为在答案中再详细说明一下是值得的。这是一个非常有趣的结果!你能解释一下为什么
需要通过
ByVal
传递吗?@chrisneilsen没有女士提供的文档。至少我找不到任何东西。我把它归类为许多“卓越”的大发脾气之一,以此解决了这个问题。
ActiveSheet.Range(Cells(1, 1), Cells(lastRow, lastCol)).RemoveDuplicates , Header:=xlYes