【问题标题】:Continuous loop to refresh formulas连续循环刷新公式
【发布时间】:2015-10-28 18:50:14
【问题描述】:

我有一个使用 =Files 作为命名范围的工作表(因此我可以看到文件夹中的文件。然后我有一个 MOVE 按钮,可以将文件从一个文件夹移动到另一个文件夹。 当我单击命令按钮时,我告诉它执行移动并

ActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True

效果很好。 唯一的事情是当我点击移动按钮时只会更新我的文件列表

有没有让这个功能一直工作? 无需点击按钮...... 因此,只要文件打开,它就会一直执行刷新。

理想情况下,我可以告诉它每 X 秒执行一次……但这不是必需的。

【问题讨论】:

  • 如果您让代码在打开的工作簿中无休止地运行,您将在一天中使用 Excel 时受到严重的阻碍。但是,您可以创建 vbscript 以在单独的 Excel 实例中打开工作簿并运行代码,然后关闭工作簿。然后使用任务计划程序安排 vbscript 全天每 X 秒运行一次。
  • 这种情况是该文件位于一台除了整天运行该 excel 文件之外什么都不做的计算机上。绝对没有别的。因为我需要整天打开excel文件。那可以吗?
  • 您可以使用Application.OnTime()定期更新。
  • 您不必关闭并重新打开计算即可进行 Excel 计算,只需使用 Application.Calculate
  • 根据您的上一条评论 CORNAKI 查看我的回答。

标签: vba function excel loops


【解决方案1】:

基于您在一台机器上使用此工作簿的事实,什么都不做,您可以将代码放在工作簿的workbook_open 事件中( VBE 中的 ThisWorkbook 模块)并用Do Loop 将其包围,如下所示。

Private Sub Workbook_Open()

Do

    'code to move files

    Application.Wait Now + TimeValue("0:05:00"))  'waits 5 minutes       

Loop Until Time() >= TimeValue("17:00:00") '5pm military time

ThisWorkbook.Close True 'closes workbook after loop is over

End Sub

此代码将在您打开工作簿后立即执行,并基本上一直持续到一天中定义的时间段,然后关闭工作簿,每 x 分钟暂停一次循环(由 Application.Wait 设置)。

替代方法

或者,正如 Tim Williams 所建议的,您可以像这样使用带有Application.OnTime 命令的循环

Private Sub Workbook_Open()

Dim t as Date
t = Now + TimeValue("00:00:05") 'just give a 5 seconds to start loop

Do 

  Application.OnTime t, "mySub" 'where mySub is your sub name

  t = Now + TimeValue("00:05:00") 'sets t to 5 minutes from now

Loop Until t > = TimeValue("17:00:00")

ThisWorkbook.Close True

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多