我得到了总列数,并尝试将其附加到字符串中,根据列数,它是 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
Run Code Online (Sandbox Code Playgroud)
我上面的代码将匹配我放置在 Array() 中的组合,然后删除重复项,是吗?如果我错了,请纠正我,但是我收到了应用程序定义的错误。
如何将动态列数设置到 Array() 中?
Array(1,2,3)不等于Array("1,2,3"). 第一个将生成一个包含 1,2 和 3 的 3 元素数组,第二个将生成一个包含字符串 的 1 元素数组"1,2,3"。
要创建实际的数组,我们可以执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
现在好像使用Variant数组而不是Long数组并且使用基于 0 的数组还不够,RemoveDuplicates显然也无法处理作为变量而不是值的引用传递的参数。要将变量作为值而不是引用传递,请将其括在括号中。这会导致对变量进行求值,然后将其传递给函数。
ThisWorkbook.Worksheets(1).Cells.RemoveDuplicates Columns:=(numOfCol), Header:=xlNo
Run Code Online (Sandbox Code Playgroud)