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

Excel 2016 VBA Grundkurs

Inhalte schreiben

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

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

Jetzt kommt für das Inhaltsverzeichnis der dritte Teil, der hier schon als Kommentar notiert ist. Ich werde also eine neue Prozedur erfinden. Die heißt "Sub InhaltsverzeichnisFuellen" Man darf das auch ein bisschen weniger episch machen, ein bisschen kürzer. Und das soll die eigentlichen Inhalte hineinschreiben. Dazu muss ich erstens das Blatt mit dem Inhaltsverzeichnis in der Hand haben, und alle Übrigen. Ich brauche also zwei Worksheet-Variablen. "dim wksInhalt as Worksheet" und "dim wksDieses as Worksheet". Das sind die übrigen, wodurch die ich mit einer Schleife durchlaufe. Das Inhaltsverzeichnis kann ich direkt zuweisen. "Set wks" - aber "s" natürlich - "Inhalt=" von ActiveWorkbook allen Worksheets. das ich schon in der Modul-öffentlichen Variable hinterlegt habe. Deswegen ist sie Modul-öffentlich, weil ich sie einige Male brauche. Und für die Übrigen mache ich jetzt eine "For Each"-Schleife. Also "For Each wksDieses" "in ActiveWorkbook.Worksheets" und "Next". Jetzt könnte ich direkt anfangen, die Namen auszulesen, aber ich kann Ihnen schon garantieren, einer der Namen ist dabei, den ich nicht haben will, nämlich das Inhaltsverzeichnis selber. Es gibt verschiedene Möglichkeiten, das abzufangen. Ich kann zum Beispiel den Namen vergleichen. So hatten wir das schon mal gemacht. Das kann ich da unten sogar rauskopieren. Das würde nämlich genauso funktionieren. Beides auf Lower Case gesetzt und "End If". Und dann müsste ich prüfen, dass er ungleich ist. Das funktioniert wunderbar, nur wenn er ungleich ist, übernehme ich den Namen und mache irgendwas. Es gilt als ein bisschen unelegant. Es ist auch um Bruchteile von Millisekunden langsamer. Die bessere Version sozusagen heißt, ich vergleiche die Worksheets. Und zwar das gesamte Objekt, also wenn dieses Worksheet das andere ist, dann habe ich ein Problem. Bevor ich die jetzt auf Korrekt umstelle, möchte ich schon mal auf diesen Operator hinweisen. Das "wksDieses" und das "wksInhalt" sind Objekte. Die werden nicht mit "=" verglichen, denn die sind nicht identisch, sondern die werden mit "Is" verglichen, ob sie denselben Inhalt haben. Also sprich, den Zeiger auf dieselbe Stelle im Hauptspeicher, wenn man es genau nimmt. Zeichenketten oder Zahlen oder so was, können Sie mit dem Gleichheitszeichen vergleichen. Die werden inhaltlich überprüft. Dieses "Is" prüft, ob es sich hierbei um die gleichen Objekte handelt. Und natürlich will ich nur dann reagieren, wenn das nicht der Fall ist. Deswegen mache ich mal zur Deutlichkeit auch Klammern drum rum. Das ist sozusagen die perfekte Schreibweise. Das mit dem Namensvergleich und Lower Case, ist auch in Ordnung. Aber da sind einige interne Schritte mehr nötig. Wenn Sie da viele Objekte hätten, würden Sie schon messen, noch nicht merken können, aber messen können, dass es langsamer ist. Also nur dann, wenn das Blatt, was ich in der Hand habe, nicht das Inhaltsblatt ist, dann soll was passieren. Und was dann passieren soll ist, dass ich in "wksInhalt" in der Cells-Auflistung in - fangen wir erstmal oben links an - "1, 1", also in der Zelle "A1", Zeile 1, Spalte 1, einen Value reinschreibe, und der ist genau das, was ich bei "wksDieses" als Name-Eigenschaft habe. Soweit so nett, aber die würden sich jetzt alle gegenseitig überschreiben. Die schreiben ja alle noch in die Zelle "A1". Um das zu verhindern, muss ich jetzt einen Zähler erfinden. "dim LongZaehler as Long", Long ist ein bisschen übertrieben, Sie können ja nur 255 Blätter, Tabellenblätter in einer Mappe haben. Aber immerhin einige Millionen Zeilen. Also da wäre Long sicherer. Wir könnten hier auch mit Integer auskommen, dann reicht es auch. Und jetzt würde ich dafür sorgen, dass der Zähler zuerst mal auf "1" steht. Denn eine undeklarierte, oder besser gesagt, ungefüllte Zahl beginnt mit null. Damit ich jetzt hier - da muss ich mal gucken, mit dem Komma, welches von den beiden Argumenten ich brauche - hier der Row-Index mit "intZaehler" gewechselt wird. Und ich muss dann nur noch dafür sorgen, dass der Zähler jeweils um eins erhöht wird. Das schreibt sich so: Also bisheriger Zähler plus "1" in die gleiche Variable wieder reinschreiben. Und mit jedem gefundenen Blatt wird der Zähler eins erhöht, und der Inhalt also eine Zeile tiefer geschrieben. Die Cells-Auflistung ist wunderbar geeignet für so was. Jetzt können wir nochmal gucken, ob es eigentlich schon ein Inhaltsverzeichnis gibt. Das wird aber sowieso gelöscht. Aber es wird noch nicht gefüllt. Da muss ich jetzt also "InhaltsverzeichnisFuellen" aufrufen und auch das mache ich mal auf "Private", damit es von außen nicht einzeln aufrufbar ist. Von außen sichtbar und aufrufbar ist nur diese Prozedur. Wenn ich hier jetzt also mit F5 drauf gehe und starte, dann kann ich jetzt mit ALT + F11 drüben nachgucken, - hat nur ein bisschen Platzprobleme - dass jetzt hier alle Namen aller Tabellen hintereinander notiert sind. Das, was hier sozusagen nebeneinander steht, steht hier untereinander. Und das ist jedes Mal aktuell, indem dieses Inhaltsverzeichnis gelöscht und wieder neu angelegt wird, jedes Mal wenn ich diesen Befehl hier komplett ausführen lasse. Das ist ein Zusammenspiel, was ich hier namentlich sehr umfangreich benannt habe. was man natürlich auch kürzer formulieren kann, was aber dafür sorgt, dass Sie erst ordentlich aufräumen, dann Platz schaffen, und dann Inhalte reinschreiben.

Excel 2016 VBA Grundkurs

Lassen Sie sich systematisch in die Excel-Programmierung mit Visual Basic for Applications (VBA) einführen.

7 Std. 25 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:30.08.2016

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!