(VBA) read from TCP
Hi,
ich habe einen kleinen Arduino-Server der mir über TCP/HTTP (eine IP im localen Netz) datenzurückgibt.
Jetzt wollte ich fragen ob es möglich ist über VBA diese Daten abzurufen?
Sozusagen hätte ich gerne einen Button und der holt sich dann einfach alle Daten von 192.168.1.55
=> chrome gibt mir das zurück:
view-source:192.168.1.55
sobald das mal in Excel ist das umzuformatieren sollte kein Problem darstellen... die Frage ist wie bekomm ich das in Excel rein?
Vielen Dank
ich habe einen kleinen Arduino-Server der mir über TCP/HTTP (eine IP im localen Netz) datenzurückgibt.
Jetzt wollte ich fragen ob es möglich ist über VBA diese Daten abzurufen?
Sozusagen hätte ich gerne einen Button und der holt sich dann einfach alle Daten von 192.168.1.55
=> chrome gibt mir das zurück:
view-source:192.168.1.55
{20.81,20.87,21.31,21.12,20.69}
sobald das mal in Excel ist das umzuformatieren sollte kein Problem darstellen... die Frage ist wie bekomm ich das in Excel rein?
Vielen Dank
5 Antworten
- LÖSUNG colinardo schreibt am 22.02.2016 um 19:02:56 Uhr
- LÖSUNG 94451 schreibt am 22.02.2016 um 19:18:03 Uhr
- LÖSUNG 94451 schreibt am 22.02.2016 um 19:36:18 Uhr
- LÖSUNG colinardo schreibt am 22.02.2016 um 19:45:09 Uhr
- LÖSUNG 94451 schreibt am 22.02.2016 um 19:36:18 Uhr
- LÖSUNG 94451 schreibt am 22.02.2016 um 19:18:03 Uhr
- LÖSUNG miniversum schreibt am 22.02.2016 um 19:07:47 Uhr
LÖSUNG 22.02.2016, aktualisiert um 19:11 Uhr
Hallo RoadRunner777,
wenn deine Seite wirklich nur Text zurückgibt, kannst du es z.B. so machen.
Je nach dem wie die Daten zurückgeliefert werden ist eventuell Anpassung nötig.
Grüße Uwe
wenn deine Seite wirklich nur Text zurückgibt, kannst du es z.B. so machen.
Sub GetData()
dim lngTicks as Long
lngTicks = DateDiff("s",#1970/1/1#,now())
' URL angeben
Const URL = "http://192.168.1.55"
'URL abrufen (damit keine gecachte Antwort zurückgegeben wird das Anhängen eines Tick-Wertes)
MsgBox GetUrlResponse(URL & "?" & lngTicks)
End Sub
'Function zum holen der Daten per XMLHTTP-Object
Function GetUrlResponse(ByVal strURL As String) As String
On Error GoTo Error
Dim objhttp As Object
Set objhttp = CreateObject("Microsoft.XMLHTTP")
With objhttp
.Open "GET", strURL, False
.send
If .Status = 200 Then
GetUrlResponse = .responseText
Else
GetUrlResponse = ""
End If
End With
Exit Function
Error:
GetUrlResponse = ""
End Function
Grüße Uwe
LÖSUNG 22.02.2016 um 19:07 Uhr
Wenn du view-source verwendest dann willst du ja eigentlich den Inhalt der html Datei lesen.
Dazu findest du sicher was.
Wenn du allerdings wirklich einen interpreter brauchst vorher dann würd ich das Microsoft Web Browser Steuerelement auf eine Form setzen und dann "von hinten" anzapfen und verwenden.
Dazu findest du sicher was.
Wenn du allerdings wirklich einen interpreter brauchst vorher dann würd ich das Microsoft Web Browser Steuerelement auf eine Form setzen und dann "von hinten" anzapfen und verwenden.
LÖSUNG 22.02.2016 um 19:18 Uhr
Sehr sehr geil...
erste Zeile musste ich noch vür x64 anpassen:
erste Zeile musste ich noch vür x64 anpassen:
Private Declare PtrSafe Function GetTickCount64 Lib "kernel32" () As LongLong
LÖSUNG 22.02.2016, aktualisiert um 19:36 Uhr
evtl. kann mir noch jemand sagen wie ich das jetzt in eine schleife bringe...
zwar habe ich schon mir dieses Script aus dem Internet geholt...
und während start ganz gut geht... kommt bei STOP immer Fehler 1004...
Ich nutze Office 2016 x64
zwar habe ich schon mir dieses Script aus dem Internet geholt...
Sub start()
dblNextTime = Now + TimeSerial(0, 0, 1)
Application.OnTime dblNextTime, "Uhrzeit"
End Sub
Sub stopp()
Application.OnTime dblNextTime, "Uhrzeit", Schedule:=False
End Sub
Sub Uhrzeit()
Debug.Print Format(Time, "hh:mm:ss")
start
End Sub
und während start ganz gut geht... kommt bei STOP immer Fehler 1004...
Ich nutze Office 2016 x64
LÖSUNG 22.02.2016, aktualisiert um 22:48 Uhr
Setze einfach eine globale Variable im Modulkontext welche du in deiner Prozedur auf True oder False prüfst und je nachdem Application.OnTime wieder setzt oder nicht.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Grüße Uwe
Public timerActive As Boolean
Sub GetData()
Dim lngTicks As Long
lngTicks = DateDiff("s", #1/1/1970#, Now())
' URL angeben
Const URL = "http://192.168.1.55"
If timerActive Then
'URL abrufen (damit keine gecachte Antwort zurückgegeben wird das Anhängen eines Tick-Wertes)
Sheets(1).Range("A1") = Format(Now, "hh:mm:ss")
Sheets(1).Range("B1").Value = GetUrlResponse(URL & "?" & lngTicks)
ET = Now + TimeValue("00:00:01")
Application.OnTime ET, "GetData"
End If
End Sub
'Function zum holen der Daten per XMLHTTP-Object
Function GetUrlResponse(ByVal strURL As String) As String
On Error GoTo Error
Dim objhttp As Object
Set objhttp = CreateObject("Microsoft.XMLHTTP")
With objhttp
.Open "GET", strURL, False
.send
If .Status = 200 Then
GetUrlResponse = .responseText
Else
GetUrlResponse = ""
End If
End With
Exit Function
Error:
GetUrlResponse = ""
End Function
'Prozedur zum Starten
Sub StartTimer()
timerActive = True
GetData
End Sub
'Prozedur zum Stoppen
Sub StopTimer()
timerActive = False
End Sub
Grüße Uwe