如何每秒刷新Excel文件?

时间:2015-04-07 04:57:33

标签: excel excel-vba refresh seconds vba

我有一份从Google财经中提取的股票价格清单,并放在我的Excel中的不同表格中。我想知道,我可以根据谷歌财务股票价格每隔一秒(而非分钟)更新Excel表格吗?

2 个答案:

答案 0 :(得分:2)

这可以在没有宏不断运行的情况下完成。它依赖于 Application.OnTime 方法,该方法允许将来安排某个操作。我使用这种方法强制Excel从外部源刷新数据。

以下代码几乎完全基于此链接的代码:http://www.cpearson.com/excel/ontime.aspx

Application.OnTime的引用位于:https://msdn.microsoft.com/en-us/library/office/ff196165.aspx

Dim RunWhen As Date

Sub StartTimer()
    Dim secondsBetween As Integer
    secondsBetween = 1

    RunWhen = Now + TimeSerial(0, 0, secondsBetween)
    Application.OnTime EarliestTime:=RunWhen, Procedure:="CodeToRun", Schedule:=True
End Sub

Sub StopTimer()
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:="CodeToRun", Schedule:=False
End Sub

Sub EntryPoint()

    'you can add other code here to determine when to start
    StartTimer

End Sub

Sub CodeToRun()

    'this is the "action" part
    [A1] = WorksheetFunction.RandBetween(0, 100)


    'be sure to call the start again if you want it to repeat
    StartTimer

End Sub

在此代码中,StartTimer和StopTimer调用用于管理计时器。 EntryPoint代码启动并且CodeToRun包含要运行的实际代码。请注意,要重复此操作,请在CodeToRun中调用StartTimer。这允许它循环。您可以通过调用StopTimer来停止循环,或者只是不再调用StartTimer。这可以通过CodeToRun中的一些逻辑来完成。

我只是在A1中添加一个随机数,以便您可以看到它更新。

答案 1 :(得分:0)

Sub RefreshFormulasEverySecond()

    Dim dtTargetTime As Date

    Debug.Print "Started"

    Do While Range("A1").Value <> "STOP"
        Application.Calculate
        dtTargetTime = Now + TimeValue("0:00:01")
        Do While Now < dtTargetTime
            DoEvents
        Loop
        Debug.Print Now
    Loop

    Debug.Print "Stopped"

End Sub

您可以在后台运行此宏。将其粘贴到VBA模块中。您可以从那里运行它,或者在工作表上放一个按钮并使用它来触发它。编写为在用户正在查看的任何工作表的单元格A1中键入单词“STOP”时停止运行。

我不确定在后台持续运行宏是最好的主意,但这是我能想到的唯一方法。