Как создать таблицу с помощью vba?

Я пишу простой код, чтобы получить некоторые ключевые цифры из импорта/экспорта базы данных. Я хочу сделать его удобным для пользователя, в основном одно нажатие кнопки дает результат.

Когда я писал код, я использую Alt+F11 и Play => он работает. Но когда я вставил Active X-Control CommandButton1_Click, макрос останавливается.

Вот где (первая строка):

         ActiveSheet.ListObjects.Add(xlSrcRange, Range("A$1:$Be$1500"), , xlYes).Name = _
    "Table1"

Range("Table1[#All]").Select
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight1"

Это точно такой же код, который работает с кнопкой воспроизведения.

Я получаю сообщение об ошибке:

Ошибка выполнения 1004:

Диапазон рабочего листа для табличных данных должен находиться на том же листе, что и создаваемая таблица.

У кого-нибудь есть идея?

Улучшение моего кода состояло бы в том, чтобы иметь переменную длины таблицы: в одном наборе может быть больше строк, а в другом наборе данных меньше.


person René Sass    schedule 08.10.2015    source источник


Ответы (2)


Командная кнопка ActiveX — это элемент управления на листе, поэтому у вас не возникнет проблем со ссылками на ее использование в вашем коде, но вы должны указать их, чтобы использовать тот же код в другом месте.

Настройте это в соответствии с вашими потребностями и дайте мне знать, если этого недостаточно:

Dim Ws As Worksheet
Set Ws = ThisWorkbook.Sheets("Sheet_Name")

Ws.ListObjects.Add(xlSrcRange, Ws.Range("A$1:$BE$1500"), , xlYes).Name = "New_Table_Name"
Ws.ListObjects("New_Table_Name").TableStyle = "TableStyleLight1"

Просто настройте Sheet_Name и New_Table_Name в соответствии с вашими потребностями, и все должно получиться!

person R3uK    schedule 08.10.2015
comment
Спасибо, я думал, что это как-то связано с этим, но не был уверен в правильном синтаксисе. - person René Sass; 09.10.2015

Вы также должны указать лист для исходного диапазона, потому что в модуле кода рабочего листа любая неквалифицированная ссылка на Range или Cells эквивалентна Me.Range или Me.Cells и ссылается на диапазон на листе, содержащем код (т. е. лист с кнопкой на в таком случае):

With ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.Range("A$1:$Be$1500"), , xlYes)
   .Name = "Table1"
   .TableStyle = "TableStyleLight1"
End With
person Rory    schedule 08.10.2015