VBA:使用变量传递列数组时删除重复项失败

时间:2016-08-23 15:01:28

标签: excel vba excel-vba

当使用变量传递RemoveDuplicates的Columns参数时,它会失败并抛出错误。当列直接作为Array(1,2)

传递时,相同的代码有效
  

错误5:无效的过程调用或参数

 Sub test()

       Dim arrCols

       arrCols = Array(1, 2)

       '/This here works       
       Sheet1.Range("$A$1:$B$10").RemoveDuplicates Columns:=Array(1, 2), Header _
            :=xlYes

       '/ Same code fails when the columns array is passed via variable
       '/ Error 5: Invalid procedure call or argument
        Sheet1.Range("$A$1:$B$10").RemoveDuplicates Columns:=arrCols, Header _
            :=xlYes

 End Sub

2 个答案:

答案 0 :(得分:6)

()放在数组周围:

Sub test()

       Dim arrCols As Variant

       arrCols = Array(1, 2)

       '/This here works
       Sheet1.Range("$A$1:$B$10").RemoveDuplicates Columns:=Array(1, 2), Header _
            :=xlYes

       '/ Same code fails when the columns array is passed via variable
       '/ Error 5: Invalid procedure call or argument
        Sheet1.Range("$A$1:$B$10").RemoveDuplicates Columns:=(arrCols), Header _
            :=xlYes

 End Sub

这与vba期待看到的内容有关。

答案 1 :(得分:1)

这是我的看法:

  1. 我使用Evaluate函数创建一个数字序列数组-如果您需要长序列,这将派上用场,因为您只需更改列字母即可获得不同的序列

  2. ReDim数组,使其基数为零-否则,由于某种原因,RemoveDuplicate将引发错误

  3. 使用上述解决方法,在调用RemoveDuplicate时在数组周围加上括号

_

Dim arrayTEMP as Variant
arrayTEMP = Application.Evaluate("column(A:Z)")
ReDim Preserve arrayTEMP(0 To UBound(a) - 1) As Variant
.RemoveDuplicates Columns:=(arrayTEMP), Header:=xlYes