Mehrere Tabellenblätter auf einmal ein- und ausblenden

In Excel können Tabellenblätter ein- und ausgeblendet werden. Dies bezweckt, dass dem Benutzer der Datei nur die relevanten Inhalte angezeigt werden. Unten aufgeführt ist ein Beispiel eines Berichtes mit drei verschiedenen Tabellenblättern: Dem "Bericht" selbst sowie die diesem zugrundeliegenden "Daten/Data" und ein Steuerungs-Blatt mit dem Namen "Parameter".

TabellenblaetterAlle

Die Empfänger dieses Berichtes interessieren lediglich die aufbereiteten Informationen. Die unübersichtlichen Quelldaten oder allfällige Steuerelemente im Hintergrund müssen nur in Einzelfällen oder bei Rückfragen aufgezeigt und offengelegt werden. Deshalb sollte der- oder diejenige, die den Bericht pflegt, diese Blätter vor dem Versand ausblenden. Dieser Schritt kann mittels Rechtsklick auf ein beliebiges Tabellenblatt → "Ausblenden" vollzogen werden:

TabellenblattAusblenden

Um mehrere "Sheets" auszublenden, sind die gewünschten Tabellenblätter im Vornherein zu selektieren (mittels CTRL + anklicken - oder im Falle von einer Vielzahl: Das erste Blatt anklicken, Shift drücken und das letzte Blatt ebenfalls anklicken; damit werden alle dazwischenliegenden Sheets ebenfalls markiert). Daraufhin erfolgt ebenfalls ein Rechtsklick auf ein beliebiges Tabellenblatt → "Ausblenden".

Um ein Tabellenblatt wieder einzublenden, geht man via Rechtsklick auf ein Blatt → "Einblenden". Es erscheint dann eine Liste mit sämtlichen ausgeblendeten Tabellenblätter:

TabellenblattEinblenden

Es ist das jeweilige Blatt auszuwählen und mit "OK" wird es alsbald eingeblendet. In der obigen Liste können jedoch nicht mehrere Blätter gleichzeitig selektiert und angezeigt werden. Das kann bei grossen Dateien zeitaufwändig und nervig sein. Um jedoch direkt alle ausgeblendeten Sheets anzuzeigen, ist ein Makro notwendig: Gehe via ALT+F11 oder mittels Rechtsklick auf ein Tabellenblatt → "Code anzeigen" in die VBA-Umgebung und füge ein neues Modul ein (Rechtsklick auf der linken Seite bei den Projekten → "Einfügen" →  "Modul". Füge dort dann den nachfolgenden Code ein:

Sub Einblenden()

Dim Tabellenblatt As Object

For Each Tabellenblatt In Worksheets
Tabellenblatt.Visible = True
Next Tabellenblatt

End Sub

Sobald dieses Makro ausgeführt wird, werden alle ausgeblendeten Tabellenblätter direkt wieder eingeblendet.

User-Input in Makros verwenden

Nicht jeder Prozess kann vollautomatisch ablaufen. In diesem Beitrag findest Du eine Möglichkeit, um User-Input in Deinem Makro weiterzuverwenden. Die Eingabe des Benutzers wird somit als Variable abgespeichert und steht jederzeit zur Verfügung.

Dazu wird innerhalb des Codes der Befehl "Application.InputBox(...)" verwendet. Die Syntax lautet wie folgt:

ApplicationInputBox

Die Bestandteile innerhalb von eckigen Klammern "[]" sind jeweils optional - lediglich "Prompt As String" ist eine Muss-Angabe. Wir gehen hier auf die ersten drei Angaben der InputBox ein. Nehmen wir an, wir möchten den Namen des Benutzers erfragen - dies ist unser "Prompt". Nachfolgende Code-Zeile ergibt das unterhalb angezeigte Eingabe-Feld.

Application.InputBox("Wie heisst Du?")

InputBox1

Eingangs habe ich erwähnt, dass die Benutzereingabe als Variable weiterverwendet werden kann. Definieren wir "UserName" als String, da es sich um einen Text handelt. Um die Eingabe direkt in dieser Variable abzuspeichern, lautet der Code demnach:

Dim UserName As String
UserName = Application.InputBox("Wie heisst Du?")

Der nächste Bestandteil der InputBox ist der Titel. Dieser wird oberhalb angezeigt, wo derzeit noch "Eingabe" steht (siehe Grafik oben).

Als letzte Angabe folgt "Default" - dies ist ein Standardtext, der bereits eingegeben und markiert ist, wenn sich das Eingabefeld in der Prozedur öffnet. Nachfolgende Code-Zeilen ergeben das unterhalb angezeigte Eingabe-Feld.

Dim UserName As String
UserName = Application.InputBox("Wie heisst Du?", "Benutzername", "Dein Name")

InputBox2

Solche InputBoxen ermöglichen es, wie eingangs erwähnt, semi-automatisierte Prozesse in VBA abzubilden. Beachte, dass der Benutzer Tippfehler machen könnte - unter Umständen wäre eine Dropdown-Liste mit vorgegebenen Auswahlkriterien sinnvoller, um die Qualität der Daten sicherzustellen.

Datum als Variable abspeichern (VBA)

Ich zeige Dir hier zwei Möglichkeiten auf, wie Du das heutige Datum als Variable abspeichern und danach abrufen kannst. Als erstes ist dazu die Variable "MeinDatum" in VBA zu deklarieren:

Dim MeinDatum As Date

Nehmen wir an, das abzuspeichernde Datum steht in der (Hilfs-)Zelle "A1". Ich habe da die Formel "=HEUTE()" verwendet, um stets das heutige Datum auszugeben. Nachfolgender Code speichert dann den Datumswert aus Zelle "A1" als Variable "MeinDatum" ab:

MeinDatum = Range("A1").Value

In einer nächsten Zelle kann daraufhin dieser Wert ausgegeben werden, beispielsweise in Zelle "A2":

Range("A2") = MeinDatum

Durch diesen Schritt wird aufwändigeres und performanteres "Copy + Paste" vermieden und auf Änderungen innerhalb der Datei kann durch einmaliges Definieren von Variablen besser reagiert werden. Auch kann so beispielsweise das gestrige Datum einfach ausgegeben werden, indem man obige Code-Zeile mit "-1" ergänzt:

Range("A2") = MeinDatum - 1

Zuletzt ist zu erwähnen, dass das heutige Datum nicht zwingend in einer Hilfszelle hinterlegt werden muss. Man kann die Formel "=HEUTE()" auch direkt in VBA verarbeiten. Die Definition der Variable (vorher: "MeinDatum = Range("A1").Value") lautet demnach:

MeinDatum = Date

respektive direkt, ohne Variablen-Definition:

Range("A2") = Date

Durch diesen Schritt erübrigt sich die vorherige Variablen-Deklaration ("Dim MeinDatum As Date").