【问题标题】:Remove duplicate rows based on dynamic amount of columns根据动态列数删除重复行
【发布时间】:2018-09-26 22:41:20
【问题描述】:

我得到了总列数,并尝试将其附加到字符串中,根据列数,它是 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() 中的组合,然后删除重复项好吗?如果我错了,请纠正我,但是我收到了应用程序定义的错误。

如何将动态列数设置到 Array() 中?

【问题讨论】:

  • 将 columns 参数传递给 RemoveDuplicates 很棘手。你到底得到了什么错误? @Ralph:这不是从数组中删除重复项,而是从数组指定的列中删除。
  • 如果您有兴趣知道,我会收到运行时错误 1004,但是@arcadeprecinct 已经在下面提供了解决方案。
  • 是的,就是我 ;-) 我只是好奇,因为我在测试时遇到了多个不常见的错误

标签: vba excel


【解决方案1】:

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

【讨论】:

  • 感谢@arcadeprecinct 的建议。它就像一个魅力。
猜你喜欢
  • 2017-08-08
  • 2022-06-17
  • 2019-05-29
  • 2017-07-06
  • 2017-02-12
  • 2021-06-24
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多