ワークシート上のテキストボックスやシェイプを削除する時、シェイプの種別ごとに削除したい場合はLoop処理で判定しながら削除しますが、種別関係なく削除したい場合は
ActiveSheet.DrawingObjects.Delete
とします。
この場合、Pictures や ChartObjects なども削除されます。
Pictures や Rectangles , Ovals , TextBoxes など、種別を指定して削除する事もできます。
(TextBoxes の場合は、Rectangles や Ovals に[テキストの追加]をしている場合も含まれるので注意が必要)
DrawingObjects や TextBoxes , Pictures...などは[隠しオブジェクト]であり、バージョン95以前との互換性を保持するために残っています。
Excel2000までのヘルプファイル VBAXL9.CHM には[隠しオブジェクト]についての記述がありますが、2002以降の VBAXL10.CHM には記述がないようです。
これもApplicationクラスの関数と一緒で、いつまでサポートされるかわかりません...便利なのですが。
例えば TextBoxes 一括削除の場合
ActiveSheet.TextBoxes.Delete
これはTextBoxがなくてもエラーにはなりません。
また、TextBoxの検索などで、HitしたTextBoxに画面遷移したい時など
ActiveSheet.Shapes(1).Select
では選択されるだけで画面遷移しませんが、
ActiveSheet.TextBoxes(1).Select
や
ActiveSheet.Shapes(1).DrawingObject.Select
などは画面遷移を伴います。
Shapeオブジェクトを扱う時、色々と振る舞いが違う場合があるので、知っておくとコーディングの幅が広がるかもしれません。
さて、そこで今日の実験は 『TextBoxesのFontプロパティの一括設定時の制限について』です。
(前フリ長くてすみません:笑)
これで100個のTextBoxが作成されます。
Interiorプロパティなどの設定は一括でできるのですが、
Fontプロパティはエラーで設定できません。
どうも1度に設定できるのは70個までのようです。
複数選択して、手動でやる場合はエラーメッセージが出るわけでもなく、プロパティウィンドウが開かないだけのようです。
(ぃや、知っててもあまり役に立ちそうもない情報ですね...orz)
ActiveSheet.DrawingObjects.Delete
とします。
この場合、Pictures や ChartObjects なども削除されます。
Pictures や Rectangles , Ovals , TextBoxes など、種別を指定して削除する事もできます。
(TextBoxes の場合は、Rectangles や Ovals に[テキストの追加]をしている場合も含まれるので注意が必要)
DrawingObjects や TextBoxes , Pictures...などは[隠しオブジェクト]であり、バージョン95以前との互換性を保持するために残っています。
Excel2000までのヘルプファイル VBAXL9.CHM には[隠しオブジェクト]についての記述がありますが、2002以降の VBAXL10.CHM には記述がないようです。
これもApplicationクラスの関数と一緒で、いつまでサポートされるかわかりません...便利なのですが。
例えば TextBoxes 一括削除の場合
ActiveSheet.TextBoxes.Delete
これはTextBoxがなくてもエラーにはなりません。
また、TextBoxの検索などで、HitしたTextBoxに画面遷移したい時など
ActiveSheet.Shapes(1).Select
では選択されるだけで画面遷移しませんが、
ActiveSheet.TextBoxes(1).Select
や
ActiveSheet.Shapes(1).DrawingObject.Select
などは画面遷移を伴います。
Shapeオブジェクトを扱う時、色々と振る舞いが違う場合があるので、知っておくとコーディングの幅が広がるかもしれません。
さて、そこで今日の実験は 『TextBoxesのFontプロパティの一括設定時の制限について』です。
(前フリ長くてすみません:笑)
Sub pre() 'サンプルシート作成 Dim x As Long Dim y As Long Dim n As Long With Sheets.Add For x = 1 To 20 Step 2 For y = 1 To 20 Step 2 n = n + 1 .Cells(y, x).Value = n With .Cells(y, x + 1) .Worksheet.TextBoxes.Add .Left, .Top, .Width, .Height End With Next Next .TextBoxes.Interior.ColorIndex = 15 End With End Sub
これで100個のTextBoxが作成されます。
Interiorプロパティなどの設定は一括でできるのですが、
Sub test1() On Error GoTo errHndlr With ActiveSheet.TextBoxes .Interior.ColorIndex = 20 .Text = "A" .Border.ColorIndex = 3 .Font.Size = 10 'エラー End With errHndlr: If Err.Number <> 0 Then MsgBox Err.Number & vbLf & Err.Description End If End Sub
Fontプロパティはエラーで設定できません。
どうも1度に設定できるのは70個までのようです。
Sub test2() Dim i As Long With ActiveSheet .Range("A1").Select For i = 1 To 70 .TextBoxes(i).Select False Next Stop Application.DoubleClick Stop .TextBoxes(71).Select False Application.DoubleClick End With End Sub
複数選択して、手動でやる場合はエラーメッセージが出るわけでもなく、プロパティウィンドウが開かないだけのようです。
(ぃや、知っててもあまり役に立ちそうもない情報ですね...orz)