【问题标题】:"Subscript out of range" error for ListObjectListObject 的“下标超出范围”错误
【发布时间】:2019-11-11 00:29:49
【问题描述】:

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

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

我要声明 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错误'。

【问题讨论】:

标签: excel vba


【解决方案1】:

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

【讨论】:

  • 参见this question,了解如何引用ListObject。此外,每个ListObject.Name 都是独一无二的。正如this answer 对链接问题所解释的那样,使用Range 引用来引用ListObject 是一种“黑客行为”。
  • 明白。谢谢(你的)信息。你能帮我解释一下DisplayNameName属性之间的区别吗?
  • 我会推荐您参考 DisplayNameName 文档。从快速测试来看,如果您更新DisplayName,Excel 似乎会更新Name,反之亦然。
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多