如何添加';停止宏';在excelvba中?

如何添加';停止宏';在excelvba中?,vba,excel,Vba,Excel,我有一个简单的宏和一个开始运行它的按钮。我想也有一个按钮来停止它,所以我不必打开vba编辑器来做它 这是密码 Sub Data_Recording() With Workbooks("Chart_Macro").Sheets("Chart") .Rows(5).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Range("B5:F5").Value

我有一个简单的宏和一个开始运行它的按钮。我想也有一个按钮来停止它,所以我不必打开vba编辑器来做它

这是密码

Sub Data_Recording()

    With Workbooks("Chart_Macro").Sheets("Chart")
        .Rows(5).EntireRow.Insert Shift:=xlDown, 
        CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("B5:F5").Value = .Range("B2:F2").Value
    End With

    Application.OnTime Now + TimeValue("00:00:20"), "Data_Recording"

    End Sub

非常感谢。

也许一个想法是,在每次迭代中,宏可以检查一个变量的值,甚至是一个隐藏/受保护单元格的值,而另一个宏或按钮可以更改该值,因此,如果它“停止”,宏可以像Armando建议的那样退出循环,您可以使用以下代码:

Sub Data_Recording()

    With Workbooks("Chart_Macro").Sheets("Chart")
        If .Range(CHECK_ADDRESS) = True Then Exit Sub
        .Rows(5).EntireRow.Insert Shift:=xlDown,
        CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("B5:F5").Value = .Range("B2:F2").Value
    End With

    Application.OnTime Now + TimeValue("00:00:20"), "Data_Recording"

End Sub

Public Sub SetRecordingState(bStop As Boolean)

    Workbooks("Chart_Macro").Sheets("Chart").Range(CHECK_ADDRESS) = bStop

End Sub

因此,我在代码中添加了一行检查值。您可以使用另一个子项更改状态。如果状态设置为True,则过程将停止

也许您可以使用Application.OnTime的Schedule参数停止宏的下一次调用?为此,您需要在全局变量中节省时间

Dim NextTime As Date
Sub Data_Recording()
    Debug.Print "Data recorded at : " & Now
    NextTime = Now + TimeValue("00:00:05")
    Application.OnTime NextTime, "Data_Recording"
End Sub

Sub Stop_Recording()
    Application.OnTime NextTime, Procedure:="Data_Recording", Schedule:=False
    Debug.Print "Recording stopped at : " & Now
End Sub

它的值是多少?它怎么知道这是真的?。感谢单元格中指定为CHECK_ADDRESS的值。这可以是任何细胞。例如,在模块级将其声明为“Private Const CHECK_ADDRESS as String=“$A$1”`