2015-03-06 4 views
-1

Я новичок в VBA и пытаюсь изучить некоторые функции. То, что я создал, - это код в excel, который соединяется с API и извлекает данные в таблицу. Мне нужно, чтобы он работал в течение определенного периода времени (с 9 до 16 часов) и обновлялся каждые 30 секунд. Моя проблема в том, что я просто не знаю, как это сделать. Вот мой код Пожалуйста, помогите! Благодаря!!Looped Timer в Excel Код VBA

Также таблица заселяется является установка в следующих колонках: «Символ» «Имя» «Ask» «Bid» «Цена» «Days Range» «1yr Целевая цена» «Объем» «Avg Daily Vol»

Мой код:

Private Sub BTN_Start_Click() 
    Dim W As Worksheet: Set W = ActiveSheet 
    Dim Last As Integer: Last = W.Range("A10000").End(xlUp).Row 
    If Last = 1 Then Exit Sub 
    Dim Symbol As String 
    Dim i As Integer 
    For i = 2 To Last 
     Symbol = Symbol & W.Range("A" & i).Value & "+" 
    Next i 
    Symbol = Left(Symbol, Len(Symbol) - 1) 



    Dim url As String: url = "http://finance.yahoo.com/d/quotes.cvs?s=" & Symbol & "&f=snb2b3k1m2t8va2" 
    Dim Http As New winhttprequest 
    Http.Open "GET", url, False 
    Http.send 

    Dim Resp As String: Resp = Http.ResponseText 
    Dim Lines As Variant: Lines = Split(Resp, vbNewLine) 
    Dim sLine As String 
    Dim Values As Variant 
    For i = 0 To UBound(Lines) 
     sLine = Lines(i) 

     If InStr(sLine, ",") > 0 Then 
      Values = Split(sLine, ",") 
      W.Cells(i + 2, 2).Value = Split(Split(sLine, Chr(34) & "," & Chr(34))(1), Chr(34))(0) 
      W.Cells(i + 2, 3).Value = Values(UBound(Values) - 6) 
      W.Cells(i + 2, 4).Value = Values(UBound(Values) - 5) 
      W.Cells(i + 2, 5).Value = Values(UBound(Values) - 4) 
      W.Cells(i + 2, 6).Value = Values(UBound(Values) - 3) 
      W.Cells(i + 2, 7).Value = Values(UBound(Values) - 2) 
      W.Cells(i + 2, 8).Value = Values(UBound(Values) - 1) 
      W.Cells(i + 2, 9).Value = Values(UBound(Values)) 


     End If 
    Next i 
    W.Cells.Columns.AutoFit 

End Sub 

ответ

0

в начале текущего кода поместить Call Timer

Затем включите это в другой суб:

Sub Timer() 
Dim CountDown As Date 
CountDown = Now + TimeValue("00:00:30") 
Application.OnTime CountDown, "BTN_Start_Click" 
End Sub 

Это будет запускать ваш код каждые 30 секунд с момента его запуска.

Это еще один вариант, если вы просто хотите, чтобы нажать и оставить его ...

Sub Timer() 
If TimeValue(CStr(Now)) >= TimeValue("9:00:00 AM") And TimeValue(CStr(Now)) <= TimeValue("4:00:00 PM") Then 
Dim CountDown As Date 
CountDown = Now + TimeValue("00:00:30") 
Application.OnTime CountDown, "BTN_Start_Click" 
Else 
Dim CountTWO As Date 
CountTWO = Now + TimeValue("00:00:05") 
Application.OnTime CountTWO, "Timer" 
End If 
End Sub 

Sub BTN_Start_Click() 
Call Timer 
'Your code here 
End Sub 

Это будет проверять, чтобы убедиться, что время между 9 утра до 4 часов ... затем каждые тридцать секунд он снова проверяет. Если он находится между 9:00 и 16:00, тогда он будет запускать ваш код.

+0

WOW !! Я просто потрясающе! Большое спасибо. – Ralph

+0

Если один из ответов ответил на ваш вопрос, выберите его в качестве ответа. И не стесняйтесь голосовать, если это или другие ответы были полезны :) –

0

Вы можете поместить основную часть кода в этот цикл. Он не выйдет, пока не закончится время.

Do while timevalue(now()) > #9:00:00# and timevalue(now()) < #16:00:00# 
     'do stuff 

     Application.Wait(Now + #0:00:30#) 
    loop 
+0

WOW !! Я просто потрясающе! Большое спасибо. – Ralph