Код VBA Excel останавливает выполнение после добавления листа - PullRequest
0 голосов
/ 07 мая 2019

Кажется, я наткнулся на проблему, которую не могу понять, как ее решить. В настоящее время я работаю с двумя отдельными книгами, одна из которых - активная книга, из которой запускается код, а другая - отдельная книга, которую мне нужно открыть:

On Error GoTo ErrorHandler:

Set manWb = ActiveWorkbook

Application.AutomationSecurity = msoAutomationSecurityForceDisable
Set conWb = Workbooks.Open(PARDirOTC & PARFileOTC, ReadOnly:=False)
Application.AutomationSecurity = msoAutomationSecurityByUI

ActiveWindow.Visible = False

On Error GoTo 0

Я установил для AutomationSecurity значение msoAutomationSecurityForceDisable, чтобы предотвратить запуск этой второй рабочей книги своего события Workbook_Open, в котором есть код, который мне не нужен в этой ситуации. Это событие обработки ошибок никогда не активируется, и код продолжает работать без проблем.

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

Set conOT = conWb.Sheets.Add(After:=conWb.Sheets(conWb.Sheets.Count))

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

Я оглянулся, другие люди, похоже, нашли похожие проблемы, но ни одно из их решений не помогло мне. Я пытался поиграть с несколькими настройками приложения, такими как EnableEvents, ScreenUpdating, AutomationSecurity и т. Д., Но ничего не работает. Вдобавок к коду я также пытался удалить или закомментировать все события «При ошибке», опасаясь, что они могут скрывать ошибку, которая может объяснить это поведение, но, похоже, это не так.

Я буду очень признателен, если кто-то с большим опытом, чем я, сможет выяснить, в чем причина такого поведения. Заранее спасибо.

С уважением

1 Ответ

0 голосов
/ 08 мая 2019

Использование Application.EnableEvents вместо Application.AutomationSecurity при открытии второй книги, как предложил один из вас, в конечном итоге решило всю проблему. Вот так:

On Error GoTo ErrorHandler:

Set manWb = ActiveWorkbook

Application.EnableEvents = False
Set conWb = Workbooks.Open(PARDirOTC & PARFileOTC, ReadOnly:=False) 
Application.EnableEvents = True

ActiveWindow.Visible = False

On Error GoTo 0

Насколько я знаю, AutomationSecurity можно использовать для отключения всех макросов при программном открытии книги, и я подумал, что этого будет достаточно, чтобы предотвратить событие Workbook_Open, но я предполагаю, что либо есть какое-то другое событие, которое я не использовал ' Не знаю, или настройка AutomationSecurity работает не так, как я думал изначально.

В любом случае, проблема, кажется, решена, так что спасибо.

С уважением

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