繁体   English   中英

如何在excel-vba中添加“停止宏”?

[英]How to add a 'Stop Macro' in excel-vba?

我有一个简单的宏和一个开始运行它的按钮。 我想有一个按钮来阻止它,所以我不必打开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

所以我在代码中添加了一行来检查值。 您可以使用其他子更改状态。 如果State设置为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM