DrawingObjects … ちまちま vs 一気
DrawingObjects 一族(Buttons や Lines とか)は、ループでちまちまと処理した場合とコレクションに対して一気に処理した場合で結果が違うことがあるようです。
Sub Macro1() Dim i As Object For Each i In ActiveSheet.DrawingObjects i.Delete Next i End Sub Sub Macro2() ActiveSheet.DrawingObjects.Delete End Sub
上の2つのマクロは一見同じ結果になるように思えます。
いや、余計なことをしなければ事実同じ結果になります。
しかし、、、不可視のオブジェクトがいると、そうでもないことが分かります。
Macro1 は可視/不可視に関わらずオブジェクトを削除しますが、Macro2 は可視のオブジェクトしか削除しません。
このことを応用すれば、例えばシート上にボタンを置いて、そのボタンをクリックしたら、そのボタン以外のそのシート上の図形を全て削除したいなんて場合に
Sub Button_Click() With ActiveSheet .Buttons(Application.Caller).Visible = False .DrawingObjects.Delete .Buttons(Application.Caller).Visible = True End With End Sub
と、さっくりと書くことができます。
※.Excel World の 2007年2月19日 12:39 の日記をコピーしています。
http://excel.sns.fc2.com/excel/