首页 > 解决方案 > ListObject 的“下标超出范围”错误

问题描述

我调用一个 sub 来选择多个工作表中的范围并将其转换为表格。它生成表并将它们命名为“SIS_1”、“SIS_2”等。要在我当前的子表中使用这些表,我可以在工作表 3 中声明和设置表“SIS_1”,但不能在工作表 4 中声明和设置表“SIS_2”,依此类推。它与工作表代码(以红色突出显示)有什么关系?

IMG2

我似乎无法找到问题所在。如果我手动将excel中的“SIS_2”重命名为“SIS_x”,然后将其重命名为“SIS_2”,似乎可以解决问题,然后我可以像往常一样声明变量。我不明白为什么会这样。

IMG1

我想声明 ListObject 的代码

Public Sub ImportButton_Click()

    Dim totalSheets As Integer
    Dim startSheet As Integer, endSheet As Integer
    Dim masterSIS As ListObject, sourceSIS As ListObject
    Dim i As Integer

    Set masterSIS = Worksheets("MasterSIS").ListObjects("MasterSIS")

    totalSheets = ThisWorkbook.Worksheets.Count

    Call importSheets([filePath])

    startSheet = totalSheets + 1
    endSheet = ThisWorkbook.Worksheets.Count

    Call convertToTable(startSheet, endSheet, "SIS")

    For i = 1 To endSheet - totalSheets
        Set sourceSIS = Worksheets(startSheet).ListObjects("SIS_" & i)
        Call appendTable(masterSIS, sourceSIS)
        startSheet = startSheet + 1
    Next i

End Sub

对于任何有类似问题的人。希望这可以帮助。

在这里找到解决方案https://www.dingbatdata.com/2017/11/24/referencing-listobjects-with-vba/

要声明 LinkObject,您需要这样做。Range("TableName").ListObject似乎“如果工作表更改其位置将会出现 VBA 错误”。

标签: excelvba

解决方案


发现上一个子中的循环代码错误生成表名的问题。修复它,错误消失了。


推荐阅读