2014-09-30 1 views
0

저는 Excel 2013에서 Yahoo Finance의 실시간 주식 데이터를 기록하려고합니다. 내 셀 A1에는 GoPro 주식 기호 GPRO가 있습니다.Excel 2013 레코드/새로 고침 실시간 주식 데이터

셀 B1은 숫자로 인터넷에서받은 문자열 값을 변경하려면 라이브 주가 셀 (C1)에

=NUMBERVALUE(WEBSERVICE("http://finance.yahoo.com/d/quotes.csv?s="&A1&"&f=l1")) 

을 얻을 수있는 코드

=WEBSERVICE("http://finance.yahoo.com/d/quotes.csv?s="&A1&"&f=l1") 

있습니다. VBA에 매크로가 있습니다.

Sub Capture() 
    If I = 0 Then I = 1 
    Sheets("recorddata").Cells(1, I) = Sheets("getdata").Range("C1") 
    I = I + 1 
    Application.OnTime Now + TimeValue("00:00:15"), "Capture" 
End Sub 

15 초마다 라이브 주가를 기록하려고합니다. 어떤 이유로 프로그램이 한 번 실행되고 주가가 다음 스프레드 시트로 복사되지만 스톡 데이터를 새로 고치지 않거나 15 초마다 응용 프로그램을 다시 실행하지 않습니다. 누군가가 매 x 시간마다 주식 데이터를 새로 고침하고 프로그램을 자동으로 시작/중지 할 수있는 솔루션을 찾도록 도와 줄 수 있습니까?

답변

0

두 가지 : 그것은 반복 사이의 값을의 개최 있도록

(1) 공공 (글로벌) 변수로 난을 선언합니다.

(2) 데이터를 복사하기 전에 Application.Calculate를 수행하여 =WebService() 함수가 값을 얻기 전에 Yahoo를 호출하도록하십시오.

Public i As Integer 

Sub Capture() 
    If i = 0 Then i = 1 
    Application.Calculate 
    Sheets("recorddata").Cells(1, i) = Sheets("getdata").Range("C1") 
    i = i + 1 
    Application.OnTime Now + TimeValue("00:00:15"), "Capture" 
End Sub 
+0

내 질문에 답변 해 주셔서 감사합니다. 프로그램을 실행하면 반복하지 않고 한 번만 실행됩니다. – Chris

+0

모든 것이 나에게 좋게 보인다. 동일한 코드를 테스트했지만 Sheets ("recorddata") 셀 (1, i) 행을 다른 것으로 바꾸고 1 초 간격으로 성공했습니다. 디버깅을 위해 Capture2라고하는 두 번째 서브 루틴을 만들 수도 있습니다. Capture()가 .OnTime 행에서 Capture2를 호출하고 Capture2가 OnTime() 행에서 Capture를 호출하도록하십시오. 2 번 캡쳐를하면 msgbox ("Capture2")와 같은 것을하거나, 시작을 확인하는 것을 할 수 있습니다. – JNevill

관련 문제