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 2016 VBA Grundkurs

Worksheets einfügen und löschen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Tabellen lassen sich in der Arbeitsmappe per VBA einfügen – auch an beliebigen Positionen – und bei Bedarf wieder löschen.

Transkript

Mit Tabellen in so einer Excel-Arbeitsmappe können Sie natürlich mehr machen, als einfach nur die Auflistung anzugucken und sich zu freuen wie sie heißen. Sie können zum Beispiel neue Tabellenbilder hinzufügen, so wie der Benutzer das ja auch kann. Also, mit "Sub NeueTabelle" mache ich es direkt wieder ordentlich, auch in der Schreibweise. Ich werde also direkt eine Variable dafür machen, eine Worksheet-Variable, also "wksNeu as Worksheet". Uns schreibe dann wie üblich "set wksNEU", das ist ja eine Objektvariable, "= Worksheets.Add" Und damit man sieht, dass es einen Rückgabewert hat, mache ich hier auch die Klammern. Die sind nicht zwingend notwendig, aber zur Schönheit des Codes gehört auch, dass jeder sofort sieht, wenn er diesen Code liest, was da passiert Und nicht Sachen unfreiwillig versteckt werden. Also hier wird ein Objekt zurückgegeben und das schreibe ich so wie eine Function. Und der Vorteil davon wenn Sie das einer Variablen übergeben haben, ist dass Sie nicht anschließend mit ActiveSheet darauf zugreifen müssen. Das funktioniert, aber nur wenn Sie genau ein Blatt einfügen. Sondern Sie können beispielsweise ein zweites Blatt einfügen und das dann als Inhaltsverzeichnis kennzeichnen. Zum Beispiel. Ich mach das mal hier kurz: "Dim wksInhalt As Worksheet" Und das können wir praktisch kopieren, das ändert sich nur hier in diesem. Und jetzt kann ich auf zwei verschiedene zugreifen. Ich kann also jetzt noch schnell beschließen: "wksInhalt.Name" heißt "Inhaltsverzeichnis". Und kann anschließend trotzdem mit "debug.Print" ausgeben, dass es "wks", aber natürlich "wksNeu.Name" angelegt hatte, "ist neu" und da können wir dann ergänzen und "wksInhalt.Name ist auch neu" Also ich kann unabhängig voneinander auf zwei Worksheets zugreifen, die ich nacheinander eingefügt habe. Mit ALT + F11 gucke ich noch mal eben nach, wieviel es gibt, Meine Daten, Demo, zwei, vier, sechs, sieben. Wenn ich das jetzt ausführe mit F5, werden sofort zwei eingefügt: Eins heißt "Tabelle 1", eins heißt "Inhaltsverzeichnis". Gucken wir mal nach. Hier ist "Tabelle 1", da ist "Inhaltsverzeichnis". Ich werde die erstmal wieder rausschmeißen, damit es nicht so voll wird. Achten Sie darauf, beim Löschen gibt es hier immer eine extra Frage. Die wird uns nachher noch beschäftigen. Und entsprechend auch die Tabelle 1. Ich will beim nächsten Mal dafür sorgen, dass diese neue Tabelle nicht zufällig irgendwo landet, sondern ganz vorne oder ganz hinten. Also nenne ich das mal einfach "Sub InhaltVorne". Da gibt's dann wieder... Das kann ich mir da oben schnell runterkopieren, mit gedrückter STRG-Taste, und hier entsprechend den Befehl auch. Und da gibt es dann hinter dem "Add" nach der Klammer, zwei Argumente, "before" und "after", die das machen. Die dürfen Sie - sind beide optional - aber die dürfen Sie nur wahlweise benutzen, entweder "before" oder "after". Und alle, die sich das angucken sagen als Erstes: Super, ich will das ganz vorne einfügen, also gebe ich "beforeEins" an. Und das ist leider der falsche Datentyp. Das kann man ihm hier nicht ansehen. Das "before" und das "after" erwarten ein Tabellenblatt. Ich müsste also hier eigentlich ein neues Blatt ermitteln, oder ein vorhandenes um genau zu sein. Das können wir ruhig mal getrennt machen. "wksEins " nenne ich das mal. Das soll das erste Blatt sein, "as Worksheet". Und würde das jetzt erstmal ermitteln, "set wksEins". Das ist von allen Worksheets... Das ist dasjenige von allen, mit "Worksheets", der Nummer Eins. Und deswegen kann ich jetzt hier "wksEins" so formulieren. Und damit wir das auch gleich wieder erkennen - das kann ich mir auch von da oben runterkopieren - werde ich das als Inhaltsverzeichnis bezeichnen. Das wird jetzt unten nicht gebraucht. Ich werde also hier - den Leerraum können wir wegnehmen - zuerst ermitteln, welches das Worksheet Nummer Eins ist, und das dann da eingeben. Sie hätten das natürlich tatsächlich sofort hier reinschreiben können. Es wird gleich ein Tick komplizierter, deswegen habe ich es so gelassen. Also, speichern, mit F5 ausführen und mit ALT + F11 nachgucken. Hier steht das Inhaltsverzeichnis jetzt ganz vorne. Ich lösche es, weil gleich ein gleichnamiges wieder kommt, das würde stören. Jetzt will ich das Inhaltsverzeichnis nämlich nach hinten schreiben. Ich mache einfach mal eine Kopie. Und da wird s ein Tick komplizierter, weil es nicht mehr die Nummer Eins ist. Ich werde das mal einfach als "Hinten" bezeichnen. Das hätte ich vielleicht besser mit BearbeitenErsetzen gemacht, mit STRG + Leertaste, Das funktioniert übrigens deswegen nicht, - das können Sie sich an der Stelle gleich mit merken, weil hier eine gleichnamige Prozedur ist. Also "InhaltVorne", da muss es jetzt hier "InhaltHinten"heißen. Und dann scheitert auch IntelliSense Und jetzt kann ich wieder STRG + Leertaste ausführen. Also wenn man nicht ordentlich arbeitet, wie Sie es gerade gesehen haben, dann wird man sofort bestraft. Aber, das ist noch nicht das Hinterste. Sondern das Hinterste ist dasjenige mit der größten Nummer. Ich muss also hier nochmal Worksheets abfragen, und mit "Count" kriege ich dann die größte Nummer. Auch das kann man natürlich hier reinschreiben. An dieser Stelle. Aber es wird zunehmend komplizierter, wenn man so was macht. Ich habe also an dieser Stelle jetzt, - wählen wir vorsichtshalber noch Debuggen und Kompilieren - an dieser Stelle jetzt die Möglichkeit, eine Tabelle exakt an die letzte Position zu setzen. Aber natürlich "After", also hier mit dem Komma, damit ich nicht vor dem Hintersten, sondern nach dem Hintersten anfüge. Einmal mit F5 testen und mit ALT + F11 nachgucken: Es ist jetzt an hinterster Position. Das hießt, Sie haben mit ein klein wenig Mühe - das ist also nicht einfach nur die Zahl, sondern so ein bisschen Voraufwand - die Chance ein Tabellenblatt an eine beliebige Stelle zu legen. Und dann möchten Sie natürlich auch die Chance haben, das wieder loszuwerden. Also "Sub", ich nenne das mal einfach "InhaltLoeschen". Das heißt ich muss mal eben ein Neues anlegen. Einmal ganz nach vorne, mit F5. Das kann man auch hie nachgucken, ob es da ist. Das ist inzwischen die Tabelle 10, mehrfach eingefügt. Heißt aber immer noch "Inhaltsverzeichnis". Und das will ich jetzt löschen. Also machen wir es wieder ordentlich, "dim wksLoeschen as Worksheet". Und dann kann ich jetzt gezielt sagen, ich will das Inhaltsverzeichnis löschen. Also "Set wksLoeschen" ist von allen "Worksheets" dasjenige, was "Inhaltsverzeichnis" heißt. Ich weiß jetzt seinen Namen. Und dann sollte ich aber, bevor ich das mache, den Benutzer nochmal fragen. Also mit einer "If Messagebox". "Soll", und jetzt kommt der Name von diesem Arbeitsblatt. Das würde ich ausdrücklich erfragen. und nicht einfach das Wort "Inhaltsverzeichnis" schreiben. Denn dann muss ich es später nur an einer Stelle ändern. Ich werde jetzt also ausdrücklich sagen, Hier, einfaches Hochkomma, damit der Name nachher schön zu erkennen ist, und jetzt frage ich "wksLoeschen.Name" nach seinem Namen. Dann kann ich es nämlich später mal verändern. Das ist flexibler. Gänsefüßchen wieder auf, um die Zeichenkette zu eröffnen, einfaches Hochkomma, damit die Hochkommata nachher im Text den Namen umfassen. Und dann fragen wir weiter: "Soll es wirklich gelöscht werden?" Und jetzt gebe ich hier nicht nur "vbQuestion" an, sondern zusätzlich noch mehrere Parameter, die hier mit Pluszeichen verbunden werden. damit es zwei Entscheidungen gibt. damit es zwei Entscheidungen gibt. Und wenn man nicht aufpasst, werde ich jetzt einfach den zweiten Button als Default-Button benutzen. "vbDefaultButton2" wäre also ungelesen, wie das viele gerne machen, auf RETURN geht, wird ein No auslösen. Und nicht vergessen, meinen ewigen Titelparameter, damit man weiß, wer es war. Und wenn das ganze Ergebnis ein "vbYes" ist, dann erst passiert was. Und das "End If" schon zu, und da habe ich irgendwo eine Klammer vergessen. Und da sehen Sie schon: Teil des Problems ist, - es ist keine Klammer, sondern hier so ein Kaufmanns-UND - ein Teil des Problems ist auch die Länge dieser Zeile Deswegen werde ich die Zeile unterbrechen, aber nur für meine Augen. Der Compiler glaubt weiterhin, dass das eine Zeile ist. Diese Unterbrechung ist Leerzeichen_RETURN Und aus Schönheitsgründen mache ich jetzt mit der TAB-Taste noch eine Einrückung. Hier stehen drei Zeichen, Leerzeichen, Unterstrich und ein RETURN. Die sagen dem Compiler: Guck nicht hin, das ist alles eine einzige Zeile. Ich mache mal hier wieder diesen Fehler rein, dann sehen Sie ganz deutlich, beide Teile werden rot. Und dann kann man das besser lesen. Hier noch ein bisschen Abstand, so dass man auch gut sieht, das ist eine einzige Zeile mit Folgezeile, Und hier kann ich jetzt sagen: Und wenn das alles bejaht ist, dann will ich wirklich dieses Blatt, "wksLoeschen" mit der Delete-Methode verschwinden lassen. Allerdings würde das diese Meldung wieder auslösen. Der Benutzer wird also nach dem ersten... Wir können das mal eben machen Ich muss es einmal eben einfügen. Nein ist schon drin, also mit F5... Die erste Frage, die kommt von mir. Wenn ich auf Nein gehe, ist alles gut. Nochmal mit F5, Ich gehe auf Ja. Wenn ich das jetzt teste: Es gibt also im Moment ein Inhaltsverzeichnis und das mit F5 laufen lasse, dann gibt es hier die von mir programmierte Messagebox, mit der Rückfrage. DefaultButton2 sagt Nein ist vorbelegt, ich könnte also mit RETURN das Nein jetzt auslösen, Wenn ich auf Nein gehe, passiert nichts. Wie gewollt, wir können hier nachgucken, da ist das Inhaltsverzeichnis noch drin. Wenn ich das wiederum mit F5 auslöse, und jetzt auf Ja gehe, dann ist das Inhaltsverzeichnis auch gelöscht. - da ist es weg - und zwar ohne die Excel-Meldung. Die erscheint nur, wenn Sie versehentlich sage ich mal, oder schlecht programmiert, so arbeiten, dass Sie die Worksheets-Auflistung bitten, das zu entfernen. Also hier mit der Name-Angabe. Auch die kennt nämlich eine Delete-Methode, da muss ich die hier natürlich wegnehmen. Wenn Sie diese Schreibweise benutzen, dann wird zusätzlich die Excel-Nachfrage, ob Sie das auch so meinen, erscheinen. Deswegen kann ich davon nur abraten. Machen Sie den Normalfall, das heißt das Worksheet selber, löscht sich sozusagen. Und damit haben wir alles, was so ein Worksheet können muss. Sie können es neu einfügen. Sie können es an eine bestimmte Stelle einfügen. Und wenn es Ihnen nicht mehr gefällt, können Sie es hier auch löschen.

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
Ihr(e) Trainer:
Erscheinungsdatum:30.08.2016
Laufzeit:7 Std. 25 min (66 Videos)

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!