我有一份从Google财经中提取的股票价格清单,并放在我的Excel中的不同表格中。我想知道,我可以根据谷歌财务股票价格每隔一秒(而非分钟)更新Excel表格吗?
答案 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”时停止运行。
我不确定在后台持续运行宏是最好的主意,但这是我能想到的唯一方法。