PDA

Vollständige Version anzeigen : Aus Webcontrol Daten auslesen


roadrunner_1977
25.09.2003, 11:00
Hallo!

Ich möchte gerne aus einem Webcontrol Daten auslesen! Ich habe Html-Seiten die die Daten immer an derselben Position haben. Ich rufe jetzt über ein Webcontrol die Seite auf. Besteht nun die Möglichkeit die Daten dort auszulesen und sie in Textfelder zu kopieren?
Leider kenn ich mich nicht all zu gut in VB aus, also bitte schon einmal um Nachsicht.
Ich hatte schon überlegt, ob es möglich ist den Cursor an eine Stelle zu positionieren, eine Markierung durch zuführen und von dort auch zu kopieren. Oder keine gute Idee?
Die zweite Möglichkeit wäre vielleicht die HTML an Excel zu exportieren und diese dann per Anfügeabfrage einzufügen.
:confused:
Leider habe ich Schwierigkeiten dies umzusetzen. Bitte helft mir...

WinXP+OfficeXP :)

Sascha Trowitzsch
25.09.2003, 12:18
Da meinst mit dem Webcontrol einen eingebetteten Internet Explorer?

Falls ja:

An den komplette Text der angezeigten Seite kommst du mit:

strText = AXBrowser.Object.Document.Body.innertext

AXBrowser sei dabei der Name des Webcontrols.

Jetzt muss du diesen Text natürlich mit einer VBA-Prozedur nach den gesuchten Daten durchsuchen, wofür ich in Ermangelung der Kenntnis des Seitenaufbaus keinen Vorschlag machen kann.

Noch zur Erläuterung:

AXBrowser.Object.Document

gibt das Document-Objekt der angezeigten HTML-Seite wieder.
Um mit diesem (sinnvoll) zu arbeiten, brauchst du eigentlich einen Verweis auf die "Microsoft HTML Object Library". Für einen VBA-Anfänger dürfte das Objektmodell des Browsers aber etwas zu hoch sein. Ich hoffe deshalb, dass du mit dem Textstring oben auch zurecht kommst, ohne diese Library benutzen zu müssen.

Ciao, Sascha

roadrunner_1977
25.09.2003, 12:43
Ok, soweit erstmal danke!

Den Textstring
>strText = AXBrowser.Object.Document.Body.innertext<
baue ich, wenn ich es richtig verstande habe, als Code hinter dem Textfeld ein. z.b. Bei Änderung o.ä. Korrekt?

In der Html habe ich jetzt z.B. folgende Daten auf die ich suche
Menge: 123
Preis: 11,11 €

Nach denen möchte ich ja suchen, wie baue ich das in eine VBA-Prozedur ein, um nun zum einem die 123 ( dieser Werte ändert sich natürlich ) und zum zweiten die 11,11 € jeweils in ein Textfeld auszulesen.

Gruss Roadrunner_1977

Sascha Trowitzsch
25.09.2003, 12:58
Nehmen wir an, du hast in deinem Formular einen Button, der auf Klick hin die Textfelder mit den Daten füllen soll. Dann könnte das z.B. so aussehen:


Private Sub Button_Click
Dim strText As String, n As Long, m As Long

strText = AXBrowser.Object.Document.Body.innertext
n = Instr(1, strText, "Menge:")
If n<>0 Then
m = Instr(n + 6, strText, Chr(13))
If m<>0 Then
Textfeld1.Value = Val(Mid(strText, n + 6, m-n))
End If
End If

End Sub

(Das hat zur Voraussetzung, dass hinter den Zahlen auch wirklich Zeilenumbrüche stehen!)

Ciao, Sascha

roadrunner_1977
25.09.2003, 13:08
Funktioniert! 1A. :D

...vielen Dank!!!

Jetzt muss ich es nur noch auf die anderen Datenfelder übertragen. Aber das werde ich hinbekommen ( ich hoffe es...! )

Bis dann mal...

Gruss Roadrunner_1977

SNowack
24.02.2004, 08:58
Hallo zusammen,

wenn ich mit strText = AXBrowser.Object.Document.Body.innertext auf den Html-Text zugreifen kann, was muss ich tun, um auf den Quelltext zuzugreifen?

Mit besten Dank im Voraus

Stefan

Sascha Trowitzsch
24.02.2004, 09:16
strHTMLText = AXBrowser.Object.Document.Body.innerHTML

Ciao, Sascha

SNowack
24.02.2004, 09:34
Hallo Sascha,

besten Dank!!! Das war genau das, was ich gesucht habe :top:

SNowack
24.02.2004, 21:53
Hallo nochmal,

ich war wohl ein Bischen voreilig... wie schaffe ich es, dass der VBA-Code erst nach der Aktualisierung des Webconrols abgearbeitet wird? Im Moment habe ich ein Dummy-Form das per Dialog geöffnet wird. Um den Vorgang jedoch automatisiert ablaufen zu lassen, ist das sicherlich nicht wirklich gut geeignet (Timer + Schliessen).

Besten Dank

Sascha Trowitzsch
24.02.2004, 23:07
Navigate leitet bloß die Anforderung der URL ein.
Das Dokument ist im Webbrowser lesbar, wenn das Ereignis DocumentComplete eingetreten ist. In diese Ereignisprozedur musst du den InnerHTML-Code reinsetzen.
(Schau dir am besten mal im Objektkatalog die verscheidenen Ereignisse des Objekts Webbrowser in der shdocvw-Library an.)

Ciao, Sascha