Mike gặp vấn đề khi biết rằng có những đối tượng ẩn trong sổ làm việc của mình và anh ấy muốn tìm tất cả chúng. Có vẻ như anh ta đã viết một macro để ẩn một số đối tượng, nhưng sau đó không ẩn chúng.

Nếu bạn chỉ muốn tìm ra tên của các đối tượng trong một trang tính, thì macro sau sẽ làm điều đó rất độc đáo. Nó không chỉ hiển thị tên, mà còn hiển thị loại đối tượng.

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(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

Macro này trả về tên và kiểu của tất cả các đối tượng trong trang tính.

Tuy nhiên, một cách tiếp cận khác là hiển thị tất cả các tên đối tượng và sau đó, nếu đối tượng bị ẩn, hãy hỏi xem bạn có muốn nó được bỏ ẩn hay không. Macro sau thực hiện điều đó:

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

Nếu bạn muốn macro chỉ hoạt động trên các đối tượng ẩn và bỏ qua những đối tượng hiển thị, thì bạn có thể sửa đổi macro thành như sau:

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

Để đơn giản là hiển thị tất cả các đối tượng trong một bước, bạn có thể rút ngắn macro hơn nữa:

Sub ShowEachShape3()

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

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (2025) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.