#excel #vba
#excel #vba
Вопрос:
Я пытаюсь заполнить a ListBox
в a Userform
через RowSource
свойство и Table
объект, содержащий информацию в неактивном Sheet
имени Data
, используя Excel VBA. Мой код в основном работает, но имеет серьезный недостаток: он работает только тогда, когда Sheet
активен содержащий Table
с данными (выбранный между всеми листами в книге).
Код, который я пробовал, следующий:
ListBox1.RowSource = Worksheets("Data").Range("Table 1[[Column1]:[Column4]]").Address(0, 0)
Проблема в том, что возвращаемый диапазон не ссылается ни на какой Sheet
, это просто что-то вроде B2:E5
, к которому просто добавляются пустые строки ListBox1
. Диапазон, возвращаемый кодом, должен быть примерно таким Data!B2:E5
. Моя проблема в том, что я не могу просто жестко закодировать это. Для примера кода я упростил ссылку, но Table
выбор для получения данных будет отличаться (все эти таблицы одинаковы Sheet
).
Ответ №1:
Address
Свойство имеет несколько других параметров. Вам необходимо включить внешний параметр
.Address(0, 0, ,1)
ie
ListBox1.RowSource = Worksheets("Data").Range("Table1[[Column1]:[Column4]]").Address(0, 0, ,1)
Объяснение:
Worksheets("Data").Range("Table1[[Column1]:[Column4]]")
правильно возвращать ссылку на диапазон наData
лист..Address(0, 0)
Возвращает только часть строки / столбца этого адреса (например, как вы говоритеB2:E5
)- При записи
B2:E5
вRowSourse
свойство это сообщает ListBox получить данные с этого адреса в ActiveSheet Address(0, 0, ,1)
возвращает полную ссылку, включая рабочую книгу и рабочий лист
Комментарии:
1. Я не знал об этой возможности, но она делает именно то, что мне нужно. Большое вам спасибо за вашу помощь!