2016-11-14 110 views
0

我得到了列的总数,并尝试将它追加到字符串中,这种方式取决于列的数量,它是1,2,3,4,5。根据列的动态数量删除重复的行

Sub DeleteHighlightedRecords() 

numofCol = "" 

    For i = 1 To lcol 

     numofCol = numofCol & "," & i 

    Next i 

numofCol = Mid(numofCol, 2) 

ThisWorkbook.Worksheets(1).Cells.RemoveDuplicates Columns:=Array(numofCol), Header:=xlNo 
End Sub 

上面的代码我有将我置于阵列()的组合相匹配,然后移除重复亚?纠正我,如果我错了,但我得到应用程序定义的错误。

我该如何设置列的动态数组到Array()中?

+0

将列参数传递给'RemoveDuplicates'很棘手。你究竟得到了什么错误? @Ralph:这不是要从数组中删除重复项,而是从数组指定的列中删除重复项。 – arcadeprecinct

+0

如果您有兴趣了解运行时错误1004,但是@arcadeprecinct已经提供了下面的解决方案。 –

+0

是的,这是我;-)我只是好奇,因为我在测试 – arcadeprecinct

回答

3

Array(1,2,3)Array("1,2,3")不一样。第一个将生成包含1,2和3的3元素数组,第二个将生成包含字符串"1,2,3"的1元素数组。

要创建一个实际的数组,我们可以做到以下几点:

Dim numOfCol() As Variant 'normally I would choose Long instead of variant but that gave a type mismatch error 
    Dim i As Long 'always use "Option Explicit" at the top of your module! 
    ReDim numOfCol(0 To (lcol - 1)) 'has to be 0-based for RemoveDuplicates 

    For i = 0 To (lcol - 1) 
     numOfCol(i) = i + 1 
    Next i 

现在,如果使用Variant数组,而不是Long阵列,通过基于0阵列是不够的,RemoveDuplicates显然也可以处理作为参数传递给变量而不是值的参数。要将变量作为值传递而不是引用,请将其包含在括号中。这会导致变量被评估并传递给函数。

ThisWorkbook.Worksheets(1).Cells.RemoveDuplicates Columns:=(numOfCol), Header:=xlNo 
+0

时遇到了多个不常见的错误感谢@arcadeprecinct您的建议。它像一个魅力。 –