Autor: Manfred Hoffbauer, Düsseldorf
Die routinemäßigen Bankgeschäfte bequem und preiswert von zu Hause aus zu führen, erfreut sich immer größerer Beliebtheit. Kein Wunder also, dass praktisch jedes nennenswerte Bankunternehmen seinen Kunden einen zuverlässigen Online-Zugang für das Homebanking zur Verfügung stellt. Ein weit verbreitetes und sehr leistungsfähiges Programm für das Homebanking ist Quicken. Mit ihm ist auch der unbedarfte Anwender in der Lage, seine Bankgeschäfte per PC zu führen. Quicken, das sich seit einiger Zeit in den Händen der Haufe-Tochter Lexware befindet, hat allerdings für Access-Anwender eine entscheidende Schwachstelle: Es bietet keine Schnittstelle zu Access.
Abhilfe schafft das in diesem Beitrag beschriebene Tool. Wenn Sie über dieses VBA-Programm verfügen, benötigen Sie zum Import Ihrer Quicken-Daten in Access nur noch zwei Schritte:
Der folgende Beitrag beschreibt die Schritte, die Sie mit Quicken ausführen müssen, ebenso wie die Funktionsweise des Access-Programms.
Quicken verwendet zum Datenaustausch das so genannte Quicken Interchange Format (kurz: QIF). Es handelt sich hierbei um ein nicht standardisiertes Datenformat, das Sie sich zwar mit einem Texteditor ansehen, aber in kaum ein anderes Programm importieren können. Um Daten mit Quicken zu exportieren, gehen Sie wie folgt vor:
Bild 1: Exportoptionen von Quicken
Hinweis
Die Abbildungen in diesem Beitrag wurden mit Quicken 6 angefertigt. Einige Details in den Abbildungen können von anderen Programmversionen abweichen.
Das Programm Quicken exportiert die Daten des ausgewählten Kontos und der angekreuzten Referenzdateien in eine Textdatei mit der Erweiterung QIF. Es handelt sich um eine Textdatei, die Sie auch mit dem Windows-Editor öffnen können.
Bild 2: QIF-Datei im Windows-Editor
Access verfügt leider über keinen Importfilter für QIF-Dateien. Aufgrund des ungewöhnlichen Formats der QIF-Dateien eignet sich auch kein anderer Importfilter. Deshalb wird ein VBA-Programm für den Import benötigt. Die erste Aufgabe für das Programm besteht darin, die Textdatei in eine Access-Tabelle einzulesen. Dies erfolgt bei Access üblicherweise durch das öffnen der Textdatei per Open-Anweisung:
Open "c:\Quicken\SSK.TXT" For Binary As #1
Diese Anweisung öffnet die Textdatei zum binären Lesen. Dazu folgender Hintergrund: Wenn Sie eine QIF-Datei mit Open…For Input öffnen, können Sie die Datei nur per Input-Anweisung zeilenweise lesen. Diese Anweisung liest eine Textzeile bis zum Auftreten eines Absatzendezeichens, wozu leider auch das Komma zählt. Beim zeilenweisen Lesen mit Input liest Access die Zeile T-63,36 in zwei Zeilen ein. Die erste Zeile besteht aus T-63 und die zweite aus 36.
Da Access keine Optionen anbietet, um die Interpretationsschwierigkeiten beim Lesen von QIF-Dateien zu umgehen, ist das binäre öffnen der Textdatei und die Programmierung einer eigenen Routine zum Einlesen einer Zeile erforderlich:
Quellcode 1
Das Lesen aus der mit Open … Binary geöffneten Textdatei erfolgt über die Get-Anweisung. Diese liest in Abhängigkeit vom Datentyp der angegebenen Variablen eines oder mehrere Zeichen. Mit der Definition der Variablen Zeichen als Zeichenkette mit der festen Länge 1 (Dim Zeichen As String * 1) ist die Anzahl der eingelesenen Zeichen auf 1 fixiert.
Das zeichenweise Lesen erfolgt in einer kopfgesteuerten Schleife, die erst beim Auftreten des Dateiendes oder eines so genannten Line-Feed-Zeichens beendet wird. Die mit Quicken generierten Textdateien orientieren sich zumindest in dieser Beziehung an einem Standard. Jede Zeile endet mit einem unsichtbaren Carriage-Return- und einem Line-Feed-Zeichen. Das Carriage-Return-Zeichen hat den ASCII-Code 13 und das Line-Feed-Zeichen den ASCII-Code 10. Beide zusammen werden von Quicken, dem Windows-Editor und praktisch jedem anderen Programm als Absatzende interpretiert.
Im Rumpf der While-Schleife befindet sich lediglich eine If-Abfrage, mit der das Carriage-Return-Zeichen überlesen wird. Alle anderen Zeichen werden dem Rückgabewert der Funktion, also der gelesenen Zeile, hinzugefügt. Falls gerade die gleiche Zeile wie in obigem Beispiel verarbeitet wird, gibt der Funktionsaufruf ZeileLesen die Zeichenfolge T-63,36 als Funktionswert zurück. Das Komma wird nun als Dezimal- und nicht mehr als Feldtrennzeichen behandelt.
Für die Durchführung des Importvorgangs muss der Anwender eine Möglichkeit haben, das Laufwerk, den Pfad und den Dateinamen der QIF-Datei einzugeben. In der Beispieldatenbank erfolgt die Eingabe über das Formular frmStart (siehe Bild 3). Es enthält das Kombinationsfeld txtDateiname, in das der Dateiname eingegeben oder aus einer Liste übernommen werden kann.
Bild 3: Eingabe von Laufwerk, Pfad und Dateiname der Importdatei
Das Formular ist bewusst ziemlich einfach gehalten. Um beispielsweise die Vorschlagsliste für QIF-Dateien zu ändern, müssen Sie in die Entwurfsansicht des Formulars wechseln. öffnen Sie das Eigenschaftenfenster des Steuerelements txtDateiname, und ergänzen Sie weitere Pfade in der Eigenschaft Datensatzherkunft.
Die Schaltfläche Schließen des Formulars wurde mit dem Befehlsschaltflächen-Assistent von Access erstellt. Bei einem Klick auf die Schaltfläche Starte Import wird folgende Anweisung ausgeführt:
QuickenImportieren (Me!txtDateiname)
Diese Anweisung ruft die Prozedur QuickenImportieren des Moduls modQuicken aus der Beispieldatenbank auf. Durch die Angabe des Parameters Me!txtDateiname wird der Prozedur der Inhalt des Feldes txtDateiname übergeben. Damit kann zu Beginn der Prozedur überprüft werden, ob die eingegebene Datei überhaupt existiert. Falls nicht, macht eine entsprechende Meldung darauf aufmerksam. Wenn die Textdatei gefunden wird, startet die Prozedur als erstes die Prozedur QIFLesen, welche die QIF-Datei in eine Access-Tabelle einliest.
Quellcode 2
Die Prozedur QIFLesen enthält in der Zeichenkettenvariablen sDateiname den vollständigen Pfad und den Dateinamen der QIF-Datei. Das zentrale Element der Prozedur ist eine Schleife, die die Textdatei zeilenweise liest, die Daten verarbeitet und das Ergebnis in der Tabelle tblDaten speichert.
Innerhalb der Schleife wird das Format der QIF-Datei genau analysiert. Die erste If-Anweisung prüft, ob die gelesene Zeile mit einem Ausrufungszeichen beginnt. Der Text !Type:Class startet in der QIF-Datei beispielsweise den Beginn eines Abschnitts mit einer Auflistung aller Klassen. Die Liste stimmt mit der Ansicht überein, die Sie in Quicken mit dem Befehl Listen ( Klassen öffnen können. Folgende Tabelle (Tab. 1) enthält eine übersicht der Abschnittsmarkierungen in der QIF-Datei.
Text |
Abschnitt |
!Type:Class |
Beginn einer Klassenliste. |
!Type:Cat |
Beginn einer Kategorienliste. |
!Option:AutoSwitch |
Kann ignoriert werden. |
!Account |
Beginn einer Kontenliste. |
!Clear:AutoSwitch |
Kann ignoriert werden. |
!Type:Bank |
Beginn eines Abschnitts mit Kontenbuchungen. |
!Type:Memorized |
Beginn eines Abschnitts mit gemerkten Buchungen. |
Tab. 1: Abschnittsmarkierungen
Die in diesem Kapitel besprochene Struktur von QIF-Dateien berücksichtigt nur einfache Buchungen auf Bankkonten. Die Besonderheiten von Splittbuchungen, MwSt-, Wertpapier- und anderen Konten werden hier nicht berücksichtigt. Falls Sie die Daten dieser Konten in Access importieren wollen, empfehlen wir Ihnen die Anpassung des beschriebenen Programms.
Jeder Abschnitt einer QIF-Datei ist durch eine individuelle Zusammensetzung von Feldern gekennzeichnet. Das erste Zeichen einer Zeile enthält jeweils den Feldnamen. Alle weiteren Zeichen bilden den Feldwert. So speichert beispielsweise die Zeile
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo