マイクは、自分のワークブック内にオブジェクトが隠されていることを知っていて、それらすべてを見つけたいという問題を抱えていました。彼はいくつかのオブジェクトを隠すマクロを書いたようですが、それからそれらを再表示しませんでした。

ワークシート内のオブジェクトの名前を簡単に調べたい場合は、次のマクロを使用すると非常にうまくいきます。名前だけでなく、オブジェクトのタイプも表示されます。

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

このマクロは、ワークシート内のすべてのオブジェクトの名前とタイプを返します。

ただし、別のアプローチは、すべてのオブジェクト名を表示してから、オブジェクトが非表示になっている場合は、非表示にしないかどうかを尋ねることです。次のマクロはまさにそれを行います:

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

マクロを非表示のオブジェクトに対してのみ機能させ、表示されているオブジェクトを無視する場合は、マクロを次のように変更できます。

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

すべてのオブジェクトを1つのステップで表示するだけで、マクロをさらに短くすることができます。

Sub ShowEachShape3()

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

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2025)は、Microsoft Excel 97、2000、2002、および2003に適用されます。