【问题标题】:Stop the execution of a macro using another macro(button) using the sendKeys function使用 sendKeys 函数使用另一个宏(按钮)停止执行宏
【发布时间】:2014-09-20 14:53:32
【问题描述】:

我有这个 Vba 代码需要很长时间才能执行,我做了这个 sub 来停止执行,但它不起作用,我使用了 Sendkeys 函数。

sub stop ()
SendKeys "{Ctrl,Pause}"
end sub

我还想恢复我的宏的执行,我尝试点击 Ctrl+Break 但它没有恢复。 感谢您的帮助。

【问题讨论】:

  • 您需要手动按CTRL + BREAK停止执行。
  • 所以没有办法使用另一个宏来停止执行?
  • 为什么要通过使用另一个宏来停止执行宏?这听起来很扭曲
  • 好吧,就像我说我在 vba 中有这个 Code 运行了好几天,我只是想暂停一下,看看它在做什么,我现在需要经常检查,因为我改了
  • 您要暂停还是停止(终止)?如果你想停下来看看发生了什么,请使用Debug.Assert

标签: vba excel


【解决方案1】:

打开 VBE 并插入一个模块并复制粘贴以下代码

Sub Main()
    For i = 1 To 100000
        DoEvents
        Debug.Print i
    Next i
End Sub

Sub PauseMacro()
    Application.SendKeys "^{BREAK}"
End Sub

返回到 Sheet1 并在开发人员选项卡上插入一个按钮并将PauseMacro 分配给它。

现在运行Main 子程序并点击按钮停止执行Main

哦,顺便说一句。 here's how to use the Application.SendKeys method.

【讨论】:

    【解决方案2】:

    你应该避免使用SendKeys

    一种类似于我建议的方法,但不使用 SendKeys 可能是这样的:

    Global IsTimeToStop As Boolean
    
    Sub Main()
        IsTimeToStop = False
        For i = 1 To 100000
            DoEvents
            Debug.Print i
            If IsTimeToStop Then Exit Sub
        Next i
    End Sub
    
    Sub PauseMacro()
        IsTimeToStop = True
    End Sub
    

    如果这不是标准模块,请将 Global 替换为 Dim

    【讨论】:

    • 我要试试你的解决方案(我喜欢它)看看效果如何,顺便谢谢你
    【解决方案3】:

    如果变量发生变化会中断,如何设置监视?

    只需右键单击一个变量并添加一个新手表。

    【讨论】:

    • 就像Debug.Assert 函数你说的如果它改变就会中断是什么意思
    • @Awsome33 如果变量的值发生变化,代码执行将暂停(就像遇到断点一样)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2011-10-10
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多