Kontakt
DSVGO
Bankleitzahlen sind bei der Abwicklung von Geldgeschäften das "A und O". Leider ändern sie sich ständig (es kommen neue Banken hinzu, andere werden geschlossen). Daher ist eine statische BLZ-Datenbank nicht geeignet und die manuelle Nacherfassung ist kaum zumutbar.
Glücklicherweise gibt es auf www.bankleitzahlen.de eine Internet-Anwendung, die eine Bank-Suche gemäß BLZ, Bankname und/oder Standort ermöglicht. Was liegt da näher, als diese Quelle zu nutzen?
Die unten vorgestellte GetBLZInfos-Funktionen simuliert mit Hilfe der im Artikel "HTML-Formulare mit VB ausfüllen" gezeigten HttpPost-Funktion das Ausfüllen der Suchmaske. Das aus dem Internet erhaltene Ergebnis wird dann (mehr oder weniger mühselig) mit den bekannten String-Funktionen analysiert und passend auseinander geschnitten.
Da u.U. als Suchergebnis mehrere relevante Bank-Einträge existieren können, werden die Daten in einem sogenannten disconnected Recordset abgeliefert. Dazu wird ADO benötigt, also muss unter "Projekt/Verweise" (engl. Project/References) das Häckchen vor "Microsoft ActiveX Data Objects 2.1 Library" (o.ä.) aktiviert sein.
Das folgende Beispiel sucht alle Banken, die eine BLZ der Form "44010..." haben und gibt das Resultat im Debug-Fenster aus:
Dim rs As Recordset Set rs = GetBLZInfos("44010") Debug.Print rs.RecordCount; "Treffer:" Do Until rs.EOF Debug.Print rs("BLZ"); " - "; rs("Bank"); ", "; rs("Ort") rs.MoveNext Loop
Als Ergebnis erscheinen folgende Daten im Testfenster (Stand: 09.11.2001):
6 Treffer: 44010400 - Westfälische Hypothekenbank, Dortmund 44010300 - ABN AMRO Bank, Dortmund 44010200 - AXA Colonia Bausparkasse, Dortmund 44010111 - SEB, Dortmund 44010111 - SEB, Lünen 44010046 - Postbank, Dortmund
In der Hauptfunktion werden die Suchparameter zu einem Internet-genehmen String zusammengebaut. Falls die Suche erfolgreich war, wird die Analyse-Funktion aufgerufen. Ansonsten wird ein abfangbarer VB-Error erzeugt.
' ©2001 by Jost Schwider, http://vb-tec.de/ Public Function GetBLZInfos( _ Optional ByRef BLZ As String, _ Optional ByRef Bank As String, _ Optional ByRef Ort As String, _ Optional ByVal OpenType As InternetOpenType = IOTPreconfig, _ Optional ByVal Port As Integer = 80, _ Optional ByRef Username As String, _ Optional ByRef Password As String _ ) As Recordset 'Deklarationen: Const URL = "http://www.bankleitzahlen.de/bankleitzahlen.php" Dim Param As String Dim HTML As String If IsNumeric(BLZ) Then 'Suche via Leitzahl: Param = "blz=" & URLEncode(BLZ) End If If Len(Bank) Then 'Suche via Bankname: If Len(Param) Then Param = Param & "&" Param = Param & "name=" & URLEncode(Bank) End If If Len(Ort) Then 'Suche via Standort: If Len(Param) Then Param = Param & "&" Param = Param & "ort=" & URLEncode(Ort) End If If Len(Param) Then 'HTML-Seite holen: HTML = HttpPost(URL, Param, OpenType, Port, Username, Password) If InStr(HTML, "Anfrage ergab") Then Set GetBLZInfos = BLZInfos(HTML) ElseIf Len(HTML) Then Err.Raise 17 'Can't perform requested operation Else Err.Raise 52 'Bad file name or number End If Else Err.Raise 5 'Invalid procedure call or argument End If End Function
Die eigentliche Arbeit geschieht in der Analyse-Funktion: Es wird ein Recordset "aus dem Nichts" erzeugt - es liegt also keine Datenbank dahinter. Dann werden mit den bekannten String-Funktionen nach und nach die Informationen aus dem HTML-Code herausgeschnitten und dem Recordset hinzugefügt.
' ©2001 by Jost Schwider, http://vb-tec.de/ Private Function BLZInfos(ByRef HTML As String) As Recordset Dim iDetails As Long Dim iStart As Long Dim iBLZ As Long Dim BLZ As String Dim iBank As Long Dim Bank As String Dim iOrt As Long Dim Ort As String Dim i As Long Set BLZInfos = New Recordset With BLZInfos 'Recordset anlegen: With .Fields .Append "BLZ", adChar, 8 .Append "Bank", adVarChar, 40 .Append "Ort", adVarChar, 40 End With .CursorLocation = adUseClient .CursorType = adOpenStatic .Open 'Ergebnis analysieren: iDetails = InStr(HTML, ">Details</a>") Do While iDetails iStart = InStrRev(HTML, "<tr", iDetails) 'Bankleitzahl ausschneiden: iBLZ = InStr(iStart, HTML, "</td><td>") - 8 BLZ = Mid$(HTML, iBLZ, 8) 'Bankname ausschneiden: iBank = InStr(iBLZ + 17, HTML, ">") + 1 i = InStr(iBank, HTML, "</td>") Bank = Mid$(HTML, iBank, i - iBank) 'Standort ausschneiden: i = InStr(i + 1, HTML, "</td>") iOrt = InStr(i + 9, HTML, ">") + 1 i = InStr(iOrt, HTML, "</td>") Ort = Mid$(HTML, iOrt, i - iOrt) 'Datensatz hinzufügen: .AddNew _ Array("BLZ", "Bank", "Ort"), _ Array(BLZ, Bank, Ort) 'Nächsten Eintrag suchen: iDetails = InStr(iDetails + 1, HTML, ">Details</a>") Loop 'Recordset positionieren: If iStart Then .MoveFirst End With End Function
© Jost Schwider, 09.11.200-09.11.2001 - http://vb-tec.de/blz.htm