2016-03-07 222 views
1

我正在尝试创建一个脚本,它可以删除数字列表中的重复项。唯一的问题是,我一直在收到Subscript out of range (Error 9)Visual Basic:运行时错误'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 

而且我不知道为什么

+1

单位是一个可变大小的数组,你需要在保存数值之前给它一个大小。使用“Dim units(0至36)As Variant”。 –

+0

我不确定你想要做什么,但是'Range'对象的'RemoveDuplicates'方法,或者使用'Collection'或'Dictionary'对象都可能是更好的方法。 –

+0

@RonRosenfeld谢谢!我现在已经环顾了好几个小时,你是第一个提出这个建议的人。 –

回答

0

您需要触发错误行之前添加下面的下面一行。

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 
+0

我没有清理我的模糊,但它不再报告错误。 –

相关问题