Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1688to1692
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Web-Scraping / Webseite auslesen

Web-Scraping / Webseite auslesen
30.04.2019 10:40:34
Marco
Hallo Zusammen,
ich arbeite gerade an einer Prozedur, die mir anhand einer IBAN alle weiteren Infos wie BLZ, Kontonummer, und Bankname ermittelt und ausgibt. Hierbei habe ich noch folgende Probleme:
- Laufzeitfehler "91" Objektvariable nicht definiert!
Dieser Fehler tritt öfter auf. Einmal funktioniert die Prozedur ohne Fehler, dann tritt bei einem anderen Aufruf der Fehler wieder auf.
Woran kann es liegen? Was kann ich gegen den Fehler tun? Ich möchte ungern mit "On Error resume next" arbeiten, dazu möchte ich auch gerne bei jedme Aufruf ein Ergebnis.
- Das Auslesen des Banknamens klappt super, weil hier auch ein eindeutiger Klassenname (such) enthalten ist. Wie setze ich das ganze für BLZ und Kontonummer um? Dort sind keine eindeutigen Klassen erhalten. Wüsste jemand eine Lösung?
Ja ich weiß, ich könnte mir hierzu auch die passenden Stellen aus der IBAn ziehen - trotzdem würde mich auch hier ein Lösungsansatz interessieren.
Danke und Viele Grüße
Marco
Seite die ausgelesen werden soll(Beispiel):
view-source:https://nifox.de/ibanreverse?ibannr=DE41500105170123456789
Mein Script:
Sub BankdatenAusIBAN()
'On Error Resume Next
Dim appIE As Object
Const IBANurl As String = "https://nifox.de/ibanreverse?ibannr="
Dim IBAN, BANKNAME, BLZ, KTNR As String
IBAN = "DE41500105170123456789"
Set appIE = CreateObject("internetexplorer.application")
appIE.Visible = False
With appIE
.Navigate IBANurl & IBAN
End With
Do While appIE.Busy
DoEvents
Loop
Set allRowOfData = appIE.document.getElementsByClassName("such")
BANKNAME = allRowOfData(0).innerText
appIE.Quit
Set allRowOfData = Nothing
Set appIE = Nothing
Debug.Print BANKNAME
Debug.Print BLZ
Debug.Print KTNR
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Web-Scraping / Webseite auslesen
30.04.2019 11:01:21
Marco
Hallo,
der 2. Punkt hgat sich erledigt, das habe ich gelöst.
Leider bekomme ich nach wie vor ab und zu den Laufzeitfehler.
VG
Marco
Sub BankdatenAusIBAN()
'On Error Resume Next
Dim appIE As Object
Dim allRowOfData, allRowOfData2, allRowOfData3 As Object
Const IBANurl As String = "https://nifox.de/ibanreverse?ibannr="
Dim IBAN, BLZ, KTNR As String
Dim Bankname As String
IBAN = "DE41500105170123456789"
Set appIE = CreateObject("internetexplorer.application")
appIE.Visible = False
With appIE
.Navigate IBANurl & IBAN
End With
Do While appIE.Busy
DoEvents
Loop
Set allRowOfData = appIE.document.getElementsByClassName("such")
Set allRowOfData2 = appIE.document.getElementsByClassName("neu")
Bankname = allRowOfData(0).innerText
BLZ = allRowOfData2(0).innerText
KTNR = allRowOfData2(1).innerText
appIE.Quit
Set allRowOfData = Nothing
Set allRowOfData2 = Nothing
Set appIE = Nothing
Debug.Print "Name der Bank: " & Bankname
Debug.Print "Bankleitzahl: " & BLZ
Debug.Print "Kontonummer: " & KTNR
End Sub

Anzeige
Lies den Bankname vor...
30.04.2019 11:04:59
Case
Hallo, :-)
... dem zweiten "Set" aus. ;-)
Servus
Case

Du nimmst in dem Fall...
30.04.2019 11:03:02
Case
Hallo, :-)
... den "ClassName" "neu": ;-)
Option Explicit
Sub BankdatenAusIBAN()
Dim appIE As Object
Const IBANurl As String = "https://nifox.de/ibanreverse?ibannr="
Dim IBAN, BANKNAME, BLZ, KTNR As String
Dim allRowOfData As Object
Dim allRowOfData1 As Object
IBAN = "DE41500105170123456789"
Set appIE = CreateObject("internetexplorer.application")
appIE.Visible = False
With appIE
.Navigate IBANurl & IBAN
End With
Do While appIE.Busy
DoEvents
Loop
Set allRowOfData = appIE.document.getElementsByClassName("such")
BANKNAME = allRowOfData(0).innerText
Set allRowOfData1 = appIE.document.getElementsByClassName("neu")
BLZ = allRowOfData1(0).innerText
KTNR = allRowOfData1(1).innerText
appIE.Quit
Set allRowOfData = Nothing
Set appIE = Nothing
Debug.Print BANKNAME
Debug.Print BLZ
Debug.Print KTNR
End Sub
Servus
Case

Anzeige
AW: Du nimmst in dem Fall...
30.04.2019 11:38:55
Marco
Hallo Case,
danke Dir - Jetzt scheint es Problemlos zu laufen. :)
VG
Marco
AW: Web-Scraping / Webseite auslesen
30.04.2019 13:27:35
Daniel
Hallo Marco,
nichts zur Sache, mir fällt nur auf dass du dem gleichen (vermutlichen) Irrtum beim Deklarieren verfallen bist wie ich noch kürzlich.
Dim IBAN, BANKNAME, BLZ, KTNR As String
Wenn auch logisch, funktioniert das so leider nicht. Jede Variable muss "As String" deklariert werden, ansonsten werden die anderen zu Variant. Kein Beinbruch, aber wohl nicht erwünscht. Müsste also heißen
Dim IBAN As String, BANKNAME As String, BLZ As String, KTNR As String
Gruß
Daniel
AW: Web-Scraping / Webseite auslesen
30.04.2019 14:40:56
Marco
Hallo Daniel,
stimmt Du hast Recht :)
Vielen Dank für den Hinweis.
VG
Marco
Anzeige
Lösung und ganzes Script
30.04.2019 15:17:17
Marco
Hallo nochmal,
ich habe gemerkt, dass der Laufzeitfehler immer auftrat, wenn die Klasse auf der Seite nicht gefunden werden konnte. Ich habe das ganze jetzt mit einer Fehlerabfrage gelöst.
Falls es jemand gebrauchen kann - hier noch einmal das ganze Script.
Danke für Eure Hilfe und morgen einen schönen Feiertag
VG
Marco
Global IBAN As String, BANKNAME As String, BLZ As String, KTNR As String
Public Sub Bankinfo()
Dim IBANErgebnis As String
IBAN = InputBox("Bitte geben Sie eine IBAN ein:", "IBAN-Checker")
Call BankdatenAusIBAN
IBANErgebnis = "Name der Bank: " & BANKNAME & vbCrLf & "Kontonummer: " & KTNR & vbCrLf & " _
Bankleitzahl: " & BLZ
MsgBox IBANErgebnis, vbOKOnly, "Ergebnis"
End Sub
Sub BankdatenAusIBAN()
Dim appIE As Object
Const IBANurl As String = "https://nifox.de/ibanreverse?ibannr="
Dim allRowOfData As Object
On Error GoTo Fehler
Set appIE = CreateObject("internetexplorer.application")
appIE.Visible = False
With appIE
.Navigate IBANurl & IBAN
End With
Do While appIE.Busy
DoEvents
Loop
Set allRowOfData = appIE.document.getElementsByClassName("such")
BANKNAME = allRowOfData(0).innerText
Set allRowOfData = appIE.document.getElementsByClassName("neu")
BLZ = allRowOfData(0).innerText
KTNR = allRowOfData(1).innerText
appIE.Quit
Set allRowOfData = Nothing
Set appIE = Nothing
Exit Sub
Fehler:
BANKNAME = "Unbekannt"
KTNR = "Unbekannt"
BLZ = "Unbekannt"
End Sub
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige