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

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

非常感谢。

就像阿曼多所build议的,你可以使用这个代码:

 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 

所以我添加了一行代码来检查值。 你可以改变使用其他子的状态。 如果国家设置为真,程序将停止

也许一个想法可能是,每次迭代macros可以检查一个variables的值,甚至是一个隐藏/受保护的单元格,另一个macros或button可以更改该值,所以如果它“停止”macros可以退出循环

也许你可以使用Application.OnTime的Schedule参数来停止macros的下一个调用? 您需要将时间保存在全局variables中才能这样做。

 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