マクロ作成後、実行したら以下のエラーが発生して実行できない!なんてことないでしょうか?
今回は「コンパイルエラー:変数が定義されていません。」が出る原因と対処法を備忘録も兼ねて残しておきたいと思います。
エラーが発生して困っている方に少しでもお役に立てればと思います。
エラーが発生する原因
原因
結論から言うと変数の宣言をしていない時に発生する可能性があります。
コードエディタに以下の記述を見かけたことはないでしょうか?
Option Explicit
一見「なんのこっちゃ?」と思いますが、ざっくり言うと「変数の宣言を必ずしてください!」という命令になります。Option Explicitが記述されているのに変数の宣言(Dim …)をせずに変数を使用するとコンパイルエラーが発生します。
厳密に言えば「変数の宣言を強制されている(Option Explicitがある)状態で変数の宣言をしていない」時に発生する感じです。
なので、このエラーが出た場合は「各変数の宣言をしているか」確認してみましょう。
Option Explicitについて
なんでこんなもんがあるのかというと、実はVBAは変数の宣言をしなくても変数を使用することが出来ちゃいます。
「ほんまか?」と思う方もいると思うので、試しにまっさらなコードエディタ上に下記コードを貼り付けて実行してみてください。
Sub test()
buf_str = "はりぼなブログ"
MsgBox buf_str
End Sub
・・・はい、普通に実行できます。というか、出来てしまいます。
普通はDim …で変数の宣言してからその変数を使いますが、実は書かなくてもマクロは動くのです。
Dim buf_str As String
しかし、変数の宣言をしておかないとエラーが発生したり思わぬ挙動をしたりする可能性があり危険です。それを未然に防いでくれるのがOption Explicitです。
デフォルトで変数の宣言を強制させる
環境によっては、Option Explicitがデフォルトで記述されていたりされていなかったりします。特に初めてVBAを使用する方の場合、記述されていない可能性が高いです。
先程も言いましたが、ぶっちゃけ変数を宣言しなくても変数は使えますしマクロも作成できます。
が、変数の型が不明だと思わぬ挙動やエラーが起きかねない為、変数の宣言を強制させるOption Explicitは必ず記述しておくべきです。
とはいえ毎回Option Explicitを書くのも面倒なので、デフォルトで記述してくれる設定を紹介します。
やり方
デフォルトで変数の宣言を強制させるにはコードエディタ上部にある「ツール」内の「オプション」をクリックします。
すると以下のようなダイアログボックスが出てくるので、「編集」タブ内の「コードの設定」にある、「変数の宣言を強制する」にチェックを入れ、OKを押します。
これで設定は完了です。
試しに新しい標準モジュールを作成してみてください。
一番上にOption Explicitが記述されているはずです。
余談
余談ですが、「変数の宣言を強制する」にチェックが入っている状態でOption Explicitをコードから削除しても変数の宣言は強制されず、コンパイルエラーにはなりません。
逆にチェックが入っていなくてもOption Explicitが記述されていれば変数の宣言は強制されます。
要は「コード内にOption Explicitがあるかどうか」が判断基準になるので、覚えておきましょう。
まとめ
今回は「コンパイルエラー:変数が定義されていません。」が出る原因と対処法を紹介しました。
変数が定義されていません。のエラーが発生する時は、変数の宣言を忘れていないか確認するようにしましょう。
また、デフォルトで変数の宣言を強制させたい時は以下手順で設定しましょう。
- 「ツール」→「オプション」をクリック
- 「編集」タブ内の「コードの設定」にある、「変数の宣言を強制する」にチェックを入れ、OKを押す※新しく標準モジュールを作成してOption Explicitがあるか確認
また、今回のようにPC・Excel関係のトラブルについての記事を不定期で投稿していますので、是非参考にしていただければ幸いです!
コメント