Excel-VBA: Erhalten text HTML Tabelle td
Ich bin mit excel Werte aus einer Webseite. Unter anderen Elementen, die HTML enthält die folgende Tabelle:
<div id="myDiv">
<table class="myTable">
<tbody>
<tr>
<td>Text1:</td>
<td class="data"><strong>0.51</strong></td>
</tr>
<tr>
<td>Text2:</td>
<td class="data"><strong>2199</strong></td>
</tr>
</tbody>
</table>
</div>
Die Seite ist gespeichert in der variable oHtml. Es ist in Ordnung, greifen andere Elemente außerhalb dieser Tabelle. Aber wenn ich versuche, um den Wert 0,51 für das Beispiel verwende ich JS in die Konsole ein:
document.getElementById("myDiv").getElementsByClassName("myTable")[0].getElementsByClassName("data")[0].innerText
Und den Wert 0,51 ausgewählt ist.
Jedoch der folgende VBA-code innerhalb einer Funktion zurückgeben #WERT!
Function myFunction(id)
Call myConnection(id)
Set myDadta = oHtml.getElementById("myDiv").getElementsByClassName("myTable")(0).getElementsByClassName("data")(0)
myFunction = myData.innerText
End Function
Dies ist die Verbindung zu IE:
Public Sub myConnection(id)
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://www.example.com" & id, False
.send
oHtml.body.innerHTML = .responseText
End With
End Sub
Wie gesagt, diese Art der syntax ist in Ordnung, die mit anderen Elementen aus dieser Tabelle in dieser gleichen Seite, so warum bin ich immer diese Fehlermeldung?
InformationsquelleAutor Nuno Nogueira | 2013-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du scheinst einen Tippfehler in deiner variable name. Haben Sie
Option Explicit
?UPDATE
Ich eine Taste auf VBA-form und die folgenden korrigierten code, der funktioniert:
AKTUALISIERT CODE, UM ZU DEMONSTRIEREN-FUNKTION AUF DER LIVE-URL -
Check meine Antwort.
Gute Arbeit, pradeep 🙂 Wünschte, ich könnte upvote dies wieder. @NunoNogueira: Wenn dies ist, was Sie suchen, dann akzeptieren Sie, dass diese Antwort eher als mir 😉
AFAIK Sid, er nie Fragen beantwortet, für die Punkte. Er hat ein Haustier phrase, etwas, das sagt, dass die Punkte können nicht kaufen Sie harley davidson. Allerdings habe ich das Gefühl, dass er geantwortet hatte, was Ihre eigentliche Frage war. Meine Antwort ist nur ein update für Ihre "Bearbeiten". BTW vermeiden Sie die Verwendung
getElementsByClassName
wie es funktioniert nicht auf allen IE-Versionen und alle Browser konstant. Oder haben Sie eigene javascript-Erweiterung Methoden explizit.Bezüglich der Langsamkeit, es ist, weil alles arbeitet synchron und auf single-thread. Excel-VBA ist grundsätzlich single threaded. Hatte es schon .NET oder einer anderen Sprache, multi-threading unterstützt, die Sie verwendet haben konnten, die Fähigkeit zu beschleunigen. Das beste, was Sie tun können, ist zu versuchen, indem
DoEvents
irgendwo innerhalb der Schleife zu stoppen, die UI einfrieren.InformationsquelleAutor Pradeep Kumar
Dies funktioniert für mich. Ich habe den Sollwert zu
Microsoft HTML Object Library
BTW, die Ihnen fehlt ein
"
im<div id=myDiv">
Screenshot:
Hast du einen Verweis auf
Microsoft HTML Object Library
?Ja, dein code ist korrekt. Ich kann jetzt sehen, aber es funktioniert nicht für mich, denn ich wurde eine andere Verbindung, werde ich Bearbeiten, meine Frage oben.
Gut danke für die Hilfe trotzdem, ich nehme Ihre Antwort, da der code gut ist.
Hat Pradeep code dir nicht helfen?
InformationsquelleAutor Siddharth Rout