Создайте ListObject, передав имя таблицы, расположенной в любом месте рабочей книги, с переменной
Вот мой сценарий с использованием VBA в Excel. У меня есть одна таблица (table01), которая содержит имена всех таблиц в книге. Я пытаюсь обратиться к одной из таблиц в Table01, используя ListObjects(), чтобы я мог выполнять операции с этой таблицей. Я получаю ошибку отладки № 9 в строке, указанной ниже. Что я делаю не так в строке ошибки?
Вот мой упрощенный код:
Dim Table01 as ListObject 'list of all tables in workbook
Dim Table02 as ListObject 'table selected from Table01
Dim TableName as String 'name of table02 as listed in Table01
Set Table01 = ActiveSheet.ListObjects("tTablesDetails")
TableName = Table01.TableList.DataBodyRange(SomRowNumber, SomeColumnNumber).Text
MsgBox (TableName) 'Shows table name I expected
Set Table02 = ActiveSheet.ListObjects(TableName)
'DEBUG ERROR 9 IS HERE
...rest of code
2 ответа
Я не знаю, что такое.TableList. Это не метод / свойство ListObject AFAIK. Вам определенно нужно объявить значения для someRowNumber, someColumnNumber, поскольку в диапазоне нет 0,0. В приведенном ниже примере вы предполагаете, что выбранная таблица находится на том же листе, что и Table01. Вам может понадобиться другой столбец для хранения родительского листа, если вы хотите сослаться на таблицы на других листах и перенести их в (или зациклить все объекты ListObject в рабочей книге и проверить по имени; при условии, что имена не повторяются), чтобы вы имели
Set Table02 = Worksheets("someSheetNamePulledFromTable01").ListObjects(TableName)
VBA:
Option Explicit
Public Sub test()
Dim Table01 As ListObject 'list of all tables in workbook
Dim Table02 As ListObject 'table selected from Table01
Dim TableName As String 'name of table02 as listed in Table01
Dim someRowNumber As Long, someColumnNumber As Long
someRowNumber = 1: someColumnNumber = 1
Set Table01 = ActiveSheet.ListObjects("tTablesDetails")
TableName = Table01.DataBodyRange(someRowNumber, someColumnNumber).Text
MsgBox (TableName) 'shows table name i expected
Set Table02 = ActiveSheet.ListObjects(TableName) 'DEBUG ERROR 9 IS HERE
End Sub
Избегайте использования Activesheet вообще и везде используйте явные имена листов. Возможно, укажите имя родительского листа ListObject в следующем столбце справа:
Option Explicit
Public Sub test()
Dim Table01 As ListObject
Dim Table02 As ListObject
Dim TableName As String, SheetName As String
Dim someRowNumber As Long, someColumnNumber As Long
someRowNumber = 1: someColumnNumber = 1
Set Table01 = ThisWorkbook.Worksheets("Sheet1").ListObjects("tTablesDetails") '<=avoid Activesheet reference and use explicit sheet name
TableName = Table01.DataBodyRange(someRowNumber, someColumnNumber).Text
SheetName = Table01.DataBodyRange(someRowNumber, someColumnNumber + 1).Text
MsgBox (TableName) 'shows table name i expected
Set Table02 = ThisWorkbook.Worksheets(SheetName).ListObjects(TableName)
End Sub
Я смог создать диапазоны, заставить его работать и очистить мой код, например:
Dim Table02 As Range
Установите Table02 = Range(TableName).ListObject.DataBodyRanege
Диапазону все равно, на каком листе находится стол.