下标超出范围的VBA Excel数组

我有这个代码消除denormlaized层次结构表中的所有exception。 当我试图用一百行logging来运行这个macros时,大概200到300,它工作得很好。 但是,当我尝试运行与我所有行,这是大约18000行的macros,它将返回“下标超出范围”错误。 我不知道代码有什么问题,因为它似乎与数百行工作正常。 我正在使用MS Excel 2010版本。 任何帮助将不胜感激,非常感谢。

这是我的工作代码:

Option Explicit Sub EliminateAnomaliesDH() Sheets("Denorm Hier").Select Range("A1").Select Dim iCtr As Integer Dim arr As Variant iCtr = 2 While Range("B" & iCtr).Value <> "" arr = Split(Range("B" & iCtr).Value, "[") arr = Split(arr(1), "]") Select Case arr(0) Case "L1" Range("F" & iCtr & ":AB" & iCtr & "").Value = "" Case "L2" Range("H" & iCtr & ":AB" & iCtr & "").Value = "" Case "L3" Range("J" & iCtr & ":AB" & iCtr & "").Value = "" Case "L4" Range("L" & iCtr & ":AB" & iCtr & "").Value = "" Case "L5" Range("N" & iCtr & ":AB" & iCtr & "").Value = "" Case "L6" Range("P" & iCtr & ":AB" & iCtr & "").Value = "" Case "L7" Range("R" & iCtr & ":AB" & iCtr & "").Value = "" Case "L8" Range("T" & iCtr & ":AB" & iCtr & "").Value = "" Case "L9" Range("V" & iCtr & ":AB" & iCtr & "").Value = "" Case "L10" Range("X" & iCtr & ":AB" & iCtr & "").Value = "" Case "L11" Range("Z" & iCtr & ":AB" & iCtr & "").Value = "" Case "L12" Range("AB" & iCtr & ":AB" & iCtr & "").Value = "" End Select iCtr = iCtr + 1 Wend Sheets("Instructions").Select MsgBox "Successfully removed all anomalies of the Denormalized hierarchy Table" End Sub 

即使你没有提到你遇到错误的那一行,也是很明显的。 错误是最有可能的

 arr = Split(arr(1), "]") 

原因很简单。 由于单元格没有“[”所以在分割之后没有ar(1)

这是一个非常简单的方法来重现错误。

 Sub sample() Dim sString As String Dim myar sString = "Blah Blah" myar = Split(sString, "]") myar = Split(myar(1), "[") '<~~ Error here Debug.Print myar(0) End Sub 

为了确保您不会收到错误,请使用INSTR()检查[]存在,然后将其拆分。

例如

  If InStr(1, sString, "]") Then myar = Split(sString, "]") End If 

从评论后续

我重写了你的代码。 这是你正在尝试? 请注意,我没有testing它,所以让我知道,如果你有任何错误。 我也曾就相关部分的代码进行过评论。

 Sub EliminateAnomaliesDH() Dim ws As Worksheet Dim lRow As Long, i As Long Dim tempString As String, sString As String Set ws = ThisWorkbook.Sheets("Denorm Hier") With ws '~~> Get the last row which has data in Col B lRow = .Range("B" & .Rows.Count).End(xlUp).Row '~~> Loop through cells in column B For i = 2 To lRow sString = .Range("B" & i).Value '~~> Check if the cell has both "[" and "]" If InStr(1, sString, "[") And InStr(1, sString, "]") Then tempString = Split(.Range("B" & i).Value, "[")(1) tempString = Split(tempString, "]")(0) '~~> This required so that we do an exact match '~~> For example, " l1", " l1 ", " L1" etc '~~> becomes "L1" tempString = UCase(Trim(tempString)) Select Case tempString Case "L1": .Range("F" & i & ":AB" & i & "").ClearContents Case "L2": .Range("H" & i & ":AB" & i & "").ClearContents Case "L3": .Range("J" & i & ":AB" & i & "").ClearContents Case "L4": .Range("L" & i & ":AB" & i & "").ClearContents Case "L5": .Range("N" & i & ":AB" & i & "").ClearContents Case "L6": .Range("P" & i & ":AB" & i & "").ClearContents Case "L7": .Range("R" & i & ":AB" & i & "").ClearContents Case "L8": .Range("T" & i & ":AB" & i & "").ClearContents Case "L9": .Range("V" & i & ":AB" & i & "").ClearContents Case "L10": .Range("X" & i & ":AB" & i & "").ClearContents Case "L11": .Range("Z" & i & ":AB" & i & "").ClearContents Case "L12": .Range("AB" & i & ":AB" & i & "").ClearContents End Select End If Next i End With MsgBox "Successfully removed all anomalies of the Denormalized hierarchy Table" End Sub