ListObject

时间:2019-06-29 11:33:22

标签: excel vba

我调用一个子控件,该子控件选择并将多个工作表中的范围转换为表格。它生成表并将其命名为“ 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错误”。

1 个答案:

答案 0 :(得分:0)

发现了问题,原因是前一个子句中的循环代码错误地生成了表名。修复它,错误消失。