我有以下代码,可以从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
问题出在Array(1, 2, 3)
- 我想要匹配Selection.Columns.Count
的列数,即如果有1列是Array(1)
,或者有4列是Array(1, 2, 3, 4)
{1}},所以我需要能够动态构建它。
我已经尝试构建一个Long
的数组,将其复制到Variant
并执行Split(Join(...))
,但是将这些传递给方法会给我一个错误:
Run-time error '5':
Invalid procedure call or argument
使用Array()
函数似乎是唯一有效的参数,但我无法动态构建它。
答案 0 :(得分:2)
列数组需要传递
byval
而不是byref
。
使用( arrCols )而不是arrCols
Sub Test()
Dim rng As Range
Dim lCtr As Long
Dim arrCols()
Dim arrTemp
Set rng = Sheet2.Range("A1:C11")
arrTemp = Split("1,2", ",")
ReDim arrCols(0 To UBound(arrTemp))
For lCtr = LBound(arrTemp) To UBound(arrTemp)
arrCols(lCtr) = arrTemp(lCtr)
Next
'/ VBA needs the array to be passed by value. Use (arrCols), notice the parenthesis!
rng.RemoveDuplicates Columns:=(arrCols), Header:=xlYes
End Sub
答案 1 :(得分:0)
只需从代码中省略Array(1, 2, 3)
。对我有用
ActiveSheet.Range(Cells(1, 1), Cells(lastRow, lastCol)).RemoveDuplicates , Header:=xlYes