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

Excel 2016 VBA für Profis

Textdatei schreiben

Testen Sie unsere 2015 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

Ich habe hier in der Tabelle, schon eine Liste von zufällig gewählten Städtenamen, vorbereitet, die ich gerne in eine Textdatei exportieren möchte. Das könnte ich natürlich einfach mit "Datei speichern unter", oder "Textassistent" oder sowas machen, aber ich habe spezielle Anforderungen. Die können zum Beispiel dadurch entstehen, dass irgendein Serverprogramm sagt, ich brauche Daten in einer ganz bestimmten Reihenfolge und der geringste, gemeinsame Nenner sozusagen, ist eine Textdatei. Häufig im CSV-Format, das heißt zwar "Comma Separated Value", aber es ist oft auch mit Tabulator getrennt, oder mit Semikolon, oder sonst was. Und wenn Sie das per VBA exportieren, haben Sie jede Freiheit. Ich werde also jetzt mit Alt+F11 in den VBA-Editor wechseln, mir ein neues Modul anlegen und das schonmal als "Mod Export" benennen und schreibe darin eine Prozedur "Sub TextExportieren ()". Die Technik dahinter ist auf sehr niedrigem Level, kommt sozusagen aus der Steinzeit der Programmierung. Sie werden dort also nicht Klassenstrukturen entdecken mit Objektpunkt, Unterobjektpunkt, Eigenschaft oder sowas, oder Objektpunktmethode. Sondern das wird wirklich in hintereinander folgenden Befehlen, in Zeichenketten fast funktionieren. Als Erstes braucht es einen Kanal. Ich werde also eine Variable brauchen, "dim lngKanal" weil der theoretisch eine Long-Zahl sein kann. Faktisch entdecke ich in jedem anderen Code praktisch immer, dass diese Kanalnummer 1 ist. Da wird gar nicht geprüft, welcher Kanal frei ist, sondern gnadenlos eine 1 genommen. So unter uns... -- das funktioniert immer, bis Sie einen zweiten Kanal aufmachen. Deswegen will ich es einmal ordentlich machen. Also "lngKanal=", da gibt es extra eine Funktion "FreeFile", die mir die nächste, freie Kanalnummer zurückgibt. Es wird meistens funktionieren, aber die letzten 5 %, wo es dann vielleicht mal schief geht, da schreiben Sie sich gegenseitig die Dateien kaputt. Deswegen sollte man sich das gar nicht erst angewöhnen. Jetzt kommt der eigentliche Befehl, um die Datei zu erzeugen. Der heißt trotzdem "open", obwohl es nichts zu öffnen gibt. Da wird eine neue Datei angelegt, aber der gilt für alle drei Fälle. Dem übergebe ich erst eine Datei, inklusive Pfad. Und der einfachste Pfad ist, wenn ich die Datei in der ich gerade bin, mal frage "ThisWorkbook Path", wo denn ihr Pfad ist. Den gibt es garantiert, da brauche ich mir keine Sorgen zu machen. Da hänge ich dann den Dateinamen dran, aber nicht vergessen, einen Backslash dazwischen. Die "Path"-Eigenschaft hat nämlich keinen Backslash dran und Sie würden sozusagen statt eines Dateinamens, einen verlängerten Pfadnamen angeben. Die kann ich mir jetzt beliebig benennen, Hauptsache die Regeln der Dateinamen werden eingehalten und die nennen wir mal so, "Städte.txt". Das zusammen bildet also Datei- und Pfadnamen. Jetzt wieder ein Leerzeichen, "for output". Jetzt gebe ich die Methode an, mit der das geschrieben wird, da gibt es drei Varianten. Nämlich "Input", "Output" oder "Append" dranhängen. "For output" ist diejenige, die immer eine neue Datei erzeugt und zwar egal, ob es die schon gibt. Da wird nicht vorher freundlich nachgefragt, ob da vielleicht die Datei gelöscht werden sollte, sondern mit dieser Zeile ist die weg, falls es die schon gab. Und dann muss ich ihm sagen mit welcher Kanalnummer. Da kommt so ein komisches Doppelkreuz davor, damit klar erkennbar ist, das ist eine Zahl. Dieser Befehl hat also nicht die heutigen Strukturen mit Methoden und Eigenschaften, sondern steht schön hintereinander weg. Alles was zu tun ist. Jetzt kommt der Inhalt, den ich da reinschreiben kann. Auch das kommt noch so ein bisschen mittelalterlich rüber, es heißt nicht etwa "insert", oder sonst was, sondern "print". So als ob Sie eine Datei drucken würden und dann geben Sie wieder die Kanalnummer an und nach dem Komma, als zweiten Parameter, einen beliebigen Inhalt. Ich schreibe erstmal einfach "Hier geht es los" hin. Damit wären Sie praktisch fertig, aber Sie sollten auf jeden Fall, anders als sonst, wo man Variablen einfach so ein bisschen offen lassen kann. Die werden automatisch aufgeräumt. Sollten Sie auf jeden Fall den Kanal schließen. Anderenfalls würden Sie eine Datei finden, die zwar schon offen ist. Das macht diese Zeile. Aber die anschließend geschriebenen Daten sind noch nicht sichtbar, die stehen sozusagen noch in der Warteschlange. Also, falls Sie sich mal wundern, dass die Datei angeblich leer ist, schließen Sie den Kanal und danach werden Sie die Daten finden und weil das Ganze irre schnell geht und wenn man das normal als Benutzer startet, denkt: "Kann ja noch gar nichts passiert sein", dann würde ich noch eine Message-Box hinterher machen. Die sagt einfach, "Ich bin fertig." und das kann ein "vbInformation" werden und da haben wir noch ein paar schöne Konstanten. Also nennen wir ruhig den Namen, dessen jenigen, der das gemacht hat. Einmal "Speichern", einmal "Debuggen" "Kompilieren" und wenn ich das jetzt laufen lasse, einmal F5, dann sehen Sie hier eine Meldung, es ist gelaufen. Da stehen noch keine Städte drin, sondern nur ein einziger Satz, aber das muss ich mir jetzt auch erstmal angucken. Ich kann die Datei also einfach öffnen im Explorer, ziehe sie dann hier auf den Bildschirm und Sie sehen, da steht der Dateiname, hat alles geklappt. Hier steht der Inhalt. Achten Sie unbedingt darauf, dass Sie diese Datei auch schließen. Dem Editor beispielsweise ist es egal, nachdem er die geladen hat, ob die noch existiert, aber es gibt andere Programme, die blockieren die dann. Jetzt kommt der eigentliche Inhalt. Ich will ja die Städte reinschreiben. Das heißt, von der Selection, der Auswahl, die einzelnen Zellen angucken und das bedeutet, ich brauche eine neue Variable. Das ist eine "range"-Variable. (rng) "Zelle As Range". Und ich lasse das jetzt mal lose hier drinstehen. Da kommt jetzt eine "For Each"-Schleife. Also "For Each rngZelle", Einzelobjekt in Auflistung, nämlich in "Selection.". "Selection" ist wieder so ein unentschiedenes Objekt. Deswegen muss ich behaupten, dass es da eine "Cells"-Auflistung gibt und das "next" schon mal hingeschrieben. Jetzt kann ich für jede Zelle, deren Inhalt in beliebiger Form reinschreiben. Geht wieder mit "print #lngKanal" und jetzt kann ich zum Beispiel schreiben, "Adresse", für den Abstand das Leerzeichen innerhalb der Gänsefüßchen, verkettet mit "rngZelle.AdressLocal". Und ich kann die alle hintereinander wegschreiben, Mit einem Doppelpunkt getrennt in eine einzige Zeile, "rngZelle.Value", da steht dann der Städtename. Einfach "Speichern", "Debuggen" "Kompilieren" und mit F5 laufen lassen. Und dann guck ich es mir wieder an. Also im Explorer starten und falls Sie sich gerade wundern, warum nur eine Stadt drinsteht. Das liegt an der Selection, wenn ich jetzt also hier wieder wechsle, sehen Sie, es ist auch nur eine markiert. Jetzt, wenn sie alle markiert sind und ich dann mit F5 das durchlaufen lasse, dann finden Sie auch direkt alle Städte. Hat also wunderbar funktioniert. Ich kann jetzt das Trennzeichen hier nochmal anpassen. Viele Programme, die das getrennt lesen wollen, haben gerne ein bestimmtes Zeichen. Das ist häufig ein Tabulatorzeichen. Das wäre diese Konstante "vbTab". Und ganz zum Schluss können wir noch einmal "print lngKanal" reinschreiben. Alles fertig. Und wieder mit F5, waren alle markiert, alles super. Und wenn ich das jetzt anzeige, dann sehen Sie hier, das sieht man im Editor nicht so gut, aber spätestens, wenn ich mit den Cursortasten nach links, nach rechts gehe, sehen Sie, da ist ein "vbTab" dazwischen, ein Tab-Zeichen. Falls Sie das mal in Word laden, dann sehen Sie das bei Bedarf auch deutlich mit so einem kleinen Pfeil. Sie haben also mit dieser sehr grundlegenden Struktur, um Dateien zu schreiben, nämlich Textdateien, jede Möglichkeit, um zu beeinflussen, wie der Inhalt der Datei aussieht. Sie können wirklich jeden Buchstaben, jedes Trennzeichen einzeln bestimmen und genau angeben, was wo stehen soll.

Excel 2016 VBA für Profis

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

5 Std. 52 min (55 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.01.2017

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!