Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


20431 / 76735 ←次へ | 前へ→

【61724】Re:図形の削除で「メモリー不足」エラーになってしまう
発言  kanabun  - 09/5/29(金) 21:57 -

引用なし
パスワード
   ▼始めたばかりの初心者 さん:
>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
--------------------------------------
くらいでどうでしょう?

0 hits

【61691】図形の削除で「メモリー不足」エラーになってしまう 始めたばかりの初心者 09/5/27(水) 21:45 質問
【61692】Re:図形の削除で「メモリー不足」エラーに... time 09/5/27(水) 22:18 発言
【61693】Re:図形の削除で「メモリー不足」エラーに... kanabun 09/5/27(水) 23:14 発言
【61701】Re:図形の削除で「メモリー不足」エラーに... 始めたばかりの初心者 09/5/28(木) 11:37 質問
【61711】Re:図形の削除で「メモリー不足」エラーに... time 09/5/28(木) 21:16 発言
【61720】Re:図形の削除で「メモリー不足」エラーに... 始めたばかりの初心者 09/5/29(金) 9:21 質問
【61721】Re:図形の削除で「メモリー不足」エラーに... time 09/5/29(金) 15:40 発言
【61724】Re:図形の削除で「メモリー不足」エラーに... kanabun 09/5/29(金) 21:57 発言
【61733】Re:図形の削除で「メモリー不足」エラーに... 始めたばかりの初心者 09/5/30(土) 12:32 お礼
【61746】Re:図形の削除で「メモリー不足」エラーに... time 09/5/31(日) 0:28 お礼

20431 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free