Einblenden oder Auflisten aller Objekte (Microsoft Excel)
Mike hatte ein Problem, bei dem er wusste, dass Objekte in seiner Arbeitsmappe versteckt waren und er sie alle finden wollte. Es scheint, dass er ein Makro geschrieben hat, das einige Objekte versteckte, sie dann aber nicht einblendete.
Wenn Sie einfach die Namen der Objekte in einem Arbeitsblatt herausfinden möchten, ist das folgende Makro sehr hilfreich. Es zeigt nicht nur den Namen, sondern auch den Objekttyp.
Sub ListObjects() Dim objCount As Integer Dim x As Integer Dim objList As String Dim objPlural As String Dim objType(17) As String 'Set types for different objects objType(1) = "Autoshape" objType(2) = "Callout" objType(3) = "Chart" objType(4) = "Comment" objType(7) = "EmbeddedOLEObject" objType(8) = "FormControl" objType(5) = "Freeform" objType(6) = "Group" objType(9) = "Line" objType(10) = "LinkedOLEObject" objType(11) = "LinkedPicture" objType(12) = "OLEControlObject" objType(13) = "Picture" objType(14) = "Placeholder" objType(15) = "TextEffect" objType(17) = "TextBox" objList = "" 'Get the number of objects objCount = ActiveSheet.Shapes.Count If objCount = 0 Then objList = "There are no shapes on " & _ ActiveSheet.Name Else objPlural = IIf(objCount = 1, "", "s") objList = "There are " & Format(objCount, "0") _ & " Shape" & objPlural & " on " & _ ActiveSheet.Name & vbCrLf & vbCrLf For x = 1 To objCount objList = objList & ActiveSheet.Shapes(x).Name & _ " is a " & objType(ActiveSheet.Shapes(x).Type) _ & vbCrLf Next x End If MsgBox (objList) End Sub
Dieses Makro gibt die Namen und Typen aller Objekte im Arbeitsblatt zurück.
Ein anderer Ansatz besteht jedoch darin, alle Objektnamen anzuzeigen und dann, wenn das Objekt ausgeblendet ist, zu fragen, ob es ausgeblendet werden soll. Das folgende Makro macht genau das:
Sub ShowEachShape1() Dim sObject As Shape Dim sMsg As String For Each sObject In ActiveSheet.Shapes sMsg = "Found " & IIf(sObject.Visible, _ "visible", "hidden") & " object " & _ vbNewLine & sObject.Name If sObject.Visible = False Then If MsgBox(sMsg & vbNewLine & "Unhide ?", _ vbYesNo) = vbYes Then sObject.Visible = True End If Else MsgBox sMsg End If Next End Sub
Wenn Sie möchten, dass das Makro nur für versteckte Objekte funktioniert und die sichtbaren Objekte ignoriert, können Sie das Makro wie folgt ändern:
Sub ShowEachShape2() Dim sObject As Shape Dim sMsg As String For Each sObject In ActiveSheet.Shapes If sObject.Visible = False Then sMsg = "Object & sObject.Name & _ " is hidden. Unhide it?" If MsgBox(sMsg, vbYesNo) = vbYes Then sObject.Visible = True End If End If Next End Sub
Um einfach alle Objekte in einem Schritt sichtbar zu machen, können Sie das Makro noch weiter kürzen:
Sub ShowEachShape3() Dim sObject As Shape For Each sObject In ActiveSheet.Shapes sObject.Visible = True Next End Sub
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (2025) gilt für Microsoft Excel 97, 2000, 2002 und 2003.