2013-07-30 4 views
0

У меня есть надстройка excel, и я хочу, чтобы она запускала определенные макросы при каждом открытии шаблона. Это нормально работает, если я открываю excel, а затем запускаю auto_open sub вручную, но при запуске excel выдает «Ошибка времени выполнения 9. Подстрочный код вне диапазона».Надстройка VBA не может ссылаться на рабочий лист при автооткрытии

Похоже, что добавление загружается и пытается запустить до того, как шаблон загрузился, чтобы при попытке ссылаться на конкретный лист в рабочей книге он ничего не нашел.

В частности, ошибка возникает при

Set shtData = Workbooks("Example_Template.xlsm").Worksheets("Test") 

Как я могу заставить Auto_Open макрос один раз запустить загружены листы?

Мой автомобиль открытый код:

Sub Auto_Open() 
    Set clsAppEvents = New clsApplicationEvents 

    Application.Run "PerformanceOpen" 

End Sub 

А макрос Я пытаюсь запустить содержит:

Private Sub PerformanceOpen() 

Dim shtData As Worksheet 

Set shtData = Workbooks("Example_Template.xlsm").Worksheets("Test") 
shtData.Activate 

ответ

1

Как я могу заставить Auto_Open макрос один раз запустить рабочие листы являются загружен?

Вы не можете. Макрос Auto_Open предназначен для запуска, как только начнется Excel, до того, как будут доступны любые книги.

Код в PerformanceOpen должен быть помещен в событие Workbook_Open. Это может быть событие Open конкретной книги, или вы можете изучить cpearson's page о событиях уровня приложения. Это позволит вам запускать код, когда будет открыта любая книга или добавлена ​​новая книга.

+0

Благодарим - могу ли я сделать это открытым событием конкретной книги, сохранив код в надстройке, а не сама книга? Если да, то как мне это поделать? – db579

+0

Да, как я уже упоминал, вы можете написать код, который будет запускаться при открытии * любой * рабочей книги, а затем проверить имя книги. Однако я бы поставил под сомнение ваш подход. Надстройка предназначена для добавления дополнительных функций в Excel. Если он ожидает, что откроется другая специальная книга, IMO - это уже не надстройка. Удачи;) –

+0

Да, я бы предпочел просто сохранить его как простой макрос рабочей книги, но из-за причин из-под его контроля он будет работать только в надстройке ... Спасибо за помощь! – db579