| 
    
     |  | ▼始めたばかりの初心者 さん: >shape.Typeで調べた処、「フォームコントロール」でした。
 >ただそのシートにはユーザーフォームは無く、(中略)−Visual Basic
 >Editorで見てもフォームはありませんでした。
 
 その「フォームコントロール」というのは、シート上の(フォーム
 ツールバーから貼り付けた)ボタンやチェックボックスやComboBox
 のことで、UserFormとは何ら関係ありません。
 
 試しに、以下の2つのコードを標準モジュールにコピペし、
 --------------------------------------
 Sub All_Shape()
 Dim shpType(-2 To 21) As String
 Dim i As Long
 
 shpType(-2) = "msoShapeTypeMixed"
 shpType(1) = "msoAutoShape"
 shpType(2) = "msoCallout"
 shpType(3) = "msoChart"
 shpType(4) = "msoComment"
 shpType(5) = "msoFreeform"
 shpType(6) = "msoGroup"
 shpType(7) = "msoEmbeddedOLEObject"
 shpType(8) = "msoFormControl"
 shpType(9) = "msoLine"
 shpType(10) = "msoLinkedOLEObject"
 shpType(11) = "msoLinkedPicture"
 shpType(12) = "msoOLEControlObject"
 shpType(13) = "msoPicture"
 shpType(14) = "(msoPlaceholder)"
 shpType(15) = "msoTextEffect"
 shpType(16) = "(msoMedia)"
 shpType(17) = "msoTextBox"
 shpType(18) = "msoScriptAnchor"
 shpType(19) = "msoTable"
 shpType(20) = "msoCanvas"
 shpType(21) = "msoDiagram"
 
 With ActiveSheet
 If .Shapes.Count > 0 Then
 Dim shp As Excel.Shape
 For Each shp In .Shapes
 i = i + 1
 Debug.Print "'("; i; ")"; """"; shp.Name; """"; _
 Tab(27); shpType(shp.Type)
 Next
 End If
 End With
 End Sub
 ---------------------------------------------------
 Sub All_DrawingObject()
 Dim obj, i As Long
 For Each obj In ActiveSheet.DrawingObjects
 i = i + 1
 Debug.Print "'("; i; ")"; """"; obj.Name; """"; _
 Tab(27); TypeName(obj)
 Next
 End Sub
 ---------------------------------------------------
 
 テスト用ダミーシートに AutoFilterがかけれるような簡単な表
 を作成し、さらに
 ・コメント、
 ・入力規則(リストのもの)、
 ・フォームツールバーからButton, OptionButton, Spinner(スピンボタン)
 CheckBox, ListBoxなど、
 ・コントロールツールボックスから 同様のActiveXコントロール、
 ・さらに、「図形描画」ツールバーからテキストボックス、四角形
 を貼り付け、この2つの図形には「あいうえお」など適当な文字列を
 挿入しておき、
 表にAutoFilterをかけ▼を表示して、さらに入力規則のあるセルを
 選択し、ドロップダウン▼が表示された状態で、
 
 > Sub All_Shape()
 を実行してみてください。
 これを実行すると、こちらのシートでは↓こうなりました。
 
 '( 1 )"Comment 11"     msoComment   コメント
 '( 2 )"Button 24"     msoFormControl フォーム
 '( 3 )"Option Button 25"  msoFormControl フォーム
 '( 4 )"Check Box 26"    msoFormControl フォーム
 '( 5 )"Spinner 27"     msoFormControl フォーム
 '( 6 )"List Box 28"    msoFormControl フォーム
 '( 7 )"CommandButton1"   msoOLEControlObject
 '( 8 )"OptionButton1"   msoOLEControlObject
 '( 9 )"CheckBox1"     msoOLEControlObject
 '( 10 )"SpinButton1"    msoOLEControlObject
 '( 11 )"ComboBox1"     msoOLEControlObject
 '( 12 )"Text Box 34"    msoTextBox   テキストボックス
 '( 13 )"Rectangle 35"   msoAutoShape  テキストボックス
 '( 14 )"Drop Down 57"   msoFormControl 入力規則の▼
 '( 15 )"Drop Down 58"   msoFormControl AutoFilterの▼
 '( 16 )"Drop Down 59"   msoFormControl
 '( 17 )"Drop Down 60"   msoFormControl
 '( 18 )"Drop Down 61"   msoFormControl
 '( 19 )"Drop Down 62"   msoFormControl
 '( 20 )"Drop Down 63"   msoFormControl
 '( 21 )"Drop Down 64"   msoFormControl
 '( 22 )"Drop Down 65"   msoFormControl
 '( 23 )"Drop Down 66"   msoFormControl
 '( 24 )"Drop Down 67"   msoFormControl
 
 さらにそのままのシート状態(AutoFilterがかかっていて、入力規則の
 ▼が1か所表示された状態)で、2番目のプロシージャ
 > Sub All_DrawingObject()
 を実行してみてください。
 
 こちらの例では、こうなりました。
 '( 1 )"Button 24"     Button
 '( 2 )"Option Button 25" OptionButton
 '( 3 )"Check Box 26"   CheckBox
 '( 4 )"Spinner 27"    Spinner
 '( 5 )"List Box 28"    ListBox
 '( 6 )"CommandButton1"  OLEObject
 '( 7 )"OptionButton1"   OLEObject
 '( 8 )"CheckBox1"     OLEObject
 '( 9 )"SpinButton1"    OLEObject
 '( 10 )"ComboBox1"    OLEObject
 '( 11 )"Text Box 34"   TextBox
 '( 12 )"Rectangle 35"   TextBox
 
 2つの結果より明らかなように、
 Shapes には シート内のAutoFilterのドロップダウンも、入力規則の
 ▼もふくめたすべての図形が含まれています。
 そして、Shapesコレクションでは、入力規則の▼もAutoFilterの▼も
 本来のフォームツールバーから貼り付けた「フォームコントロール」
 たちと同じType名である「msoFormControl」という名前に分類されて
 います。
 他方の DrawingObjects のほうには
 「入力規則」と「AutoFilter」のドロップダウン▼は含まれていません。
 かつ、図形描画のテキストボックスも四角形も内部にテキストを挿入
 しましたので、objectの種類は 両方とも「TextBox」となっています。
 
 以上が、Shapesコレクションと DrawingObjectsコレクションのちがい
 です。
 
 
 >いる場合、フォームコントロールを削除する事は可能ですしょうか?
 Shapesでループして、Typeが「msoFormControl」であるものを
 すべて削除してしまうと、入力規則の▼とか AutoFilterのドロ
 ップダウン▼までも削除することになるので、困ったことになり
 ませんか?
 
 > メモ代わりに挿入した
 > オートシェイプの図形
 だけを削除したいのなら、
 --------------------------------------
 dim ws as Worksheet
 For each ws in ActiveWorkbook.Worksheets
 ws.TextBoxes.Delete
 Next
 --------------------------------------
 くらいでどうでしょう?
 
 
 |  |