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.