Excel 2013 VBA Grundkurs

Workbooks

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Arbeitsmappen lassen sich per VBA neu anlegen oder aus einer vorhandenen Datei öffnen. Sie dürfen dabei dem Benutzer auch die freie Wahl der Datei überlassen, indem Sie den Windows-Datei-Öffnen-Dialog nutzen.

Transkript

Wenn es darum geht auf Daten zuzugreifen, die in Tabellen von Arbeitsmappen stehen, dann muss man sich natürlich erstmal mit der Arbeitsmappe-Ansicht beschäftigen. Ich sage jetzt mal vorsichtshalber Arbeitsmappe und nicht Datei, auch wenn das Gefühl das gleiche ist. Eine Datei kann auch geschlossen sein. Eine Arbeitsmappe ist immer nur eine geöffnete Datei. Also, Arbeitsmappen, die Workbooks-Auflistung enthalten nur bereits in Excel geöffnete Dateien. Dann lassen wir uns doch vielleicht mal den Namen der aktiven Arbeitsmappe ausgeben. NameDerAktivenArbeitsmappe. Den weiß ich zwar schon, den der steht ja da oben. Aber Sie sollen ja sehen, wie es programmiertechnisch geht. Also, z.B. mit Debug.Print. Und da könnte ich jetzt hier von ActiveWorkbook den Name ausgeben. Das ganze speichern und mit F5 starten. Dann sehen Sie da unten, wie versprochen, den Namen, der auch da oben schon steht. Nun weiß die Arbeitsmappe mehr von sich, als nur den Namen. Sie weiß z.B. auch den kompletten Namen, mit Pfad und den Pfad alleine, je nachdem was Sie brauchen. Das wäre jetzt lästig immer wieder hier ActiveWorkbook hinzuschreiben, selbst wenn das im Moment relativ kurz ist. Deswegen werde ich das mit dieser With-Schreibweise jetzt schon mal extrahieren. Also, in die Zwischenablage, ausschneiden, With und am Ende ein End With. Falls Sie sich gerade gewundert haben, warum ich hier so weit am Anfang schreibe. Jetzt markiere ich diesen Block und mit der Tab-Taste kann das komplett eingerückt werden. Und wenn Sie es mal brauchen, mit Umschalt + Tab wieder zurück. Also, in der ersten Zeile soll der Name stehen. In der zweiten - der Pfad. Sie beginnen, wie gewohnt, mit dem Punkt, auch wenn das Objekt oberhalb steht. Und es gibt eine eigene Eigenschaft Path. Und es gibt sogar eine Eigenschaft, die alle zusammen liefert, Debug.Print, nämlich den FullName. Sie werden sehen, dass das ein ganz feiner Unterschied ist, der ist aber entscheidend. Es ist nicht einfach Path und Name zusammen. Also, wenn wir das mit F5 starten und Sie gucken genau. Zufällig liegt diese Datei nämlich im Route eines Laufwerks, also nicht in einem Unterverzeichnis. Das bedeutet, der Path ist Z: Aber zusammengesetzt muss man schreiben Z:\ Der ist schon mit drin. Also, der Name, der Path und so kann man die schön kompakt miteinander programmieren. Dann werde ich da unten gleich wieder aufräumen und mal eine neue Arbeitsmappe machen. Es gibt zwei Neu. Das Eine ist richtig neu, das kennen Sie immer so als Mappe1, Mappe2 oder sowas. Und das Andere ist neu aus vorhandener Datei, das ist ein Öffnen. Aber auf dem Bildschirm oder in der Auflistung der Workbooks ist es jeweils ein neues Objekt. Also, fangen wir zuerst an mit dem richtigen Neu: Sub NeueArbeitsmappeAnlegen. Das geht völlig banal: Workbooks, die Auflistung hat eine Add-Methode. Das war es schon. Dann haben Sie ein neues Element. Tatsächlich, wenn Sie jetzt das Leerzeichen drücken, gibt es noch einen optionalen Parameter, der Ihnen erlaubt eine Vorlage zu benutzen. Dort würden Sie dann in Gänsefüßchen Pfad und Dateinamen angeben. Spare ich mir, so gesehen, bin ich fertig. Und damit ich sehe, dass auch alles angekommen ist, frage ich anschließend nach dem ActiveWorkbook natürlich und dessen Name-Eigenschaft. Der wird sowas heißen, wie Mappe1, 2, 3, je nachdem was Sie schon alles probiert haben. Sicherheitshalber vorher speichern. Einmal F5. Sie haben es kurz blitzen gesehen, da wird die Datei geöffnet. Und da unten steht jetzt welche das ist, nämlich "Mappe2". Beim nächsten Mal steht da "Mappe3" usw. Das funktioniert, aber würde ich mir gar nicht erst angewöhnen. Sie haben Recht, nachdem mit Add ein Workbook hinzugefügt worden ist, ist es direkt danach immer ActiveWorkbook. Trotzdem würde ich das so nicht programmieren. Es geht besser, anständig sozusagen. Das kostet Ihnen eine Zeile mehr, aber das ist es wert, spätestens wenn Sie darauf zugreifen wollen. Erstmal muss ich es natürlich umbenennen. Der feine Unterschied ist, ich lege mir eine Objekt-Variable an. Also, Dim, es kommt ein Workbook, eins was neu ist, As und deswegen ist es auch vom Datentyp Workbook. Eine neue Arbeitsmappe passt in diesen Datentyp hinein. Und deswegen kann ich hier schön Set wbkNeu gleich Workbooks.Add schreiben. Und damit man deutlicher sieht, dass es sich um eine Methode mit einem Rückgabewert handelt, schreibe ich die so, als sei sie eine Function. Methoden und Eigenschaften sind der modernere Teil zu dem, was Sie als Sub und Function kennengelernt haben. Sub und Function sind noch sehr pingelig. Eine Sub gibt keinen Wert zurück, eine Function gibt einen Wert zurück. Jetzt sehen Sie gerade, die Methode Add hatte vorher keinen Wert zurückgegeben, da. Und jetzt werden Sie feststellen, gibt sie einen Wert zurück, nämlich das geöffnete Workbook. Deswegen greife ich hier auch nicht auf ActiveWorkbook, sondern auf wbkNeu zurück. Dann bin ich sicher, dass ich genau dieses habe. Ich kann ja z.B. zehn Dateien gleichzeitig öffnen und dann wäre nur die letzte, nämlich nacheinander geöffneten, nur die letzte das ActiveWorkbook. So würde ich mir zehn Variablen machen, genauer gesagt ein Array aus zehn Variablen. Und hätte dann jede von denen im Zugriff, auch wenn ich mehrere öffne. Also, ein bisschen mehr Aufwand, damit es in einer Variablen steht. Und deswegen kennzeichne ich diese Methode auch, dass sie einen Rückgabewert hat. Haben, übrigens, alle Methoden, nur der wird normalerweise ignoriert, wie da oben. Und es sollte zum gleichen Ergebnis kommen. Also, mit F5. Dieses Mal natürlich "Mappe3". Das ist es wert, das kleine bisschen mehr Aufwand, denn so werden Sie früher oder später sowieso arbeiten. Es geht weiter nach dem Neuanlegen einer Arbeitsmappe mit dem Öffnen einer vorhandenen. Und ich sage schon mal Sub BestimmteArbeitsmappeOeffnen. Nie Umlaute in Namen von Prozeduren benutzen, es gibt nur Ärger irgendwann. Ist erlaubt, aber trotzdem riskant. Ich werde also eine bestimmte Arbeitsmappe öffnen. Auch die wieder wie bisher Dim wbk, ich nenne die Oeffnen As Workbook. Sie merken, das ist so schnell geschrieben. Also, der Aufwand ist nicht das Argument. Set wbkOeffnen ist gleich. Und dann kennt die Workbooks-Auflistung, Punkt, eine Methode Open. Nicht nur Add, das ist der Neue, sondern Open. Klammer auf, und deren einzig zwingendes... Die anderen sind alle optional. ...einzig zwingendes Argument ist eins, das heißt zwar Filename, ist aber korrekterweise mit Path and Filename zu befüllen. Der Path, der Pfad, wo es herkommt, ist ganz banal. Da nehme ich meinen eigenen. Die Datei, die ich gleich öffnen will, liegt im gleichen Verzeichnis. Sicherheitshalber ThisWorkbook, da wo der Code drinsteht, .Path, verkettet mit. Sie erinnern sich, der Backslash fehlte. Und dann heißt die Datei, die habe ich schon vorbereitet, die ist aber ansonsten leer: Beispieldatei.xlsx, Gänsefüßchen zu, Klammer zu. Und damit ich beweisen kann sozusagen, dass sie auch offen ist und für mich im Zugriff, kann ich hier wbkOeffnen.Name im Debug-Bereich anzeigen. Einmal kurz speichern und mit F5 hier drin laufen lassen. Sie ist geöffnet und zeigt das nicht nur hier, sondern mit Alt + F11 sehen Sie es auch hier. Das ist gerade die aktive Datei, da steht wirklich nur der eine Text drin. Und ich schließe sie gleich wieder, damit sie mich nicht stört und kann mit Alt + F11 wieder zurückgehen. Also, das war eine Datei, deren Namen und Pfad ich schon weiß, die habe ich also hier. Sie können auch Z: schreiben, aber so ist es flexibler. Die habe ich also hier namentlich genannt. Es gibt aber auch Dateien, da darf Ihr Benutzer entscheiden, welche er nimmt. Und Sie gucken sich dann hinterher programmiertechnisch an. Da werde ich diese Prozedur einfach kopieren und entsprechend umbenennen. Die wird dann heißen BeliebigeArbeitsmappeOeffnen. Und dort brauche ich eine zweite Variable. Dim strDatei As String bedeutet, ich werde mir in einer Variablen merken, wo die Datei herkommt, und mich darauf beziehen. Ich gebe also den Dateinamen und Pfad nicht vor, sondern frage jetzt. strDatei ist eine harmlose String-Variable. Deswegen muss da kein Set davor, es ist kein Object. Und dafür gibt es den normalen Windows-Dialog zum Dateiöffnen. Der fühlt sich an, kann alles, sieht genauso aus wie der richtige Dateiöffnen-Dialog mit dem feinen Unterschied: er tut nichts. Der will nur spielen, sozusagen. Der macht alles und Sie können auch nachher auf Öffnen klicken, aber er öffnet die Datei nicht wirklich. Dafür sind Sie im Programm selber zuständig. Der ist ein bisschen versteckt, der ist auch einer von den ganz wenigen Befehlen, wo Sie wirklich Application Punkt davor schreiben müssen. Alle anderen, die sich auf Application beziehen, kann man sonst weglassen. Den gibt es auch nur in Excel so fertig. Der heißt GetOpenFilename, "hole mir einen Dateinamen zum Öffnen", Klammer auf. Und kann jetzt noch alle möglichen Sachen, verschiedene Filter und Titel und allen Schnick und Schnack, brauchen wir nicht. Zur Not würden Sie MultiSelect auf False stellen. Und Sie sehen schon, optionale Argumente, die man übergeht, werden durch Komma gekennzeichnet. Und dann Klammer zu, einmal speichern. Und jetzt, wenn ich dieses aufrufe mit F5, sehe ich den richtigen regulären Dateiöffnen-Dialog. Und kann mir hier nach Herzenslust eine Datei aussuchen. Ich werde jetzt nicht diese öffnen, die ist nämlich schon offen. Kann mir eine beliebige Datei aussuchen als Benutzer und gehe hier auf Öffnen. Und ich glaube fest daran, dass sie geöffnet wird. In Wirklichkeit kriegt der VBA-Code nur den Namen und löst anschließend das Öffnen aus mit Workbooks.Open. Er könnte also zwischendurch den Dateinamen oder den Pfad angucken und sagen: "Nö, die will ich gar nicht öffnen". Mit Alt + F11 können wir jetzt nachgucken: da ist sie wieder. Hat also geklappt, können wir schließen und mit Alt + F11 wieder zurückgehen. Und Sie können sich natürlich auch auf eine bestehende Datei beziehen, eine, die schon geöffnet ist und in der Liste der Arbeitsmappen enthalten ist. Das ist das letzte Beispiel: Sub AufOffeneArbeitsmappeVerweisen. Dafür wäre es aber ganz hilfreich, wenn sie auch geöffnet ist. Ich nehme mal diese Datei hier, also mit F5 kann ich die schnell von hier aus öffnen. Das brauchen wir gerade nicht mehr. Und beziehe mich wieder auf ein Workbook. Also, Dim wbkOffen As Workbook. Und kann dann direkt sagen: "Es ist ja schon offen, hoffentlich". Set wbkOffen gleich meine Workbooks-Auflistung, und von der hätte ich gerne diejenige, die Beispieldatei.xlsx heißt, Gänsefüßchen, Klammer zu. Und kann dann schreiben: Debug.Print wbkOffen.Name, verkettet mit "ist"... Da darf man ein Leerzeichen für die Schönheit hin. ..."ist jetzt per VBA zugreifbar". Das klappt, wenn die Datei bereits offen ist, das ist sie. Also, mit F5, Sie sehen: ich kann darauf zugreifen. Es ist im wbkOffen-Objekt enthalten. Da geben Sie nicht den Pfad, sondern nur den Dateinamen an. Und wenn sie ungespeichert ist, steht da "Mappe1". Falls Sie diese Datei geschlossen haben. Ich werde sie mal schließen. Ein... sie war nicht geschlossen, dort, so. Und dann mit F5 dasselbe nochmal ausführen, dann gibt es eine Fehler-Meldung, die ein klein bisschen Nachdenken braucht. Das bedeutet nämlich in der Workbooks-Auflistung ist irgendwo ein Index mit diesem Namen nicht zu finden. Mit Fehlern brauchen wir uns im Moment nicht zu beschäftigen. Also, einfach auf Beenden. Damit das klappt, muss diese Datei bereits geöffnet sein.

Excel 2013 VBA Grundkurs

Holen Sie aus Excel 2013 mit der integrierten Programmiersprache VBA auch das letzte Quäntchen an Funktion heraus und lassen Sie sich dazu zeigen, was alles möglich ist.

6 Std. 18 min (63 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!