Mostrare o elencare tutti gli oggetti (Microsoft Excel)
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.