Как обращаться к структурированной таблице, не обращаясь к ее листу в VBA - PullRequest
0 голосов
/ 01 ноября 2018

В VBA я знаю, что могу ссылаться на структурированную таблицу следующим образом:

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

Затем выполните Tbl.XXX, где .XXX может быть .Name, .Range и т. Д.

Однако я хочу ссылаться на эту таблицу, не обращаясь к имени листа, чтобы макрос не разрывался при изменении имени листа.

Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

После некоторых исследований я нашел что-то, что не является идеальным решением. Вы можете использовать функцию Range в VBA следующим образом:

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/

0 голосов
/ 18 ноября 2018

Почему бы не обратиться к «внутреннему» имени листа вместо его видимого имени?

enter image description here

0 голосов
/ 01 ноября 2018

Если ваша таблица находится на ActiveSheet, вы можете использовать ее следующим образом:

Set Tbl = ActiveSheet.ListObjects("MyTblName")
...