|
▼始めたばかりの初心者 さん:
>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
--------------------------------------
くらいでどうでしょう?
|
|