Mike ha avuto un problema in cui sapeva che c’erano oggetti nascosti nella sua cartella di lavoro e voleva trovarli tutti. Sembra che abbia scritto una macro che nascondeva alcuni oggetti, ma poi non li ha scoperti.

Se vuoi semplicemente scoprire i nomi degli oggetti in un foglio di lavoro, la seguente macro lo farà molto bene. Mostra non solo il nome, ma anche il tipo di oggetto.

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

Questa macro restituisce i nomi e i tipi di tutti gli oggetti nel foglio di lavoro.

Un altro approccio, tuttavia, consiste nel visualizzare tutti i nomi degli oggetti e quindi, se l’oggetto è nascosto, chiedere se lo si desidera non nascosto. La seguente macro fa proprio questo:

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

Se vuoi che la macro funzioni solo sugli oggetti nascosti e ignori quelli che sono visibili, puoi modificare la macro come segue:

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

Per rendere semplicemente visibili tutti gli oggetti in un solo passaggio, puoi accorciare ulteriormente la macro:

Sub ShowEachShape3()

Dim sObject As Shape     For Each sObject In ActiveSheet.Shapes         sObject.Visible = True     Next End Sub

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (2025) si applica a Microsoft Excel 97, 2000, 2002 e 2003.