Как правильно ссылаться на таблицу из неактивного листа для свойства RowSource в Excel VBA

#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)
  

Объяснение:

  1. Worksheets("Data").Range("Table1[[Column1]:[Column4]]") правильно возвращать ссылку на диапазон на Data лист. .Address(0, 0) Возвращает только часть строки / столбца этого адреса (например, как вы говорите B2:E5 )
  2. При записи B2:E5 в RowSourse свойство это сообщает ListBox получить данные с этого адреса в ActiveSheet
  3. Address(0, 0, ,1) возвращает полную ссылку, включая рабочую книгу и рабочий лист

Комментарии:

1. Я не знал об этой возможности, но она делает именно то, что мне нужно. Большое вам спасибо за вашу помощь!