(C) 2009 - 2021 by Mourad Louha · Alle Rechte vorbehalten

Zeichenobjekte in Excel komfortabel ein- und ausblenden

Beim Stöbern im Microsoft Excel Blog habe ich vor kurzem einen interessanten Artikel von Ben Rampson (Program Manager im Excel Team) entdeckt, in dem es um Zeichenobjekte in Excel 2007 geht. In Excel 2007 oder Excel 2010 kann man sich auch relativ einfache Weise alle in einer Tabelle vorhandenen Objekte, wie beispielsweise Rechtecke oder Bilder anzeigen lassen und diese ein- und ausblenden. Hierzu wählt man im Ribbon „Start“ unter „Suchen und Auswählen“ den Eintrag „Auswahlbereich“.

Objekte in Excel

Sie erhalten anschließend ein Auswahlfenster, in welchem alle in der aktiven Tabelle aufgeführten Objekte aufgeführt werden.

Objekte in Excel

Durch Anklicken des Auges können die einzelnen Objekte ein- und ausgeblendet werden. Leider ist eine solche Palette in Excel 2003 nicht verfügbar; macht aber nichts, dann programmieren wir uns unsere eigene Palette. Wir stellen hier ein kleines Add-In zur Verfügung, welches ähnlich zu Excel 2007, alle in einer Tabelle vorhandenen Objekte auflistet.

Objekte in Excel

Um alle Objekte in der Tabelle ein- und auszublenden können Sie das rote bzw. grüne Auge verwenden. Möchten Sie die Liste aktualisieren, z.B. falls Sie neue Objekte der Tabelle hinzugefügt haben, klicken Sie auf das Symbol mit den zwei kreisförmigen Pfeilen. Ein Doppelklick auf einen Eintrag in der Liste wählt das Objekt in der Tabelle aus und blendet es gegebenenfalls zuvor ein. Im unteren Bereich des Fensters können Sie für das in der Liste ausgewählte Objekt dessen Sichtbarkeit und Status einstellen. Zudem wird Ihnen der Name des Objektes angezeigt und, falls vorhanden, das dem Objekt assoziierte Makro.

Das Addin kann von unserer Website im Downloadbereich heruntergeladen werden. Falls Sie Einsicht den Code haben möchten, müssen Sie den Schutz des Projekts aufheben. Das Kennwort lautet „maninweb“, ohne die Anführungszeichen.

Der Kern der Anwendung ist eine Listview in einer UserForm. Diese wird über die globale Funktion mlfpMainShapes()gefüllt.

Die Funktion erwartet zwei Parameter, einmal den Namen der aktive Mappe und einmal den Namen der aktiven Tabelle. Zudem verwendet die Funktion die globale Variable mlvpHandle, die auf die geladene UserForm referenziert. In der Schleife werden alle Shape Objekte in der Tabelle in die Listview eingetragen. Ausserdem wird geprüft, ob ein Blattschutz vorhanden ist und gegebenenfalls einige Steuerelemente deaktiviert. Abschließend wird die Funktion mlfpMainShapesItem() aufgerufen, welche die Eigenschaften des Objektes ermittelt und die weiteren Steuerelemente füllt.

Wie erkennen wir nun, dass zum Beispiel eine andere Tabelle aufgerufen wurde? Nun, dafür brauchen wir eine Klasse, die die entsprechenden Ereignisse in Excel abfängt.

Die Klasse braucht letzten Endes nur die beiden oben aufgeführten Ereignisse abfangen. Eine Instanz der Klasse wird beim Laden der UserForm erstellt, wie im folgenden Code-Abschnitt zu sehen.

Wie bereits schon weiter oben erwähnt, ist eine Schaltfläche zum Aktualiiseren der Einträge in der Listview vorhanden. Leider stehen keine Ereignisse in Excel 2003 VBA zur Verfügung, dies es ermöglichen würden, das Löschen oder Einfügen von Objekten zu erkennen. Aber, wir hoffen, dass man damit leben kann.

Sie können das Add-In hier Objekte in Excel 2003 ein- und ausblenden“ herunterladen und beliebig für Ihre Zwecke anpassen. Für den Fall, dass Sie z.B. Erweiterungen einbauen möchten, würden wir uns über eine Nachricht mit Ihren Anpassungen und Ideen freuen. Beachten Sie bitte, dass die enthaltenen Grafiken nicht frei sind und nicht weiterverwendet werden dürfen. Unser Code wurde in Excel 2003 auf Windows XP und Vista getestet. Eine Gewähr oder Ähnliches kann nicht übernommen werden.

 
Comments

In einem Shape (Gliederungstiefe 1) sind mehrere Shapes (Gliederungstiefe 2) gruppiert. Ein Shape der Gliederungsstufe 2 soll wiederum eine Gruppierung von Shapes sein (Gliederungstiefe 3). An die Shapes der Gliederungsstufe 2 kommt man mit VBA-Bordmitteln nicht mehr heran! Zumindest die Sichtbarkeit kann aber mit der CommandBar „Auswahl und Sichtbarkeit“ eingestellt warden – auch der Shapes der Gliederungsstufen zwichen der höchsten (1) und der niedrigsten…

Hallo,

vielen Dank für den Hinweis. Ohne es jetzt selbst ausprobiert zu haben (aus Zeitgründen), das Objekt GroupShapes sollte gruppierte Shapes ansprechen können. Ein Shape hat die Eigenschaft GroupItems, die ein GroupShapes zurückliefert und darin wieder Shapes, die wiederum ein GroupShapes haben. Theoretisch müsste man so die Ebenen durchlaufen können.

Viele Grüße