3

在 VBA 中,我知道我可以通过这种方式引用结构化表:

  Set Tbl = Sheets("MySheetName").ListObjects("MyTblName")

然后执行 Tbl.XXX,其中 .XXX 可以是 .Name、.Range 等。

但是,我想在不引用工作表名称的情况下引用此表,以便在工作表名称更改时宏不会中断。

这可能吗?

4

3 回答 3

3

经过一番研究,我发现了一些不是完美解决方案的东西。您可以像这样使用 VBA 中的 Range 函数:

Set tbl = Range("TableName[#All]")

但是,这不是 ListObject 而是 Range。您还可以做其他参考,例如:

结构化表格的主体(不包括标题)

Range("TableName")

正文的列名为“MyColumn”

Range("TableName[MyColumn]")

等等

然后你调用类似: tbl.ListObject 来引用找到范围的结构化表。

很酷的是 Range() 将始终在 ActiveWorkbook 上运行,因此您可以在 WorkBook B 中并在 Workbook A 中打开一个宏,它仍将在 Workbook B 上运行

资料来源:https ://peltiertech.com/structured-referencing-excel-tables/

于 2018-11-01T10:26:20.520 回答
1

为什么不引用工作表的“内部”名称而不是其可见名称?

在此处输入图像描述

于 2018-11-18T09:20:01.380 回答
0

如果您的表在 ActiveSheet 上,您可以像这样使用它:

Set Tbl = ActiveSheet.ListObjects("MyTblName")
于 2018-11-01T10:05:40.263 回答