Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Excel 2013 VBA für Profis

Textdatei lesen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Textdateien lassen sich mit VBA zeilenweise in Variablen importieren, die Sie anschließend nach Belieben weiterverarbeiten können.

Transkript

Zu der Fähigkeit, einen Text zu schreiben in eine Textdatei und diese zu löschen, gehört natürlich als drittes Element auch, einen Text aus einer Textdatei lesen zu können. Das will ich direkt mal davor schreiben, und zwar deswegen, weil es dem TextSchreiben durchaus ähnelt. Also: sub TextLesen. Technisch könnten Sie auch beliebige Daten lesen, dann müssen Sie nur das Format verstehen. Also auch wenn ich jetzt TextLesen schreibe, ist es nicht auf reine ASCII-Texte beschränkt, aber der Aufwand für frei formatierte Texte ist erheblich höher. Dazu brauchen wir erstmal einen Text. Ich habe hier schonmal vorbereitet ganz schlicht De Bello Gallico, also zumindest die ersten Teile. Jeder Satz bildet hier auch in der Textdatei eine einzelne Zeile. Das wirkt anders, wenn Sie einen Zeilenumbruch machen. Aber mit dem Punkt endet wirklich die Zeile. Es entspricht also so eher der Wahrheit dessen, was Ihr VBA sieht. Weil die Zeilen sehr lang sind, will ich die beim Import natürlich kürzen. Ich sage mal so, die ersten 20 Zeichen soll reichen. Nur so dass Sie eine Idee davon kriegen und das nicht in völliger Länge importieren müssen. Die Datei ist da, den Namen habe ich jetzt auch schon bereit. Dann kann es eigentlich auch losgehen. Wenn ich denn wüsste, wo ich es hinschreiben möchte. Dazu gucken wir am besten in die Excel-Datei. Sagen wir hier eine Tabelle4, die ist leer. Dann schreibe ich da, Zelle A1, was rein. Und jetzt kann es dann wirklich losgehen. Es beginnt mit einem Kanal wie beim Schreiben, also dem lngKanal As Long. Und das können wir eigentlich von hier schon hochkopieren. Auch diesen Kanal sollte man erfragen. Und die Daten, die ich einlese, werden vorübergehend in eine Variable, in dem Fall eine String-Variable geschrieben, die brauche ich also auch noch. Dim strZeile As String, nämlich zeilenweise. Und so wie es hier ein Open und so weiter For Output gibt, brauche ich jetzt dasselbe For Input. Wir können also diese Zeile zu weiten Teilen auch kopieren und dort reinschreiben. Das, was sich ändert, ist, aus Output wird Input. Ich hole mir also Daten. Und natürlich ändert sich der Name. Da hatte ich Z&T_DeBelloGallico als Textdatei schon bereitgestellt. Und jetzt lese ich zeilenweise ein. Anders als hier, wo ich schon weiß, wie viele Zeilen kommen, nämlich so viele wie ich Zellen in der Selection habe, kann ich das bei einer Textdatei nicht abfragen. Um wirklich Zeilen in einer Textdatei zu lesen, müssen Sie diese öffnen, zeilenweise angucken, und am Ergebnis mitgezählt haben. Das ist natürlich Quatsch. Ich mache jetzt einfach so lang, wie noch Zeilen da sind. Also: Do Until EOF, "end of file". Und dann muss ich sagen, welcher File, das ist nicht wirklich ein File, eine Datei, sondern das ist die Kanalnummer. Also auf Deutsch: Mach so lange, wie überhaupt noch Daten, Zeilen aus diesem Kanal kommen und das das Loop drum rum. Das bedeutet, es wird jetzt zeilenweise ausgelesen, und zwar mit dem Befehl Input, der entsprechend dem Print-Befehl, nur eben umgekehrt die Kanalnummer wissen möchte und dann einen Parameter besitzt, für den ich diese String-Variable brauchte. Das kam bisher noch nicht vor. Das ist ein sogenannter Rückgabe-Parameter. Das heißt, nicht beim Programmieren gebe ich Daten hinein, sondern ich stelle ihn leer zur Verfügung und die Funktion, oder in diesem Fall die Methode schreibt dort Daten zurück. Und die kann ich mir später abholen. Ich könnte ganz schlicht ein Debug.Print machen im ersten Anlauf und strZeile, oder das können wir schonmal verbessern, Left von, ich hatte, glaube ich gesagt, 20 Zeichen. Also drucke unten in diesem Debug-Fenster von diesem Ergebnis die ersten 20 Zeichen aus. Dieses Debug-Fenster müssen wir natürlich erstmal einblenden. Ansicht Direktfenster Es ist im Moment leer. Und sollten aber trotzdem nicht hier vergessen, den Kanal auch wieder zuzumachen. Dass eine Meldung für den Import nötig ist, glaube ich nicht, denn man sieht anschließend das, was importiert worden ist. Also einmal speichern. Und dann mit F5 sehen Sie jetzt, hier sind die ersten 20 Zeichen von den ganzen Zeilen reingeschrieben worden. Hat also so weit erstmal funktioniert. Ich lösche das hier. Mit Strg+A kann man alles markieren und dann entfernen. Ich will es ja nicht in den Direktbereich reinschreiben. Das können wir also hier kommentieren. Sondern ich will in die Zelle reinschreiben, und zwar natürlich untereinander. Da gibt es verschiedene Techniken. Ich benutze jetzt mal die einfachste sozusagen. Ich greife gezielt auf die Tabelle4 zu, die tatsächlich intern hier Tabelle7 heißt. Ich werde die mal umbenennen, sonst bringt einen das durcheinander. Also hier werde ich mit Umbenennen Caesar reinschreiben, und dann sehen Sie es deutlicher. Die Tabelle, die Caesar heißt, heißt intern eigentlich Tabelle7. Und wenn ich die markiere, werde ich die jetzt auch vernünftig benennen als tabCaesar. Das ist der interne Programmiername. Dieses ist der Namen, den der Benutzer sieht. Das ist der Programmiername, der Objektname. Die sind häufig identisch, außer wenn Sie anfangen, die umzubenennen. Und dann ist es eigentlich nur konsequent, dass man die auch richtig umbenennt. Und jetzt kann ich nämlich hier einfach reinschreiben. Ich möchte gern in tabCaesar in die Zelle, und jetzt gebe ich Row und Column, Zeile und Spalte an. Nämlich 1, 1; das ist die Zelle A1. Und deren Value will ich schreiben, und das soll sein, was wir eben schon gesehen hatten, die ersten 20 Zeichen, also die Left-Funktion. Der Haken ist jetzt, im Moment ist es immer nur die Zelle A1. Ich würde also laufend in die gleiche Zelle reinschreiben. Deswegen brauche ich noch eine Variable. Dim lngZeile As Long, die am Anfang einmal auf 1 gestellt wird, damit ich in Zeile 1 anfangen kann; und nach jedem Schreiben mit lngZeile=lngZeile+1 erhöht wird. Und hier, muss ich eben nochmal mit dem Komma nachgucken, Row und Column, also hier die Row, die Zeile ändert nämlich lngZeile. Der schreibt also in 1,1. Das ist A1. Dann schreibt er in 1,2. Das ist A2. Und so weiter. Und jetzt sollte ich, wir könnten einmal vorher nochmal nachgucken. Die Tabelle Caesar ist leer. Und kann anschließend, hier wenn ich das laufen lasse nach dem Speichern, alle Inhalte finden, einmal F5, nachgucken, und Sie sehen jetzt hier die erste Spalte, so weit wie ich Zeilen habe, einfach untereinander geschrieben alle Inhalte. Das kann man insgesamt natürlich noch schöner machen. Ich sollte aber hier einfach nur die Technik zeigen. Die grundsätzliche Technik ist sehr ähnlich dem Schreiben. Wir brauchen einen Kanal, wir brauchen so einen Open-Befehl. Aber, anders als beim Schreiben, bestimmen Sie nicht aus der Programmierung, wie viele Zeile kommen, sondern Sie müssen nehmen, was kommt. Das heißt, diese Do-Loop-Schleife, die prüft, solange das Dateiende noch nicht erreicht wird, Dateiende im Englischen "end of file" und bezieht sich dann auf den Kanal. Und dann kriegen Sie mit dem Input-Befehl aus dem Kanal eine String-Variable gefüllt. Und mit der können Sie dann weiterarbeiten, das ist immer die gesamte Zeile. Die kann sehr viel an Text aufnehmen. Diese Zeilen könnten ja länger sein, als man so denkt. Aber die String-Variablen dürfen bis 2 Milliarden Zeichen aufnehmen, wohlgemerkt eine einzige Zeile hier. Da ist also genug Reserve und die können Sie dann verarbeiten, so wie Sie wollen.

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!