2013-12-04 3 views
2

У меня есть система книг для разных отделов, каждая из которых имеет макросы auto_open. У меня также есть контрольная книга, которая по запросу может запускать свой собственный макрос, чтобы открыть каждую книгу в системе и собрать информацию. Это нормально работает отлично.Ошибка режима отладки Excel

Однако при отладке макроса в центральной книге становится необходимым, чтобы войти в команду, чтобы открыть любую из поддерживающих книг с помощью auto_open, приведет к искажению отладчика и приведет к тому, что остальная часть кода будет выполнена, как если бы клавиша F5 была был нажат.

Я искал параметр отладки, чтобы предотвратить это, а также любые параметры метода «Открыть», которые могут изменить это поведение без везения. Поиски Google также оказались бесплодными. Есть ли способ сказать отладчику Excel, чтобы поддерживать программный контроль в этой ситуации? Помогите мне в stackoverflow, ты моя единственная надежда.

+0

Когда я попробую это, метод Workbooks.Open откроет файл, но подпрограмма 'Auto_Open()' не запускается. В какой книге вы пытаетесь отладить код? Если это «контрольная» книга, просто поставьте точку останова * после вызова «Workbooks.Open», чтобы вы могли возобновить отладку. –

+0

Дэвид, вы правы, что при работе открывается рабочая книга, и auto_open не запускается. Это делает поведение отладки еще более своеобразным для меня. Разрыв после утверждения Open решит мою проблему, если я буду уверен, что ошибка ограничивается контролирующей книгой. Я обеспокоен тем, что некоторое взаимодействие между ними может вызвать проблемы, и в идеале хотелось бы пройти через код в обеих книгах. – user1339605

+0

Правильно ... Хорошо, у меня есть идея ... Я отправлю короткий ответ. Не идеально, но я думаю, что это решит ваши непосредственные потребности. –

ответ

0

Как мы видели, метод Workbooks.Open не вызывает событие Auto_Open, поэтому помещение точки останова в «контрольную» книгу после открытия новой книги не позволит вам вводить и отлаживать код, как вам может понадобиться делать.

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

Sub test() 
Dim wb As Workbook 
Set wb = Workbooks.Open("C:\path_to\your_file.xlsm") 

Application.Run wb.Name & "!Auto_Open" '// PUT BREAKPOINT HERE! 

End Sub 

В качестве альтернативы, как это было предложено HERE, порт код с Auto_Open события к событию Workbook_Open.

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

Смежные вопросы