Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten per VBA aus IE auslesen

Daten per VBA aus IE auslesen
31.08.2017 09:56:44
snewi
Guten Morgen,
ich habe folgenden Codeauszug mit dem ich Daten aus dem IE auslese:

Set c = Doc.getElementsByClassName("content-text")
Dim t, s, h As HTMLObjectElement
For Each t In c
For Each s In t.Children
If s.className = "freespace events_headline" Then
Cells(actRow, 1) = s.innerText
ElseIf s.className = "freespace float-left eventdate eventdate_left" Then
Cells(actRow, 2) = s.innerText
ElseIf s.className = "float-left showDateLink" Then
Cells(actRow, 6) = s.innerText
ElseIf s.className = "events_content" Then
For Each h In s.Children
If h.className = "events-kurztext" Then
Cells(actRow, 3) = h.innerText
ElseIf h.className = "events-veranstalter" Then
Cells(actRow, 5) = h.innerText
ElseIf h.className = "events-ort" Then
Cells(actRow, 4) = h.innerText
End If
Next h
'Cells(actRow, 3) = t.Children.Item(rc).innerText
'MsgBox t.Children.Item(rc).innerText
ElseIf s.className = "events-trenner" Then
actRow = actRow + 1
End If
Next s
Next t
NextUrl = ""
IE.Quit
Next
IE.Quit
Hier nehme ich zb. die class: "events-kurztext" und hier den innerText! Ich brauche aber jetzt zusätzlich noch den Link (Href) dazu!
Wie mache ich das?

div class="events-kurztext">Die Freiwilligen veranstalten die Wies'n.
Nähere Angaben zu der Veranstaltung erfolgen zu einem späteren Zeitpunkt.
a href="/events/detail.php?eventid=666&keepmenu=0&menuid=5&topmenu=3" _
tabindex="55" title="">... mehr

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten per VBA aus IE auslesen
31.08.2017 19:48:54
Zwenn
Hallo snewi,
da hast Du Dir ja ein Höllenkonstrukt gebastelt ;-) Du kannst Links über getAttribute auslesen. Dazu musst Du über getElementsByTagName("a") nur auf das richtige a-Tag zugreifen. Da Du in Deiner Variablen h bereits den richtigen Teil des HTML Document 'ausgeschnitten' hast, müsste es direkt das erste a-Tag sein. getElementsByTagName baut ein Null-basiertes Array auf. Deshalb müsstest Du mit folgender Zeile an den Link kommen:

Cells(actRow, ?) = h.getElementsByTagName("a")(0).getAttribute("href")

Für ? die richtige Spaltennummer eintragen. Ich hoffe man kann so direkt auf das Attribut zugreifen. Habe ich jetzt nicht getestet. Ansosnten musst Du es auf 2 Zeilen aufteilen. Bitte bedenke, dass diese Zeile voraussetzt, dass ein Link vorhanden ist. Sollte das nicht der Fall sein, bricht das Makro mit einer Fehlermeldung ab.
Um den Fehler direkt abzufangen, kannst Du auch folgendes in Dein Makro einfügen:

Dim z as Object
set z = h.getElementsByTagName("a")(0)
if Not z is Nothing then
Cells(actRow, ?) = getAttribute("href")
end if
Viele Grüße,
Zwenn
Anzeige
Berichtigung
31.08.2017 20:06:09
Zwenn
habe in der cells Zeile das z. vergessen:

Dim z as Object
set z = h.getElementsByTagName("a")(0)
if Not z is Nothing then
Cells(actRow, ?) = z.getAttribute("href")
end if

AW: Berichtigung
31.08.2017 22:55:32
snewi
Hi Zwenn,
was meinst du mit Höllenkonstrukt? Hättest du es anders gemacht :-)?
HAbe jetzt mal wie folgt es eingefügt:

Set c = Doc.getElementsByClassName("content-text") '.getElementsByTagName("a")
Dim t, s, h As HTMLObjectElement
For Each t In c
For Each s In t.Children
If s.className = "freespace events_headline" Then
Cells(actRow, 1) = s.innerText
ElseIf s.className = "freespace float-left eventdate eventdate_left" Then
Cells(actRow, 2) = s.innerText
ElseIf s.className = "float-left showDateLink" Then
Cells(actRow, 6) = s.innerText
ElseIf s.className = "events_content" Then
For Each h In s.Children
If h.className = "events-kurztext" Then
Cells(actRow, 3) = h.innerText
ElseIf h.className = "events-kurztext" Then
Cells(actRow, 7) = h.getElementsByTagName("a").getAttribute("href")
ElseIf h.className = "events-veranstalter" Then
Cells(actRow, 5) = h.innerText
ElseIf h.className = "events-ort" Then
Cells(actRow, 4) = h.innerText
End If
Next h
'Cells(actRow, 3) = t.Children.Item(rc).innerText
'MsgBox t.Children.Item(rc).innerText
ElseIf s.className = "events-trenner" Then
actRow = actRow + 1
End If
Next s
Next t
NextUrl = ""
IE.Quit
Next
IE.Quit

Hier mal die MAppe:
https://www.herber.de/bbs/user/115926.xlsm
P.S. Wenn du FEhler findest darfst du sie gerne ausbessern :-)
LG
Anzeige
AW: Berichtigung
31.08.2017 23:41:05
snewi
Und zusätzlich würde es auch gehen das Datum ab wann die Termine geholt werden anzupassen? Es ist jetzt standarmässig wohl auf den aktuellen Tag gesetzt! Ich würde gerne einstellen wollen das das Startdatum grösser gleich aktDatum und das EndeDatum auch grösser gleich aktDatum ist!
LG
AW: Berichtigung
01.09.2017 10:39:57
Zwenn
Moin snewi,
da es bekanntermaßen zu jedem Problem viele Lösungen gibt, ist Deine sicher eine davon. Ich finde nur die ganzen verschachtelten Schleifen witzig. Deshalb 'Höllenkonstrukt'. Ich würde das sicher anders lösen, ja. Das bedeutet ja aber nicht, dass meine Lösung besser wäre.
Du wirst festgestellt haben, dass Du nach dem Einfügen des neuen Codes nach wie vor keine Links ausgelesen bekommst. Das liegt daran, dass Du eine weitere Prüfung auf den Klassennamen "events-kurztext" vornimmst. Diese Prüfung wird jedoch niemals erreicht. Wenn "events-kurztext" zutrifft, dann bereits bei der Prüfung genau davor und das immer.
Du musst die zweite Prüfung also löschen:

For Each h In s.Children
If h.className = "events-kurztext" Then
Cells(actRow, 3) = h.innerText
Cells(actRow, 7) = h.getElementsByTagName("a").getAttribute("href")
ElseIf h.className = "events-veranstalter" Then
Cells(actRow, 5) = h.innerText
ElseIf h.className = "events-ort" Then
Cells(actRow, 4) = h.innerText
End If
Next h
Da ich jetzt den Link habe, um den es eigentlich geht, schaue ich mir die Seite gerne mal an. Allerdings komme ich da erst heute Abend oder morgen zu. Jetzt sitze ich im Büro und muss was für mein Geld tun.
Vielleicht magst Du mal aufschreiben, was Du mit den Daten vor hast. So, wie Du sie jetzt in die Exceltabelle schreibst, kann man damit ja eher wenig anfangen oder?
Viele Grüße,
Zwenn
Anzeige
AW: Berichtigung
01.09.2017 13:52:31
snewi
Hi Zwenn,
ich hole mir wie du bereits gesehen hast diese bestimmten Daten von der Internetseite! Hier gehts nur um Veranstaltungen! Ich würde jetzt hergehen und diese Rohdaten so automatisch umformatieren, dass diese sich in einen GoogleKalender über eine CSV importieren lassen!
Diese Felder stehen mir halt in einem GoogleKalender zur Verfügung:

Subject
Start Date
Start Time
End Date
End Time
All Day Event
Description
Location
Private
Da auf der Internetseite zu einem Termin auf der Detailseite ebenfalls noch Termin auftauchen können brauche ich auch noch den Veranstalter und den Link, den ich dann hinterher mit in die Description packe!
Zusätzlich würde ich wollen, dass ich im Vorfeld angeben kann von welchem Zeitraum ich die Termine holen will! Hier reichen feste Variablen die ich im Code ändere!
Wäre toll wenn du dir das mal anschauen könntest!
Danke bis später
Anzeige
Import über .ics Datei
01.09.2017 14:42:50
Zwenn
Hallo snewi,
wenn Du die Veranstaltungen 'nur' in einen Google Kalender übertragen willst, warum nutzt Du dann nicht einfach die Möglichkeit, direkt alle gefilterten Termine als .ics Datei runterzuladen und direkt in den Google Kalender zu importieren? Der Link für den entsprechenden Download befindet sich doch direkt unter dem Suchen-Button.
So bekommst Du die Termine dann importiert:
https://www.heise.de/ct/hotline/ICS-Terminserie-in-Google-Kalender-importieren-3690578.html
Viele Grüße,
Zwenn
AW: Import über .ics Datei
01.09.2017 16:10:26
Snewi
Hi, ja habe das versucht aber wenn ich das in den GoogleKalender importiere kommt immer ein Fehler!!!
Und so kann ich es automatisieren und muss es nicht immer händisch anstoßen oder?
Gruss
Anzeige
Verstehe
01.09.2017 16:16:08
Zwenn
Aso,
alles klar. Fehler ist natürlich immer eine Spaßbremse. In wie weit sich das komplett automatisieren lässt weiß ich nicht. Ich nutze den Google Kalender nicht.
Wie ich gesehen habe, hast Du noch andere Threads laufen, die Randprobleme dieser Aktion behandeln. Ich mache mir mal Gedanken dazu, da sich das alles in einem Rutsch erledigen lassen sollte.
Rückgruß
AW: Verstehe
01.09.2017 16:29:25
Snewi
hast du ne Email Adresse? Könnte dir mal meinen aktuellen Stand schicken! Dann ist es vielleicht noch einfacher!
AW: Verstehe
01.09.2017 16:54:16
Zwenn
Könntest Du auch hier hochladen.
zwenn_glueckspilz [at] gmx de
AW: Verstehe
01.09.2017 17:59:41
snewi
Mail ist raus :-)
AW: Verstehe
02.09.2017 08:49:46
Hajo_Zi
das wird doch per Mail geklärt, warum offen?

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Anzeige
AW: Daten per VBA aus IE auslesen
31.08.2017 23:39:26
Piet
Hallo snewi
oh, oh, du gehst an Codes ran, da wird mir richtig flau im Magen, das übersteigt bei weitem mein Wissen.
Dieses moderne Excel ist mir wirklich zu kompliziert. Du bist ganz schön mutig, Hut ab!! - Viel Erfolg - !!
mfg Piet
AW: Daten per VBA aus IE auslesen
31.08.2017 23:42:41
snewi
ohh oh das heisst nix gutes :-) Das was du machst ist richtig cool! DAs was ich mache ist try and error :-) LG
AW: Daten per VBA aus IE auslesen
01.09.2017 00:45:21
Piet
Hallo snewi
du bist ganz schön Nachtaktiv, ich gehe gleich schlafen. Danke für dein Kompliment ...
Ich programmiere seit 1994 für Freunde Bekannte Verwandte, habe mir alles selbst beigebracht.
Sehe aber auch die Grenzen meines Wissen, denn Excel ist ganz schön komplizierter geworden.
Vielleicht helfen dir die Komementare in meinen Codes ihn zu verstehen. Würde mich freuen.
Auf die Dauer wirst du mehr verstehen als nur try und Error. Das kommt schon mit der Zeit ...
mfg Piet
Anzeige
AW: Daten per VBA aus IE auslesen
01.09.2017 08:42:20
snewi
Jetzt brauche ich aber trotzdem noch eure Hilfe :-)

351 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige