我调暗了变量:
Dim mainTableRange As Range
然后给它一个值:
Set mainTableRange = Range("tLedgerData") ' tLedgerData is an Excel table.
现在我试图从变量中获取表的名称(即“tLedgerData”)以引用该表中的列,即使表名发生更改也是如此。
我试过了
mainTableRange.Name
和
mainTableRange.Name.Name
(参见 how do you get a range to return its name。)两者都引发了运行时错误“1004”:应用程序定义或对象定义错误。
mainTableRange.Select
选择了除标题和总行之外的所有表数据。
最佳答案
我认为您在这里遇到了 X-Y 问题:当解决问题 Y 时解决问题 X。
[...] to reference columns in that table even if the table name changes
有表/
ListObject
单独在自己的专用工作表上,并给工作表一个CodeName
.这样你就可以这样做:Dim tbl As ListObject
Set tbl = LedgerDataSheet.ListObjects(1)
现在您拥有
ListObject
的全能力量API 做任何你想做的事。例如,检索列名:Dim i As Long
For i = 1 To tbl.ListColumns.Count
Debug.Print tbl.ListColumns(i).Name
Next
换句话说,您不需要关心表的名称。你想要的是使用它的
ListObject
.而且由于您永远不需要按名称引用它,表的名称完全无关紧要,用户可以随心所欲地更改它,您的代码甚至不会注意到。
关于vba - 如何从范围变量中获取表的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41250261/