2016-06-27 9 views
0

ライブ通貨データのXMLフィードにアクセスするコードがあります。私は3分ごとに価格を取得する必要があり、それはかなりスポットにする必要があります。それ以外の場合は、他の計算を捨てます。タイマーまたはコードがスケジュールに固執しない

3分ごとにコードを実行するようにタイマーを設定します。

私は滑りが気になり始めたが、最初は2〜2秒だったが、10秒になった。何かご意見は?

Sub xmlData() 

Dim aSwitch As String: aSwitch = Sheet2.[Switch].Value 
Dim aSymbol As String: aSymbol = Sheet2.[Symbol].Value 

'check [switch] status 
If aSwitch = "OFF" Then 
    MsgBox "Switch is OFF!", vbCritical, "Program Status" 
    Exit Sub 
End If 

'MsgBox "Program is ON!", vbCritical, "Program Status" 

'refresh xml data 
Dim iMap As XmlMap 
Set iMap = ActiveWorkbook.XmlMaps(1) 
iMap.DataBinding.LoadSettings "http://****.com/webservice/v1/symbols/" & aSymbol & "/quote" 
iMap.DataBinding.Refresh 

'dim inputs 
Dim aStart As String: aStart = Sheet2.Range("c3").Text 
Dim aInterval As String: aInterval = Sheet2.Range("d3").Text 
Dim aStatus As String: aStatus = Sheet2.[Status].Value 
'oth 
Dim aSecurity As String: aSecurity = Sheet2.[Security].Value 
Dim aPrice As String: aPrice = Sheet2.[Price].Value 
Dim aDatetime As String: aDatetime = Sheet2.[DateTime].Value 

'separate adatetime 
Dim aDate As String: aDate = Mid(aDatetime, 1, 10) 
Dim aTime As String: aTime = Mid(aDatetime, 12, 10) 

'Time actual 
Dim aTimeNow As String: aTimeNow = Format(Now(), "HH:mm:ss") 

'copy xml data to table 
Dim aRow As Long 

aRow = Sheet2.Cells.Find(What:="*", SearchOrder:=xlRows, _ 
    SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 

Sheet2.Cells(aRow, 1).Value = aDate 
Sheet2.Cells(aRow, 2).Value = aTime 
Sheet2.Cells(aRow, 3).Value = aSecurity 
Sheet2.Cells(aRow, 4).Value = aPrice 
Sheet2.Cells(aRow, 5).Value = aTimeNow 

'start timer for reload 
Application.OnTime Now + TimeValue(aInterval), "xmlData" 

End Sub 

EDIT 160627

は、それがXMLをすぐにフェッチされていないことは可能ですか?

+0

おそらく、あなたの手続きには時間がかかるので、何か他の作業をする前に「次の時間」を計算してみてください。 –

+0

さらに、「Now」との差分としてではなく、絶対時間での予定時間を計算してください –

+0

TW-最初にタイマーを設定するようにしますか? OK ... CN - 絶対的な方法で計算する方法がわかりません。 –

答えて

1

Nowとの差分ではなく、絶対時間で計算してください。

関連する問題