我有这段代码来消除去规范化层次结构表中的所有异常。当我尝试用一百行记录运行这个宏时,可能大约 200 到 300 行,它工作得很好。但是,当我尝试使用所有行(大约 18,000 行)运行宏时,它会返回“下标超出范围”错误。我不确定代码有什么问题,因为它似乎可以正常处理数百行。我正在使用 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
评论跟进
我重写了你的代码。这是你正在尝试的吗?请注意,我尚未对其进行测试,因此如果您遇到任何错误,请告诉我。我也对相关部分的代码进行了评论。
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
关于arrays - 下标超出范围 VBA Excel 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012962/