Written by Allen Wyatt (last updated June 12, 2021)
This tip applies to Excel 97, 2000, 2002, and 2003
Mike 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
Note:
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (2025) applies to Microsoft Excel 97, 2000, 2002, and 2003.
Program Successfully in Excel! John Walkenbach's name is synonymous with excellence in deciphering complex technical topics. With this comprehensive guide, "Mr. Spreadsheet" shows how to maximize your Excel experience using professional spreadsheet application development tips from his own personal bookshelf. Check out Excel 2013 Power Programming with VBA today!
Macros can be used to change the formatting of your worksheet, if desired. One change you might want to make is to the ...
Discover MoreDo you have a macro that need to read and write files? If so, then there is a good chance you need to specify the default ...
Discover MoreMacros often need to select different cells in a worksheet. Here's how you can use macro commands to change which cell is ...
Discover MoreFREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
There are currently no comments for this tip. (Be the first to leave your comment—just use the simple form above!)
Got a version of Excel that uses the menu interface (Excel 97, Excel 2000, Excel 2002, or Excel 2003)? This site is for you! If you use a later version of Excel, visit our ExcelTips site focusing on the ribbon interface.
FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2023 Sharon Parq Associates, Inc.
Comments