- 締切済み
VBAで図のindex番号を変数に挿入したら・・・
VBAで、オートシェイプのインデックス番号を変数に挿入すると途中で初期化されてしまいました。 VBAのチェックボックスを用いて各チェックボックスごとに、 ある画像の座標からAX,AY+aの位置に幾つかの円を表示し、 チェックを外すと作成した円を削除するプログラムを作っています。 また、最終的にはチェックボックスを複数(10~15)個作ってそれに対応した 円だけを表示するようなプログラムにしたいと考えています。 下のプログラムをデバックすると※2の部分で変数の値が""、 最終的に※3の行で止まってしまいます。 Option Explicit Public i As Long '繰り返し変数定義 Public ix As Integer '繰り返し回数変数定義 Public X As Integer '基準位置情報変数定義(x軸) Public Y As Integer '基準位置情報変数定義(y軸) Public AX As Integer '移動位置情報変数定義(x軸) Public AY As Integer '移動位置情報変数定義(y軸) Private Sub CheckBox1_Click() Static O() As Variant Y = ActiveSheet.Shapes("Picture 1“).Top '図の上端の位置を変数に挿入 X = ActiveSheet.Shapes("Picture 1").Left '図の左端の位置を変数に挿入 i = 0 ix = 3 '繰り返し回数を変数に挿入 ReDim O(ix) AX = X + 500 AY = Y + 280 '--------------------------------------------------- If CheckBox1.Value = True Then 'チェック有 Do Until i = ix ActiveSheet.Shapes.AddShape(msoShapeOval, AX + (i * 24), AY, _ 16, 16).Select O(i) = Selection.Index MsgBox O(i) ※1 i = i + 1 Loop End If MsgBox O(i) ※2 If CheckBox1.Value = False Then 'チェック無 i = 0 Do Until i = ix ActiveSheet.Shapes.Range(O(i)).Delete ※3 i = i + 1 Loop End If End Sub ↑のようなプログラムを組むと、チェック有の If 終了時 ※2のMsgBox O(i)でO(i)が初期化?されて値が表示されなくなってしまっていま す。 IFの処理中(※1)ではO(i)の値が正常に出力されていたので、 IF終了時に値がなくなっていると思うのですが、 どういった現象が起きているのでしょうか? また、作成した円を上手く削除するにはどうすれば良いでしょうか? この形にこだわっているわけではないので、もっといい方法があれば ご教授頂けると幸いです。 どうかよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mitarashi
- ベストアンサー率59% (574/965)