Hallo Sebastian,
Du kommst so nicht an den gewünschten Wert, weil er zwar im responseText der xhr Antwort vom Web Server steht, aber nicht mehr im HTML Code, wenn der responseText an das HTML Objekt im Makro übergeben wurde. Ich gebe unten ein Makro an, mit dem Du das selber nachsehen kannst. Es werden zwei HTML Dateien gespeichert, die Du einfach im Browser öffnen kannst. Du musst nur den Laufwerksbuchstaben in beiden Pfadangaben ändern, falls Du kein Laufwerk D: hast. In der ersten Datei findest Du die Werte und sie werden auch im Browser angezeigt. In der zweiten Datei findest Du zwar die HTML Struktur zu den Tabellen, aber es stehen keine Werte drin.
Warum ist das so?
Aus meiner Erfahrung heraus mutmaße ich, das Parsen des HTML Quelltextes findet in einem Browser wesentlich toleranter statt, als im HTML Objekt, welches Du mit der Zeile Dim html As New HTMLDocument erzeugst und ich mit der Zeile Set doc = CreateObject("htmlFile"). Bei näherer Betrachtung weist der HTML Code, wie er vom Web Server über xhr über das Makro ausgeliefert wird nämlich Fehler im HTML Quellcode auf. Im Browser wird immer nur ein Tab zur Zeit angezeigt, im erhaltenen Dokument steht aber alles zusammen drin. Es finden sich aber auf jedem Tab mehrfache gleiche IDs, die ein HTML Element eideutig kennzeichnen. Das ist nach HTML Standard verboten. Jede ID darf nur ein einziges Mal in einem Dokument verwendet werden. Ich nehme nun an, beim Parsen zum DOM Baum für das HTML Objekt im Makro, werden diese Fehler nicht toleriert und der entsprechende Quelltext wird einfach weggelassen.
Willst Du also unbedingt die angegebene Seite verwenden, um an den Umrechnungswert zu kommen, kannst Du das entweder machen, wenn Du Dich über das Zerstückeln des responseTextes der xhr Antwort via String Operationen durchwühlst (mir ist da auf die Schnelle keine kurze Lösung eingefallen) oder Du verwendest SeleniumBasic und automatisierst den Chrome- oder Edge-Browser. Im einfachsten Fall verwendest Du eine andere Seite, die mit xhr funktioniert.
Hier das Makro zum Erzeugen der unterschiedlichen HTML Dateien. Witzigerweise belegt die Datei mit den fehlenden Tabellen etwas mehr Speicherplatz. Das finde ich insofern interessant, weil mir das noch nie aufgefallen ist.
Sub getRates7SpeicherTest()
Const url As String = "https://www.bakai.kg/en/"
Dim doc As Object
Set doc = CreateObject("htmlFile")
With CreateObject("MSXML2.XMLHTTP.6.0")
.Open "GET", url, False
.send
doc.body.innerHTML = .responseText
'Speichern des responseText als HTML Datei
Close
Open "D:\BakaiVorKonv.html" For Output As #1
Print #1, .responseText
Close
'Speichern der HTML Datei nach konvertierung des responseText ins htmlFile Objekt
Close
Open "D:\BakaiNachKonv.html" For Output As #1
Print #1, doc.getElementsByTagName("html")(0).outerHTML
Close
End With
End Sub
Hier noch ein Makro, mit dem Du im Direktfenster der VBA IDE (Strg+G) ausgeben lassen kannst, was im HTML Objekt von der gewünschten Tabellenstruktur übrig geblieben ist. Nur der Text, der nach den Währungskursen zur Erklärung angeführt wird, bleibt als Wert erhalten, der im Browser ausgegeben wird. Ansonsten bleibt Du nur die leere Tabellenstruktur übrig.
Sub getRates7()
Const url As String = "https://www.bakai.kg/en/"
Dim doc As Object
Dim nodeNonCashTab As Object
Set doc = CreateObject("htmlFile")
With CreateObject("MSXML2.XMLHTTP.6.0")
.Open "GET", url, False
.send
doc.body.innerHTML = .responseText
Set nodeNonCashTab = doc.getElementByID("non_cash_tab")
Debug.Print nodeNonCashTab.outerHTML
End With
End Sub
Die ausgegebene Zeile kannst Du hier https://beautifier.io/ reinwerfen. Dann rechts Beautify HTML im Dropdown auswählen und auf Beautify Code darunter klicken. Dann wird der HTML Code so formatiert, dass Du auf einen Blick sehen kannst, was los ist.
Viele Grüße,
Zwenn
|