2015-01-28 2 views
0

У меня есть код, в котором я копирую диапазон и вставляю значения. Это делается через промежуток времени после нажатия кнопки команды. Мне нужна помощь в том, как остановить или приостановить запуск этого макроса, нажав кнопку.Как остановить этот макрос нажатием командной кнопки?

Вот основной код:

Sub timestamp() 
' 
' timestamp Macro 
' 
    N = WorksheetFunction.Count(Sheets("DNB").Columns(1)) 

    dnbspread = Sheets("DNB").Range("G5:G30") 

    Sheets("DNB").Cells(N + 34, 1) = Date 
    Sheets("DNB").Cells(N + 34, 2) = Time 
    Sheets("DNB").Range("G5:G30").Copy 

    Sheets("DNB").Cells(N + 34, 3).PasteSpecial Transpose:=True, Paste:=xlPasteValues 

    Application.OnTime Now + TimeValue("00:00:05"), "timestamp" 

End Sub 

Я попробовал несколько вещей, чтобы остановить его.

  1. функцией BREAK
Sub PauseMacro() 
    Application.SendKeys "^{BREAK}" 
End Sub 

2.

Public StopMacro as Boolean 
Sub SetStopMacro() 
    StopMacro = True 
End Sub 

и поместить его в коде, как это:

Sub timestamp() 
' 

' timestamp Macro 

' 
    N = WorksheetFunction.Count(Sheets("DNB").Columns(1)) 

    dnbspread = Sheets("DNB").Range("G5:G30") 

    Sheets("DNB").Cells(N + 34, 1) = Date 

    Sheets("DNB").Cells(N + 34, 2) = Time 

    Sheets("DNB").Range("G5:G30").Copy 

    Sheets("DNB").Cells(N + 34, 3).PasteSpecial Transpose:=True, Paste:=xlPasteValues 

    Application.OnTime Now + TimeValue("00:00:10"), "timestamp" 

    DoEvents 

    If StopMacro = True Then Exit Sub 

End Sub 

Если у кого-то есть ввод того, что я делаю неправильно, чтобы заставить его работать, пожалуйста, дайте мне знать. Кроме того, если у вас есть какие-либо идеи о том, как написать более гладко, что было бы оценено.

Thanx

Эйвинд

+0

If Not StopMacro Then Application.OnTime Now + TimeValue ("00:00:15"), "timestamp" End If – dee

+0

Спасибо за ввод. Не знаете, как включить и включить. Я получаю ошибку «Завершить, если без блока, если». –

+0

Есть разница между паузой или остановкой? Какой вы хотите? –

ответ

0
Public StopMacro As Boolean 

Sub SetStopMacro() 
    StopMacro = True 
End Sub 

Sub timestamp() 
    ' 
    ' timestamp Macro 
    ' 
    ' code here 
    ' 
    ' Put If-Then before Application.OnTime call. 
    ' So prevent next call of 'timestamp()' if StopMacro equals to true 
    If Not StopMacro Then 
     Application.OnTime Now + TimeValue("00:00:15"), "timestamp" 
    End If 
End Sub 
0

Вы можете объявить глобальную переменную внутри модуля, в котором макрос работает с, а затем, когда командная кнопка нажата, присвоить значение этой переменной, которую вы просто объявлено. Затем создайте оператор if, где код завершается, если переменная равна этому значению.

Private Sub CommandButton2_Click() 
btncancel = 1 
EMSetup.hide 
Exit Sub 
End Sub 

Для кнопки управления.

Global btncancel As Integer 
If btncancel = 1 Then 
    Exit Sub 
End If 

Надеюсь, это поможет!

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