Ich habe Code, wo ich auf einen XML-Feed für Live-Währungsdaten zugreifen. Ich muss den Preis alle 3 Minuten erfassen, und es muss ziemlich genau sein, sonst wird es die anderen Berechnungen abwerfen.Timer oder Code entspricht nicht dem Zeitplan
Ich habe einen Timer eingerichtet, um den Code alle 3 Minuten oder in dem von mir gewählten Intervall auszuführen.
Ich fing an, Rutschen zu bemerken, das war ein oder zwei Sekunden zuerst, aber hat sich in 10 Sekunden in Stellen verwandelt. Irgendwelche Gedanken?
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 160.627
Ist es möglich, die XML Holen nicht sofort?
Vielleicht Prozedur braucht Zeit auszuführen, so versuchen, die „next“ Zeit Berechnung * vor * etwas anderes zu tun. –
Besser noch, berechnen Sie die geplante Zeit in absoluten Zahlen, anstatt als ein Unterschied von 'Now' –
TW-so wie die Einstellung des Timers am Anfang? ok ... CN-ich bin nicht sicher, wie man in absoluten Zahlen rechnet. –