【问题标题】:Visual Basic: Run-time error '9': "Subscript out of range"Visual Basic:运行时错误“9”:“下标超出范围”
【发布时间】:2016-03-07 11:01:59
【问题描述】:

我正在尝试制作一个脚本,它可以删除数字列表中的重复项。唯一的问题是我不断收到Subscript out of range (Error 9)

Sub remDupes()
Dim units() As Variant
For i = 2 To 37
    Dim var As String
    If ((Not Not units) = 0) Then
        For x = 0 To 36
            var = Cells(i, 22).Value
            If (units(x) = var) Then
                Range("V" & i, "AA" & i).Value = ""
            Else
                units(x) = var
            End If
        Next
    End If
Next
End Sub

错误发生在:

If (units(x) = var) Then

我不知道为什么

【问题讨论】:

  • Units 是一个可变大小的数组,您需要先给它一个大小,然后再将值保存在其中。使用Dim units(0 to 36) As Variant
  • 我不确定您到底想做什么,但Range 对象的RemoveDuplicates 方法,或者使用CollectionDictionary 对象,可能是更好的方式。
  • @RonRosenfeld 谢谢!我已经找了好几个小时了,你是第一个提出这个建议的人。
  • @MathiasFrandsen 尝试其中一种方法,如果遇到问题,请编辑原始问题以寻求帮助;如果没有,您可以发布您的结果作为您自己问题的答案。
  • If ((Not Not units) = 0) Then对我来说毫无意义。这有什么用途 ?实际代码创建一个大小为 0 的空数组。试试Ìf Len(Join(units))>0 then

标签: vba excel basic


【解决方案1】:

您需要在触发错误的行之前添加以下行。

ReDim Preserve units(0 To x)

新代码将如下所示。

Sub remDupes()
Dim units() As Variant
For i = 2 To 37
    Dim var As String
    If ((Not Not units) = 0) Then
        For x = 0 To 36
            var = Cells(i, 22).Value
            ReDim Preserve units(0 To x)
            If (units(x) = var) Then
                Range("V" & i, "AA" & i).Value = ""
            Else
                units(x) = var
            End If
        Next
    End If
Next
End Sub

【讨论】:

  • 我没有清理我的骗子,但它不再报告错误了。
猜你喜欢
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多