У меня есть список цен на акции, вытащенные из финансов Google и помещенные в разные листы в моем Excel. Мне интересно, могу ли я обновить лист Excel каждые SECOND (не минут) в соответствии с ценой акций Google?Как обновить файл Excel каждую секунду?
ответ
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. Вы можете запустить его оттуда или положить на листе кнопку и использовать ее для ее запуска. Он написан, чтобы прекратить работу, когда слово «STOP» вводится в ячейку A1 любого листа, на который пользователь смотрит.
Я не уверен, что это самая большая идея, когда макрос работает постоянно в фоновом режиме, но это был единственный способ, о котором я мог думать.
Спасибо Тим. Я нашел решение – user3684090
Это может быть сделано без постоянной работы макроса. Он полагается на метод 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 включает фактический код для запуска. Обратите внимание, что для повторного вызова вы вызываете StartTimer в CodeToRun. Это позволяет ему зацикливаться. Вы можете остановить цикл, вызвав StopTimer или просто не называя StartTimer еще раз. Это можно сделать с некоторой логикой в CodeToRun.
Я просто помещаю случайное число в A1, чтобы вы могли видеть его обновление.
Да Возможно, вам нужно найти коды VBA в Excel, а затем записать их в Excel, и если вы это сделали, добавьте свой код на вопрос и сообщите нам о своей проблеме;). –
Спасибо, я уже нашел решение – user3684090