Giải nén hoặc liệt kê tất cả các đối tượng (Microsoft Excel)
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.