半角チルダ

ExcelVBA、その他。
覚え書きや、補足資料などのスクラップブック。
end-u(1037781)

■隠しオブジェクト

2008-04-04 22:00:00 | VBA Tips
ワークシート上のテキストボックスやシェイプを削除する時、シェイプの種別ごとに削除したい場合は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プロパティの一括設定時の制限について』です。
(前フリ長くてすみません:笑)

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)

Comment    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ■Application.DoubleClickメ... | TOP | ■CustomListの限界 »
最新の画像もっと見る

Recent Entries | VBA Tips