Excel 2013 VBA Grundkurs

Inhaltsverzeichnis suchen

Testen Sie unsere 1987 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Bevor Sie eine neue Tabelle mit einem festen Namen anlegen, sollten Sie prüfen, ob es vielleicht schon eine gleichnamige Datei gibt. Das geht am besten mit einer Schleife und einer Boolean-Variablen.

Transkript

Ich möchte mit diesem nächsten Makro in einer beliebigen Datei ein Inhaltsverzeichnis anlegen. Das heißt, mehr oder weniger, ein neues Tabellenblatt, welches die Namen der übrigen Tabellenblätter angibt. Da können dann noch ein paar Zusatz-Informationen dazu. Das kann man dann schön als Deckblatt benutzen für größere Dateien, wo was berechnet wird. Es zeigt aber natürlich vor allem die Techniken, die dahinter stecken. Und es beginnt damit, ganz harmlos, dass man erstmal aufräumen muss. Ein neues Blatt mit einem vorgefertigten Namen heißt auf Deutsch: es wird scheitern, wenn es diesen Namen schon gibt. Und dann müssen Sie entscheiden: löschen Sie das oder wollen Sie es umbenennen. Spätestens beim Testen des Makros werden Sie ein Problem haben, weil beim zweiten Mal in dieser Datei das Inhaltsverzeichnis schon vorhanden ist. Das also muss ich alles abfangen und möchte ich hier miteinbauen. Also, ein Sub InhaltsverzeichnisFinden ist es eigentlich erstmal, oder Aufräumen, oder nennen wir es ruhig Vorbereiten. "Vorbereiten" heißt, vor allem - Leichen wegräumen, wenn es sein muss. Sie werden ein Worksheet brauchen, um alle Worksheets abzuklappern und zu durchsuchen. Also, Dim wksDieses As Worksheet. Und dann kann ich schlicht probieren: For Each wksDieses In ActiveWorkbook.Worksheets. Das ist die Auflistung, ein Next dazu. Und jetzt kann ich einfach prüfen, hat dieses Worksheet schon diesen Namen oder nicht, und kann dann reagieren. Also, es könnte z.B. heißen If wksDieses.Name ist gleich Inhaltsverzeichnis, Then. Ich schreibe nur mal erstmal als Kommentar "Achtung" hin. Und da ist schon genug Potenzial drin, um es zu einem Problem werden zu lassen. Z.B. die Schreibweise von "Inhaltsverzeichnis". Erstens, werden wir dieses Wort noch häufiger im Code brauchen. Und zum Zweiten vor allem, könnte es sein, dass es klein geschrieben ist. Der Vergleich würde sagen: das ist nicht gleich, großes I ist nicht kleines i. Aber die Tabellen würden sagen: Inhaltsverzeichnis mit großem oder kleinem I ist egal, das ist das Gleiche. Also, sollten Sie im Zweifelsfall beide auf Kleinbuchstaben setzen. Das gibt es mit einer fertigen Funktion LCase (LowerCase). Also, den Namen des Inhaltsverzeichnisses, das Sie vielleicht schon gefunden haben. Und der Form halber auch den Namen, den Sie hier in einer Zeichenkette drin haben. Und Sie haben mein Zögern schon gehört: Zeichenkette, die wir häufiger brauchen, heißt auf Deutsch - Konstante. Ich kann das hier schon mal ausschneiden, das wird fehlerhaft sein vorübergehend. Und hier eine Konstante erfinden. Die heißt cstrInhalt und kriegt diesen Wert. Und die werde ich da benutzen. Das heißt, auch bei einer Konstante sollte ich sicherstellen, dass die in kleinen Buchstaben ist, damit ich nicht später solche Fehler mache. Hier ist ein großes I und da denke ich nicht mehr dran. Also, auf beiden Seiten des Vergleichs. LowerCase heißt das nämlich, das LCase - alles in Kleinbuchstaben umwandeln. Das Gegenstück dazu heißt übrigens UCase (UpperCase), UCase geschrieben. Damit haben wir den Teil schon mal erledigt. Jetzt kommt der Nächste, der hat so ein bisschen was mit Beschleunigung zu tun. Wenn ich hier statt "Achtung" wirklich einen Code reinschreibe, irgendwas mache, dann wird nach dem If... Es gibt nur einen Treffer, das kann ich jetzt schon sagen. Es kann nur eine Tabelle "Inhaltsverzeichnis" heißen. ...dann wird nach dem Treffer trotzdem der Code noch weiter bearbeitet. Also, sollte ich als Erstes schon mal dafür sorgen. Wenn es einen Treffer gibt, dann wird die For/Each-Next Schleife verlassen. Auch bei einer For/Each-Schleife heißt es Exit For. Also, es gibt es übrigens auch für Do/Loop-Schleifen - Exit Do. Wenn es einen Treffer gibt, muss ich mir die anderen ja gar nicht mehr angucken. Selbst bei nur 10 Tabellen ist es ein Zeichen guter Programmierung, dass man überlegt: "Warum guckt der dann eigentlich noch weiter?" Bei großen Datenmengen macht es einen Unterschied, ob Sie gerade die 5-Millionste Zeile angucken oder seit der zweiten schon wissen: da ist nichts mehr zu holen. Vorher würde ich mir merken, ob es einen Treffer gab oder nicht. Dann kann man das nämlich unamängig davon verarbeiten. Da empfiehlt es sich also mit einer Boolean-Variable zu arbeiten, die sich das merkt. Also, Dim booHatInhalt, z.B. As Boolean. Und dieser Boolean-Variablen vorsichtshalber ein Startwert mitzugeben. Ganz ehrlich, der ist überflüssig. Boolean-Variablen sind bei Ihrer Deklaration sowieso False. Aber nur zur Vorsicht, jetzt und hier in VBA. In Visual Basic z.B. ist es nicht so. Und je nach Version kann uns das ja auch irgendwann passieren. Es gibt Programmiersprachen, da sind solche Variablen gar nicht vordeklariert, die haben so einen unbestimmten Wert. Also, deswegen schadet es nicht das explizit reinzuschreiben. Und für den Fall, dass es einen Treffer gab, muss ich hier einfach nur sagen: booHatInhalt = True. Das bedeutet, hinter dieser For/Each-Next Schleife weiß ich jetzt, ob es ein Inhaltsverzeichnis gab oder nicht. Entweder ich bin da durchgelaufen und es gab keins. Dann ist er nie in dieses If reingekommen und steht immer noch auf False. Oder es gab eins, dann ist er ja einmal reingekommen und sofort rausgesprungen. Und damit haben wir den ersten Teil dieses Makros geschafft. Wir wissen, ob es ein Inhaltsverzeichnis gibt und können uns anschließend darum kümmern.

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)
Super
Paul B.
Gut strukturiert, hervorragend vorgetragen, sehr viel gelernt!
 

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!