我希望能够通过行号和列名从 Excel 表中检索值(为了代码的可读性和稳健性)。
在公式中,我可以将结构化引用与列标题文本一起使用,并从表中获取一个值,如下所示:
=INDIRECT(ADDRESS(<absolute_line_number>;COLUMN(<table_name>[<column_name>])))
这对于公式来说是健壮的,因为如果用户重命名列,公式中对它的所有结构化引用都将自动更新。
但对于 VBA 代码并非如此。
对于工作表,可以定义Worksheet.CodeName
在 VBA 代码中使用,如果用户重命名可见工作表名称,该代码将保持不变。Excel 表 AFAICS 不存在此类属性。
我目前最好的想法是使表格标题为 1 单元格命名范围。然后我可以从 VBA 中的表中获取一个值,如下所示:
<sheet_codename>.Cells(<line_number>,Range("<range_name>").Column)
然而,这让我很困扰,因为命名范围与表断开了连接。例如,如果我重新排列工作表上的表格,范围将保留在旧位置。
有更好的选择吗?“更好”具体指:
- 可以在表格中重命名和/或重新排列列,至少在工作表内移动表格