Vba 删除可变列数中的重复项
我有下面的代码,可以从3列中删除重复项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
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