- ベストアンサー
エクセル/自動記録VBAが、なぜ実行時エラー?
エクセル2000です。 下記は自動記録で出来たマクロです。しかしこれが「実行時エラー1004:指定された値は境界を超えています。」となるんです。 Sub Macro2() ActiveSheet.Shapes.AddShape(msoShapeSun, 152.25, 67.5, 137.25, 125.25).Select Selection.ShapeRange.Adjustments.Item(1) = 0.3661 Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD5 End Sub 新しいブックをつくり、標準モジュールにコピーペーストで転記すればちゃんと作動するのですが、記録した元のブックではエラーになります。 デバッグを選択して、標準モジュールを開き、msoShapeSunのところにカーソルをあてると、「msoShapeSun=Empty 値」と出ました。 msoThreeD5も「msoThreeD5=Empty 値」と出ました。これが原因だと思いますが、どうしてこうなるのでしょう? どうかお教えください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Option Explicitは宣言していますか? ツール~参照設定でMicrosoft Office 9.0 Object Library(MSO9.DLL)にチェックはついていますか? msoShapeSunはMicrosoft Office 9.0 Object Library(MSO9.DLL)で定義されていますが、以下のように自分で宣言するとそちらの方が優先されますので、値が代入されるまではEmpty値になってしまいます。 Sub test() Dim a, msoShapeSun a = msoShapeSun End Sub 宣言文が無くても、MSO9.DLLに参照設定が無くOption Explicitも無い場合はエラーにならず、上記と同様のことになります。 そのあたり確認してみてはいかがでしょうか。
その他の回答 (1)
- brick
- ベストアンサー率12% (2/16)
これって再現性(新しいブックで自動記録→実行→エラー)ありますか? 同じように記録してみたのですが(↓)ちゃんと動きました。 Sub Macro4() ActiveSheet.Shapes.AddShape(msoShapeSun, 44.25, 36#, 153#, 147.75).Select Selection.ShapeRange.Adjustments.Item(1) = 0.3137 Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD5 End Sub
補足
はい、わたしも新しいブックでやれば正常に動くのです。 ただ、特定のブックでやるとエラーが出るのです。 その特定のブックがひとつやふたつならそのブックがおかしくなったのだろうで済ますのですが、今までためしたところ5つのブックでエラーになります。 5つのブックで共通しているのはかなりVBAを多用していることです。だからVBA同士の不都合があるのかとも考えましたが、エラーが発生するブックのVBAを新しいブックにコピーして、この問題のVBAと共存させても正常に動きました。
お礼
ありがとうございます。 Option Explicitは宣言していません。 というか、この宣言の仕方がよくわかりません。 よく標準モジュールの一番上に書いてあるのは見かけるのですが、ぜんぜんわかっていません。 エラーがでるブックをみたら、msoShapeSunはMicrosoft Office 9.0 Object Libraryがチェックになっていませんでした。これが原因なんですね?チェックを入れたところ動きました。まだ全部は試していませんが。