2015-04-07 6 views
1

У меня есть список цен на акции, вытащенные из финансов Google и помещенные в разные листы в моем Excel. Мне интересно, могу ли я обновить лист Excel каждые SECOND (не минут) в соответствии с ценой акций Google?Как обновить файл Excel каждую секунду?

+0

Да Возможно, вам нужно найти коды VBA в Excel, а затем записать их в Excel, и если вы это сделали, добавьте свой код на вопрос и сообщите нам о своей проблеме;). –

+0

Спасибо, я уже нашел решение – user3684090

ответ

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. Вы можете запустить его оттуда или положить на листе кнопку и использовать ее для ее запуска. Он написан, чтобы прекратить работу, когда слово «STOP» вводится в ячейку A1 любого листа, на который пользователь смотрит.

Я не уверен, что это самая большая идея, когда макрос работает постоянно в фоновом режиме, но это был единственный способ, о котором я мог думать.

+0

Спасибо Тим. Я нашел решение – user3684090

1

Это может быть сделано без постоянной работы макроса. Он полагается на метод 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, чтобы вы могли видеть его обновление.