Scoprire o elencare tutti gli oggetti in una cartella di lavoro di Excel

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

 

 

 

Tags: , , , , , , , , , , , ,

Ti è stato utile?