|
▼りー さん:
こんにちは。ちょっとお邪魔します。
> 最後に実行した分のオートシェイプだけが表示されるように
> できればいいのですが
>あった場合、それぞれの選択に対してオートシェイプを表示し、
>前回実行分のオートシェイプは消去するというようなことはできるの
>でしょうか?
最初の質問と2回目の質問のちがいがよく分からないので、
まとめて、一般論ですが、、
描画して、最後に描画したオートシェイプ以外削除する のでなく、
現在のシート上のオートシェイプを消しておいてから、
目的のオートシェイプを描画すればいい、ような気がします。
あと、Shapesコレクションにはオートシェイプ以外にも、
グラフはもちろん、コメントや入力規則のドロップダウン▼や
オートフィルタをかけていれば、そのドロップダウン▼も含まれます。
ですから、
現在のシート上の「オートシェイプをすべて消してから」という
目的で、
Dim shp As Shape
Dim i As Integer
For i = ActiveSheet.Shapes.Count To 1 Step -1
ActiveSheet.Shapes(i).Delete
Next
とやったりすると、コメントや入力規則リストまで削除されてしまい、
シートの構成によっては、以後使い物にならないシートに変わってし
まう恐れがあります。
Shapesコレクションではなく、
ActiveSheet.DrawingObjects.Delete
というステートメントを使いましょう。
オプションボタンで描画しているのが、いつも「楕円」ならば
'(1)シート上にあるすべての楕円を消す
ActiveSheet.Ovals.Delete
'(2)あたらしい楕円の描画
ここにマクロで実行しているコードを書く
のように、図形を制限して実行すれば For〜Loopしなくて済みます。
以上、一般論でした。
|
|