Я создаю макрос Excel, который будет запускаться при нажатии командной кнопки (VBA 7.1) и не позволит пользователю нажимать несколько раз во время выполнения, однако каждый трюк, который я обнаружил в Интернете с этой целью, не имеет работал: даже когда он заблокирован, отключен и фокусируется на другом объекте, пользователь все равно может заставить сабвуфер запускаться несколько раз, прежде чем первый завершится.
Мой текущий код выглядит следующим образом (run_slow_macro
открывает документ Word для внесения изменений, затем сохраняет его и может занять около 30 секунд.)
Private Sub CommandButton1_Click()
If CommandButton1.Enabled = False Then
MsgBox ("STOP CLICKING")
End If
Me.Frame1.SetFocus
CommandButton1.Enabled = False
CommandButton1.Locked = True
CommandButton1.Caption = "WAIT"
Call run_slow_macro
CommandButton1.Caption = "CommandButton1"
CommandButton1.Enabled = True
CommandButton1.Locked = False
End Sub
Когда я нажимаю кнопка блокируется и становится отключенной, а заголовок изменяется, как и ожидалось. Однако последующие щелчки не приводят к появлению окна сообщения «STOP CLICKING», но все же приводят к тому, что документ Word открывается несколько раз, редактируется, а затем закрывается.
Командная кнопка не разблокируется / не активируется до тех пор, пока после все выполнения не будут завершены, и никогда не появится сообщение «STOP CLICKING».
Я очень смущен, поскольку к тому, как он выполняет «Call run_slow_macro» каждый раз, но, кажется, пропускает все до и после этой строки, когда выполняется первое выполнение.
У меня очень мало опыта работы с VBA, и я не смог найти каких-либо решений в Интернете (приведенный выше код является кульминацией самой распространенной рекомендации, которую я видел), поэтому я ценю любые советы, которые можно предложить .