Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2013 VBA für Profis

Textdatei schreiben

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit Excel VBA können Sie beliebige Strukturen in Textdateien schreiben. Dadurch können Sie nicht nur komplizierte Exportformate erzeugen, an denen der Export-Assistent scheitert, sondern auch jederzeit Daten etwa als Fehlerprotokoll ablegen.

Transkript

Sie sehen, hier in dieser Tabelle schonmal notiert, ein paar Farben. Wobei die Inhalte völlig belanglos sind. Es geht mir nur darum, dass ich die exportieren möchte in, sagen wir mal, eine Textdatei. Das ist immer dann der Fall, wenn Sie beispielsweise Datenaustausch machen müssen mit ganz anderen Programmen, die nicht mal Excel-Formate lesen können. Excel ist ein sehr verbreitetes Austauschformat, häufig nur der alte Standard bis Excel 97, aber immerhin. Und trotzdem gibt es natürlich Programme, vor allem auf Großrechnern oder für spezielle Importe, die bestimmte Dateiformate haben müssen. Und das, was alle eigentlich können, ist eigentlich immer Textdatei. Das, was sich CSV nennt, Comma-Separated Value, selbst wenn die nicht mehr kommasepariert, mit Kommata getrennt sind, sondern häufig mit Semikolon oder mit Tabulator-Zeichen. Das, was ich jetzt machen möchte, ist, diese Dinger hier zu Fuß zu exportieren, nicht mit dem Assistenten. Der ist nett, der ist auch gar nicht so zu verachten, weil der vieles fertig liefert. Aber ich möchte ein ganz spezielles Format herstellen, zum Beispiel möchte ich die Zelladresse davor schreiben. Und dafür brauchen Sie VBA, eine eigene Programmierung. Also mit Alt+F11 in den VBA-Editor. Und ich lege mal hier direkt ein neues Modul an. Also in Modul2, das können wir vielleicht besser modExport nennen. Und dort gibt es jetzt eine Prozedur, die nenne ich einfach sub TextSchreiben, nicht unbedingt, weil sie einen Text schreibt, sondern weil sie in eine Textdatei hineinschreibt. Die wird also aus Zellen auslesen und in eine Datei hineinschreiben. Aus Zellen auslesen heißt praktisch automatisch, Sie werden so einen Range, einen Bereich brauchen, den ich jetzt mal einfach kurz rngZelle nenne. As, Datentyp, Range. Und wenn Sie in eine Textdatei hineinschreiben wollen, dann tauchen da plötzlich geradezu urtümliche Befehle auf, die noch mit Doppelkreuzen arbeiten und mit hintereinander gestellten Prozedurnamen. Also für diese spezielle, sehr rudimentäre Technik, wenn man das aus heutiger Sicht mit Methoden und abhängigen Klasseneigenschaften sieht, eine sehr urtümlich Technik, die in Kanälen denkt. Windows öffnet jede Datei in einem Kanal, der kann theoretisch bis in den Long-Bereich mit einer Nummer vergeben werden. Deswegen schreibe ich As Long. Tatsächlich sehe ich oft, dass der Kanal gnadenlos mit der Nummer 1 benutzt wird. Und der zweite den sie losschreiben auch mit der Nummer 1, der natürlich den ersten überschreibt. Anständigerweise fragt man Windows mal, ob es vielleicht mal eine freie Kanalnummer gibt. Das ist der Befehl beziehungsweise die Funktion FreeFile. Die gibt mit jetzt die Nummer des nächsten freien Kanals zurück und ich speichere mir die in lngKanal. So unter uns, die wird fast immer 1 sein. Nur wenn Sie mehrere parallel machen, könnte es mal eine 2 werden. Aber riskieren Sie nie, hartverdrahtete Nummern zu machen. Es könnte mal böse schiefgehen. Und dann schreiben Sie wirklich die Datei kaputt, die mit der Nummer 1 verbunden ist, ohne Rückwarnung. Jetzt habe ich eine Nummer, in die ich hineinschreiben kann. Jetzt muss ich sagen, was am anderen Ende auch von der Datei auftauchen soll. Und das ist dieser Befehl, der so ein bisschen zusammengesetzt ist. Der fängt erwartungsgemäß mit Open an. Ich mache eine Datei auf. Das wundert so ein bisschen, wenn ich sie jetzt erzeuge. Da kann ich nichts aufmachen. Aber das werden Sie gleich sehen, die heißt trotzdem Open. Und dann schreibe ich die Datei in das gleiche Verzeichnis, wo auch meine eigene Datei steht. Das ist immer das sicherste. Wenn diese Datei in einem Pfad gespeichert ist, muss es den geben. Dann fragen wir doch mal jemanden, der was von diesem Pfad versteht. Und ThisWorkbook, das ist die VBA-Formulierung dessen, was hier als DieseArbeitsmappe steht. ThisWorkbook ist das Objekt, in dem Sie gerade programmieren. Das ist DieseArbeitsmappe, nicht die aktive notwendigerweise, sondern die Code-Arbeitsmappe. Und die kennt eine Eigenschaft Path. Und die kann ich verketten mit meinem gewünschten Dateinamen. Achtung, da ist immer kein Backslash dran. Den müssen Sie also noch selbst setzen, sonst würden Sie theoretisch den Pfad in seinem Namen verlängern. Und dann sage ich mal, wie ich mir die vorstelle. Die soll bitte schön jetzt heißen: Z&T_Beispiel, ein B reicht, und .txt. An dieser Stelle vergebe ich also wirklich einen neuen Dateinamen. Dass diese Datei neu ist, weiß noch niemand. Das kommt jetzt erst. Jetzt schreibe ich nämlich: for output. Das bedeutet, sie wird neu angelegt, und zwar ziemlich gnadenlos. Wenn es die gibt, wird die trotzdem neu angelegt. Es gibt noch for input und for append, dranhängen. Das heißt, Sie können auch an bereits bestehende Daten, Textdateien vor allem, noch Daten dranhängen. For output heißt immer, sie wird neu angelegt. Und da muss ich jetzt natürlich noch sagen, mit welcher Dateinummer verbunden. Das schreibt sich so ein bisschen eigenwillig mit diesem Doppelkreuz. Also das ist dieser Befehl, von dem ich eben sagte, der ist ganz anders als heutige Klassen mit Punkt und Eigenschaften. Open, Datei- und Pfadnamen. Dann die Richtung, For Output, also schreibend, und zwar neu und dann unter welcher Kanalnummer. Und jetzt kann ich in diesen Kanal hineinschreiben. Excel weiß jetzt, beziehungsweise der VBA-Compiler, was am anderen Ende ist. Und der Befehl heißt interessanterweise Print. Auch das kommt noch aus alten Zeiten, wo man mehr das Gefühl hatte, auf dem Bildschirm zu drucken. Da muss ich sagen, in welchen Kanal. Ich kann ja gleichzeitig mehrere Dateien befüllen, wenn es sein muss. Und dann nach dem Komma, als zweites Argument, der Inhalt. Zum Beispiel erstmal: "Hier geht es los!" Und das können wir ruhig erstmal so lassen. Dann steht in dieser Datei ein einziger Inhalt. Und irgendwann, wenn ich mit meinen Schreibaktionen fertig bin, muss ich, das ist nicht sollte, sondern muss ich diese Datei, oder besser gesagt diesen Kanal, auch schließen Und zwar schlicht deshalb: Wenn Sie das noch nicht gemacht haben, hat Windows das noch nicht aktualisiert, und Sie können die Datei zwar schon öffnen, aber sie ist leer. Das ist immer enttäuschend, wo man denkt: Hat das irgendwie nicht geklappt? Aber tatsächlich ist der Inhalt schon da, nur Windows hat ihn noch nicht übertragen. Und damit, weil das jetzt extrem schnell geht und man nichts davon sieht, damit man auch eine Idee hat, dass es jetzt fertig ist, kann ich dazuschreiben: MsgBox "Alles exportiert!" Das darf noch ein vbInformation kriegen. Und damit man sieht, wer es war, diese zentralen Konstanten, sodass ich also oben sehen kann, aha, das war nicht Excel selber, sondern meine eigene Programmierung. Damit ist alles so weit vorbereitet. Jetzt kann ich mal gucken, ob es funktioniert. Also zuerst immer Debug-Kompilier-Check. Wenn keine Rückmeldung kommt, ist alles in Ordnung. Und dann mit F5 mutig gestartet, Die Meldung ist da, ist also alles durchgelaufen. Jetzt müssen wir nur gucken, ob denn auch ein Inhalt da ist. Wenn ich also die Datei öffne und mal hier in den Bildschirm ziehe, dann sehen Sie, hat alles geklappt. Da steht der richtige Dateiname, da ist der Inhalt. So weit, so gut, technisch funktioniert alles Äußere, jetzt kommt der eigentliche Inhalt. Wir müssen eine Selection durcharbeiten. Mein Benutzer darf irgendwas markieren. Dann muss ich das als fiktiver Benutzer auch natürlich auch mal machen, sonst würde nur die Zelle mit "rot" exportiert. Also das, was hier markiert wird, möchte ich exportieren. Und das bedeutet, hier nach diesem ersten Print, ich lasse das mal drinstehen, muss jetzt in einer Schleife über alle diese Zellen, der Inhalt ausgelesen und geschrieben werden. Das; mache ich ruhig mal ein bisschen Abstand; ist eine For-Each-Schleife, Also: for each rngZelle in selection.cells. Selection ist so ein unspezifisches Objekt, das da nicht anbietet, welche Fähigkeiten er hat, aber davon werden Sie nicht viele brauchen. Also cells, eine Einzelzelle aus der Auswahl. Können Sie sich drauf verlassen, dass es die gibt. Und dann das next. Und für jede Zelle, die ich jetzt dadrin angesprungen habe, kann ich einfach sagen: Print in diesen Kanal, wie oben schon gesehen. Und jetzt einen beliebigen Text. Ich setze den mal zusammen aus dem Wort Adresse sowie von der rngZelle die AddressLocal, also die "$A$1" oder sowas Angabe, wiederum verkettet mit Doppelpunkt, Leerzeichen, und verkettet mit dem eigentlichen Inhalt: rngZelle.Value. Und wenn Sie wollen, können Sie zum Schluss in die Datei auch noch schreiben, dass es komplett ist. Also ich schreiben da mal ein ganz liebloses "Fertig." Es ist also nur der innere Teil dazugekommen, eine Schleife über alle Sachen, die ich exportieren will. Dann kann ich persönlich bestimmen, was da jetzt geschrieben wird. Und da sollten Sie aber drauf achten, dass die Datei vorher geschlossen ist. Sonst haben Sie eine geöffnete Datei, die es gar nicht mehr gibt. Also in diese gleiche Datei nochmal hineinschreiben mit F5. Hat alles geklappt. Und jetzt gucken wir nochmal, was angekommen ist. Also mit Doppelklick öffnen, und Sie sehen hier, der Startext, er war ja vorher auch schonmal drin. Hier die beliebigen Inhalte und da die Meldung, dass es fertig ist. Das Ganze geht irre schnell, auch bei großen Textmengen, wenn Sie das mal probieren. Deswegen mache ich immer ganz gern eine Meldung hinterher, weil sonst ein normaler Benutzer denkt: "Na ja, kann ja noch gar nichts passiert sein", und noch 30 Mal auf den Knopf drückt in der Hoffnung, irgendeine Reaktion zu kriegen.

Excel 2013 VBA für Profis

Nutzen Sie die Möglichkeiten der Programmiersprache VBA in Excel 2013, um eigene Dialoge zu erstellen, auf andere Arbeitsmappen zuzugreifen und wichtige Funktionen einzusetzen.

4 Std. 59 min (53 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!