【问题标题】:how can i save my workbook in VBA without stopping the macro from running?如何在不停止宏运行的情况下将工作簿保存在 VBA 中?
【发布时间】:2016-07-25 05:40:56
【问题描述】:

我有 VBA 代码在使用 application.ontime 一段时间后调用此方法,

Sub run()

Worksheets("Sheet1").Calculate

Cells(2, 5).Value = Cells(2, 5).Value + 1

ActiveWorkbook.Save

End Sub   

但是,在 ActiveWorkbook.Save 行之后,宏停止运行。保存工作簿后如何继续运行宏,或者在保存时调用宏?我正在使用 excel 2013 顺便说一句

这是我调用运行的宏:

Sub every30seconds()

runTime = Now + TimeValue("00:00:30")

Application.OnTime EarliestTime:=runTime, Procedure:="run", schedule:=True

If Cells(2, 5).Value = 2 Then
   Application.OnTime runTime, "run", , False
   Cells(2, 5).Value = Cells(2, 5).Value - 2
End If

End Sub

【问题讨论】:

  • 调用运行子的宏代码在哪里?你的潜艇中有代码Workbook_AfterSaveWorkbook_BeforeSave
  • 30秒内插入程序的代码不应该在你的运行子中吗?这应该被移入运行:runTime = Now + TimeValue("00:00:30") Application.OnTime EarliestTime:=runTime, Procedure:="run", schedule:=True
  • 您是否希望它每 30 秒运行一次?如果是这样,您需要在一个或其他宏中进行循环。正如所写的那样,宏只会运行一次。
  • @ScottHoltzman - 假设 E2 的初始值为零,OP 的代码只会将其设置为 1 然后停止。它永远不会回到“每 30 秒”代码来测试 E2 是否等于 2。
  • @ScottHoltzman 为那个人感到抱歉!你一直都是对的

标签: vba excel


【解决方案1】:

Application.Ontime 方法不允许您将某事安排在未来多次发生。它只允许您设置某事发生一次。

我相信你所追求的代码是

Sub run()
    Worksheets("Sheet1").Calculate

    Cells(2, 5).Value = Cells(2, 5).Value + 1

    ActiveWorkbook.Save

    every30seconds
End Sub   

Sub every30seconds()
    If Cells(2, 5).Value <> 2 Then
        runTime = Now + TimeValue("00:00:30")

        Application.OnTime EarliestTime:=runTime, Procedure:="run", schedule:=True
    Else
        Cells(2, 5).Value = Cells(2, 5).Value - 2
    End If
End Sub

【讨论】:

    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多