Excel 2013 VBA Grundkurs

Inhalte schreiben

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Namen aller vorhandenen Tabellen werden ausgelesen und untereinander im Inhaltsverzeichnis eingetragen. Dieses lässt sich somit als Deckblatt für die Datei nutzen.

Transkript

Nachdem es nun möglich ist eine Datei zu öffnen und in dieser sicherzustellen, dass es ein Tabellenblatt "Inhaltsverzeichnis" gibt, möchte ich dort auch das eigentliche Inhaltsverzeichnis hineinschrieben. Das heißt, ich beginne mit einer Prozedur, die nenne ich Sub InhalteSchreiben. Die wird auf ein Tabellenblatt zugreifen, welches das Inhaltsverzeichnis enthalten soll. Das können wir schon mal in einer Worksheet-Variablen speichern, die also Dim wksInhalt heißt, As Worksheet. Außerdem muss ich die anderen enthaltenden Worksheets angucken und deren Namen z.B. Das heißt, es gibt wieder so ein Dim wksDieses As Worksheet. Damit ich den Namen "Inhaltsverzeichnis" nicht falsch schreibe, müsste ich jetzt eigentlich schon wieder die Konstante aufrufen. Das ist natürlich Quatsch, die ist lokal deklariert gewesen. Also, gucken wir lieber direkt nach. Hier, diese Konstante, die werde ich zuerst umbenennen mit Bearbeiten Ersetzen oder Strg + H. Und die wird heißen p_cstrInhalt. Ich werde die in dieser Prozedur komplett ersetzen und anschließend hier rausschneiden, mit Strg + X ausschneiden und in dem Modul modVarKonstDLL - dafür ist es ja gedacht - hinterlegen. Aber natürlich muss es hier Public heißen. So, damit ist es öffentlich und sollte hier funktionieren. Ich mache mal sicherheitshalber mit Debug Kompilieren einen Check. Alles is gut, die sind erkannt, und kann jetzt hier weiter arbeiten. Es gibt also diese Konstante, sie steht mir direkt zur Verfügung. Und ich kann nun das WorksheetInhalt direkt zuweisen. Es muss sich in dem ActiveWorkbook befinden, dafür werde ich vorher gesorgt haben. Und es ist eins von den Worksheets, und zwar das, was p_cstrInhalt heißt. Damit bin ich sicher, dass das, was in dem anderen Modul als Worksheet angelegt wurde, als Tabelle auch gleich heißt, wie das, was ich jetzt hier suche. Jetzt will ich For Each wksDieses in der Liste aller Worksheets von dieser Arbeitsmappe. Also, von ActiveWorkbook.Worksheets, und Next nicht vergessen. Da sind natürlich nicht nur die übrigen Tabellen enthalten, sondern auch die eine, die "Inhalt" heißt. Deswegen muss ich die erstmal außen vor lassen. Also, If LCase, nicht vergessen, das es in Kleinbuchstaben umgewandelt wird. wksDieses.Name, wenn also der Name von der Tabelle, die da gerade im Zugriff ist, ungleich meiner Konstanten ist, p_cstrInhalt, dann will ich überhaupt nur was machen. Andernfalls wird die ignoriert, das trifft also das Inhaltsverzeichnis selber, das soll nicht in sein eigenes Inhaltsverzeichnis aufgenommen werden. Wenn das der Fall ist, will ich in das Inhaltsverzeichnis in das Blatt schreiben, also wksInhalt.Cells. Und dort möchte ich jetzt ausgehend von A1 untereinander alle Daten hineinschreiben, die Namen der übrigen Tabellen. Da habe ich jetzt erstmal ein kleines Problem. Ich kann natürlich die Zelle A1 angeben, das ist so, das machen wir erstmal: .Value ist gleich dem Namen der gerade aktuellen Tabelle, oder dem Namen, der gerade mit wksDieses bearbeitet wird. Aber das würde jetzt immer in die Zelle A1 schreiben. Ich brauche also, weil die For/Each-Schleife das ja nicht selbständig hat, einen Zähler. Integer reicht. Es können in Excel nur 255 Tabellen enthalten sein. Also, würden wir sogar mit Byte hinkommen. Aber ich nehme aus Gewohnheit immer Integer. Also, die Zeile, in der das hineinschreiben soll, wird eine Integer-Variable kriegen. Und die wird erstmal sicherheitshalber auf 1 gesetzt, denn die erste Zelle oben links hat die Zeile 1, und nicht, wie es nach der frischen Deklaration wäre, eine Null. Und jetzt kann ich nämlich hier statt der Zeile, die hier vermerkt ist, die Integer-Variable benutzen. Ich sollte nur darauf achten, dass sie auch gelegentlich hoch gezählt wird. Also, intZeile=intZeile+1. Die wird also jedes Mal, und zwar nur dann, wenn es ein gültiger Treffer ist, erhöht. Ja, und damit sind wir eigentlich soweit fertig. Wenn denn in der aktiven Arbeitsmappe überhaupt ein Inhaltsverzeichnis existiert. Wenn ich jetzt hier nachgucke, stelle ich erstmal fest: es existiert gar keins. Am besten, mache ich eine andere Datei auf. Also, gucken wir mal einfach eben in Excel: Datei Öffnen auf dem Computer, auf Z: - und dort die "Besipieldatei". Die enthält noch keine Tabelle für das Inhaltsverzeichnis, aber da habe ich ja ein wunderschönes Makro. Also, mit Alt + F11 in "Inhaltsverzeichnis" - kann ich hier einfach mit F5 mal eben laufen lassen. Und dann sehen Sie: hier ist jetzt die Tabelle für das Inhaltsverzeichnis vorhanden. Jetzt kommt mein zweites Makro - dieses Fenster hier kann ich mit Strg + F4 einfach zumachen - welches Inhalte schreibt. Einfach F5 drücken und dann gucken wir mal nach, Alt + F11 - was da erschienen ist. Hier ist natürlich nicht besonders viel los, außer der "Tabelle1". Ich muss also einfach erstmal ein paar Tabellen erzeugen, damit man den Erfolg sieht. Im "Inhaltsverzeichnis" lösche ich mal wieder das, was in A1 steht. Und starte jetzt erneut mit F5 dieses Makro und nach Wechsel zu der Tabelle sehen Sie jetzt, dass tatsächlich hier alle Inhalte angekommen sind. Das Makro funktioniert, allerdings lässt es sich noch klein bisschen abrunden. Und zwar indem ich alles andere einfach zusammen aufrufe. Also, Sub AllesZusammenFuerInhaltsverzeichnis nenne ich das mal sehr langatmig. Das bedeutet: ich muss möglicherweise eine Datei öffnen. Das war mein erstes Makro. Dann muss ich darin das Inhaltsverzeichnis vorbereiten. Und schließlich Inhalte schreiben. Wenn Sie nicht sicher sind, ob Sie die richtige Prozedur erwischt haben, dann können Sie hier auch draufklicken und per Rechtsklick auf Definition wechseln, was da leider fehlt - ist ein Tastenkürzel. Stattdessen geht es nämlich auch mit Umschalt + F2. Dann springen Sie jeweils in diese Prozedur. Das ist zum Suchen relativ schnell, vor allem, wenn man wie hier eigene Prozeduren zusammenfasst. Ich mache dieses Fenster mal wieder zu. Also, anstatt das hier alles nacheinander aufzurufen, habe ich das jetzt hier zusammengefasst. Bevor ich das ausführe, muss ich allerdings noch dafür sorgen, dass diese "Beispieldatei" in Excel jetzt geschlossen ist. Die werde ich mal nicht speichern. Und dann kann ich von hier aus mit F5 das komplett ablaufen lassen. Also, erst eine Datei öffnen, dann wird dort automatisch das Tabellenblatt "Inhaltsverzeichnis" angelegt und auch direkt reingeschrieben. Wie Sie jetzt direkt sehen, mit Alt + F11, es ist noch die ursprüngliche ungespeicherte "Beispieldatei", die ja nicht besonders viele Inhalte hatte. Aber es hat alles funktioniert. Damit ist dieses Makro soweit fertig. Es kann die Inhalte ermitteln, das können Sie nach Belieben noch erweitern, und hier auch alle Aktionen in einem Aufwasch sozusagen erledigen.

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!