「みんな教えて! 選手権!!」開催のお知らせ

EXCEL VBAで図形を描画するものを作成して動かしていました。
今までは通常に動作していたのですが、ある時から急に下記メッセージが表示してしまい。
それ以降、エラーが出続けています。

実行時エラー1004 Rectangleクラスのselectメソッドに失敗しました。

その図形を選択すると、四角形65580となっており、65536を超えている
からかと想定しています。
図形の作成数を初期化すれば直るような気もしますが、どなたか
原因と対処方法が分かる方はいらっしゃらないでしょうか?

なお下記の様に記述しています。

Sheets(シート名).Select
ActiveSheet.Rectangles.Add(変数1,変数2,変数3, 変数4).Select
Selection.Interior.ColorIndex = 変数5
Selection.SendToBack

A 回答 (2件)

僕もカウント100万以上まで育った子もってます。

今にも爆発しそうでドッキドキ。すこし調べなきゃとは思ってますが、カウント初期化はできないかも・・・。
そして、問題原因は別じゃないかと。
想定で終わらず、裏付け取らなきゃキケンですよ。


というか、こんな問題では?↓

-- myメモ帳より --
Excel2003、再描画ON(ScreenUpdating=True:デフォルト値)で、大量のシェイプを描画すると、1004エラーが発生することあり。
ShapesのAddTextBox/Group/Deleteで発生を確認。
 ・発生頻度低(デバッグの中断がトリガー??)
 ・一度発生すると毎回発生
 ・エラー発生後、「継続」やステップ実行が可能
ファイルが壊れるっぽいので、要ファイル再作成。
現象から、おそらく描画絡み。タイミングや負荷が影響?
対処としては、
 ◎ScreenUpdating = False
 △直前でシートやシェイプを.Select/.Activate
------

同一問題だといいんですが、どっちにしても不明だらけ。Excelが図形まわり弱いのだけは確かです。とりあえずファイル作り直してみて、再発さえしなければ忘れてよい気も。
分からないなら受け入れるしか・・・

一応対策として、ScreenUpdating = Falseと、Selectしないのがオススメです。
 Dim s as Rectangle
 Set s = Sheets(シート名).Rectangles.Add(...)
 s.Interior.ColorIndex = 変数5
 s.SendToBack
    • good
    • 0

そのBookの中で該当シートのコピーをつくり


元のシートを削除し、コピー作成したシートを元の名前につけなおしてください。
    • good
    • 0
この回答へのお礼

DreamyCatさん、ありがとうございます。
確かに言われたやりかたで、できるようになりました。

1回の操作で1.5万個位の描画をするので5回程度の
実行でまたエラーになってしまいそうです。

本操作をマクロ化すればよいのかもしれませんが、
マクロで数値を初期化する手段はないものでしょうか?

お礼日時:2012/02/19 11:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報