在 VBA 中,我知道我可以通过这种方式引用结构化表:
Set Tbl = Sheets("MySheetName").ListObjects("MyTblName")
然后执行 Tbl.XXX,其中 .XXX 可以是 .Name、.Range 等。
但是,我想在不引用工作表名称的情况下引用此表,以便在工作表名称更改时宏不会中断。
这可能吗?
在 VBA 中,我知道我可以通过这种方式引用结构化表:
Set Tbl = Sheets("MySheetName").ListObjects("MyTblName")
然后执行 Tbl.XXX,其中 .XXX 可以是 .Name、.Range 等。
但是,我想在不引用工作表名称的情况下引用此表,以便在工作表名称更改时宏不会中断。
这可能吗?
经过一番研究,我发现了一些不是完美解决方案的东西。您可以像这样使用 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/
如果您的表在 ActiveSheet 上,您可以像这样使用它:
Set Tbl = ActiveSheet.ListObjects("MyTblName")