【问题标题】:How to Automatically stop a Sub running after 10 seconds如何在 10 秒后自动停止运行的 Sub
【发布时间】:2019-07-12 03:51:59
【问题描述】:

为什么这段代码在 10 秒后不停止,我现在按照建议做这在 10 秒后不停止

Sub test()
  Application.OnTime Now + TimeValue("00:00:08"), "TerminateExecution"
  ChangeDoubleToDate
End Sub

Sub TerminateExecution()
  End
End Sub

Sub ChangeDoubleToDate()
  Dim ii As Long
  Sheets.Add
  ActiveSheet.Name = "Example"
  Range("A:E").ColumnWidth = 15
  Range("A:E").ClearContents
  Range("A1").Select
  For ii = 20190101 To 20191234
  ActiveCell.Value = ii
  ActiveCell.Offset(0, 1).Range("A1").Select
  ActiveCell.FormulaR1C1 = "=MID(RC[-1],1,4)" 
  ActiveCell.Offset(0, 1).Range("A1").Select
  ActiveCell.FormulaR1C1 = "=MID(RC[-2],5,2)"
      ActiveCell.Offset(0, 1).Range("A1").Select
      ActiveCell.FormulaR1C1 = "=MID(RC[-3],7,2)"
      ActiveCell.Offset(0, 1).Range("A1").Select
      ActiveCell.FormulaR1C1 = "=DATE(RC[-3],RC[-2],RC[-1])"
      ActiveCell.Offset(1, -4).Range("A1").Select
      DoEvents
      Next
      Application.DisplayAlerts = False
      Sheets("Example").Delete
      Application.DisplayAlerts = True
End Sub

【问题讨论】:

  • 这与您的问题无关,但如果我可以建议避免使用行号 - 请参阅此answer
  • 首先,至少在调试时添加Option Explicit并删除任何On Error ...语句。

标签: vba


【解决方案1】:
Sub Test()

    Application.OnTime Now + TimeValue("00:00:10"), "TerminateExecution"
    MainContent

End Sub

Sub TerminateExecution()

    End

End Sub

' Add the rest procedures you need unchanged below
' ...

【讨论】:

  • 无法在 MainContent() 中进行更改。我一直在努力解决这个问题
  • 我更改了该程序只是为了使它们更健壮,因为如果按原样使用它们甚至无法与Option Explicit 一起使用。您可以保持不变。
  • 无法在 MainContent() 中进行更改。我已经为这个问题苦苦挣扎了很长时间。如果 vba 允许多任务处理,这将没有问题。也许有一些方法可以将它从 vba 传递给操作系统
  • @EmanRosent 我按照您的要求更改了代码,它适合您吗?
  • 我不想使用“DoEvents”。有没有其他方法可以在 10 秒后停止子运行。
猜你喜欢
  • 2017-03-18
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多