下标超出范围VBA Excel数组

用户名

我有这段代码可以消除去符号化层次结构表中的所有异常。当我尝试用一​​百行记录(可能约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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

VBA/Excel:“下标超出范围”错误

来自分类Dev

数组中的VBA随机元素,下标超出范围错误

来自分类Dev

数组中的VBA随机元素,下标超出范围错误

来自分类Dev

此Excel VBA脚本中的下标超出范围错误

来自分类Dev

Excel 2013 VBA:下标超出范围(错误9)

来自分类Dev

Excel VBA:下标超出范围的代码修复

来自分类Dev

Excel VBA 下标在 00:00 拆分时超出范围

来自分类Dev

下标超出范围,数组变量

来自分类Dev

工作表数组下标超出范围

来自分类Dev

PostgreSQL:错误:数组下标超出范围

来自分类Dev

传递数组ByRef,下标超出范围

来自分类Dev

数组大小相同,但下标超出范围

来自分类Dev

SAS 数组下标超出范围

来自分类Dev

索引超出范围数组下标

来自分类Dev

数组已经提到/下标超出范围

来自分类Dev

Excel VBA-运行时错误'9',下标超出范围

来自分类Dev

Excel VBA无法修复运行时错误“ 9”:下标超出范围

来自分类Dev

VBA-下标超出范围错误导致Excel崩溃

来自分类Dev

具有下标超出范围错误的Excel VBA剪切和粘贴功能

来自分类Dev

下标超出范围 - 使用 Excel VBA 查找下一个

来自分类Dev

指定数组循环范围的下标超出范围错误

来自分类Dev

向数组添加项目时下标超出范围

来自分类Dev

Excel VB下标超出范围修复宏

来自分类Dev

下标超出范围,VBA

来自分类Dev

VBA:下标超出范围

来自分类Dev

数组超出范围

来自分类Dev

将值分配给动态多维数组的第一维和第二维时,VBA下标超出范围

来自分类Dev

将变量分配给数组时,为什么出现数组下标超出范围错误?

来自分类Dev

Excel VBA - .xlam (AddIn) 抛出下标超出范围错误 9 但一切都像 xlsm 一样?

Related 相关文章

热门标签

归档