Показать сообщение и заблокировать книгу в случае ошибки - PullRequest
0 голосов
/ 27 марта 2019

У меня есть код VBA для запуска нескольких операций. Он разблокирует Workbook перед запуском и защищает после выполнения операции. Однако иногда код сталкивается с ошибкой из-за того, что пользователь открывает окна или что-то делает в фоновом режиме. Мне бы хотелось, чтобы не отображалось какое-либо стандартное сообщение Visual Basic, например «Ошибка компиляции», но мое настраиваемое сообщение всякий раз, когда код запускается с какой-либо ошибкой и использует ThisWorkbook.Protect Password:="123456", Structure:=True, Windows:=False.

P.S. Время перерыв из-за операционной системы на моем компьютере не может обрабатывать процессы так быстро.

Sub TryToDoEverything()
Application.ScreenUpdating = False
ThisWorkbook.Unprotect Password:="123456"

    ufProgress.LabelProgress.Width = 0
    ufProgress.Show

FractionComplete (0) 'Next step

Worksheets("MAIN").Activate

Call MakeMyFolder
Application.Wait (Now + TimeValue("00:00:10"))
DoEvents
FractionComplete (0.1) 'Next step

If ThisWorkbook.Sheets("Other Data").Range("J2").Value = True Then
Call opentemplateWordOL
End If
If ThisWorkbook.Sheets("Other Data").Range("J2").Value = False Then
End If

DoEvents
FractionComplete (0.2) 'Next step
Application.Wait (Now + TimeValue("00:00:10"))

If ThisWorkbook.Sheets("Other Data").Range("J2").Value = True Then
Call opentemplateWordPL
End If
If ThisWorkbook.Sheets("Other Data").Range("J2").Value = False Then
End If

DoEvents
FractionComplete (0.4) 'Next step
Application.Wait (Now + TimeValue("00:00:10"))

FractionComplete (1) 'Next step

Worksheets("MAIN").Activate

Unload ufProgress

ThisWorkbook.Protect Password:="123456", Structure:=True, Windows:=False

    TaskComplete.Show
Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 27 марта 2019

По моему опыту, не рекомендуется использовать ThisWorkbook много раз, в начале вашего кода используйте следующее,

dim thisWb as excel.workbook
set thisWb = thisworkbook

, затем вместо ThisWorkbook используйте thisWb, и не будет иметь значения, будет ли пользовательнажимает на другую другую wb во время выполнения.

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