Michele aveva un problema: sapeva che c’erano oggetti nascosti nella sua cartella di lavoro e voleva trovarli tutti. Pare che tali oggetti siano stati nascosti da una macro che aveva scritto, ma poi che non li abbia più 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(31) As String
'Imposta i vari tipi di oggetto
objType(1) = "AutoShape"
objType(2) = "Callout"
objType(3) = "Chart"
objType(4) = "Comment"
objType(5) = "Freeform"
objType(6) = "Group"
objType(7) = "Embedded OLE object"
objType(8) = "Form control"
objType(9) = "Line"
objType(10) = "Linked OLE object"
objType(11) = "Linked picture"
objType(12) = "OLE control object"
objType(13) = "Picture"
objType(14) = "Placeholder"
objType(15) = "Text effect"
objType(16) = "Media"
objType(17) = "Text box"
objType(18) = "Script anchor"
objType(19) = "Table"
objType(20) = "Canvas"
objType(21) = "Diagram"
objType(22) = "Ink"
objType(23) = "Ink comment"
objType(24) = "SmartArt graphic"
objType(25) = "Slicer"
objType(26) = "Web video"
objType(27) = "Content Office Add-in"
objType(28) = "Graphic"
objType(29) = "Linked graphic"
objType(30) = "3D model"
objType(31) = "Linked 3D model"
objList = ""
'Ottiene il numero di oggetti presenti nel foglio
objCount = ActiveSheet.Shapes.Count
If objCount = 0 Then
objList = "Non ci sono oggetti in " & _
ActiveSheet.Name
Else
objPlural = IIf(objCount = 1, "o", "i")
objList = "Ci sono " & Format(objCount, "0") _
& " oggett" & objPlural & " in " & _
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 vuole scoprire. La seguente macro fa proprio questo:
Sub ShowEachShape1()
Dim sObject As Shape
Dim sMsg As String
For Each sObject In ActiveSheet.Shapes
sMsg = "Trovato oggetto " & IIf(sObject.Visible, _
"visibile", "nascosto") & _
vbNewLine & sObject.Name
If sObject.Visible = False Then
If MsgBox(sMsg & vbNewLine & "Scoprirlo?", _
vbYesNo) = vbYes Then
sObject.Visible = True
End If
Else
MsgBox sMsg
End If
Next
End Sub
Se desideri che la macro funzioni solo su oggetti nascosti e ignori quelli 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 = "Oggetto " & sObject.Name & _
" è nascosto, scoprirlo?"
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