Я хотел бы иметь возможность получать значения из таблицы 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)
Это, однако, беспокоит меня, потому что именованные диапазоны отключены от таблицы.Например, если я переставлю таблицы на листе, диапазоны останутся на прежнем месте.
Есть ли лучший вариант? «Лучше» означает конкретно:
- Переживает переименование и / или перестановку столбцов в таблице, перемещая таблицу по крайней мере в пределах листа