
Tips.Net > ExcelTips Home > Macros > Unhiding or Listing All Objects
Summary: In complex workbooks with lots of objects, it is easy to “lose” an object so that you cannot select it. The macro techniques used in this tip allow you to examine or display all of the objects in a workbook, including those that were previously unreachable. (This tip works with Microsoft Excel 97, Excel 2000, Excel 2002, and Excel 2003.)
Subscriber Mike Levinson had a problem where he knew that there were objects hidden within his workbook, and he wanted to find them all. It seems he wrote a macro that hid some objects, but then did not unhide them.
If you want to simply find out the names of the objects in a worksheet, the following macro will do so very nicely. It shows not only the name, but also the type of object.
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
This macro returns the names and types of all objects in the worksheet. Another approach, however, is to display all the object names and then, if the object is hidden, ask if you want it unhidden. The following macro does just that:
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
If you want the macro to only work on hidden objects and ignore those that are visible, then you can modify the macro to the following:
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
To simply make all the objects visible in one step, you can shorten the macro even more:
Sub ShowEachShape3()
Dim sObject As Shape
For Each sObject In ActiveSheet.Shapes
sObject.Visible = True
Next
End Sub
Tip #2025 applies to Microsoft Excel versions: 97 2000 2002 2003
More Power! Expand your skills and make Excel really sing! It's all possible with macros. The best resource anywhere for macros is ExcelTips: The Macros. Check it out today!
It doesn't matter if you are a beginner or expert, the ExcelTips archives are the fastest way to improve your productivity. (more information...)
Ask an Excel Question
Make a Comment
ExcelTips FAQ
ExcelTips Premium
Beauty Tips
Bugs and Pests Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Money Tips
Organizing Tips
Pet Tips
Word2007 Tips
WordTips
Advertise on the
ExcelTips Site