処理の先頭に書かれる「Option Explicit」↓
VBAの入門書などで「Option Explicit」は書かなくてもOK!なんて記事を見たことがありますが、私はこれは絶対書くべきだと思っています。
また、実際の現場でもこれが書いていないことは、今のところ見たことがありません。
英語だし何か苦手だなぁと思うかもしれませんが、丁寧に説明しますので参考にしてください。
Option Explicitとは
「Option Explicit」とは「変数を使いたかったら宣言しないと使えないよ!」という意味です。
モジュールの先頭部分(宣言セクションと言います)に書く必要があり、そのモジュール内では、必ず変数は宣言しないとエラーになります。
変数を宣言するとは、↓の図でいうと「Dim ~」というところです。
この例では、「name」という変数を宣言し、その下の処理で、その宣言した[name]を使っています。
実行してみると・・・
「OK」というメッセージボックスが表示されます。
これを、試しに、「Dim ~」の1行を削除してみます。
この状態で実行すると、どうなるか・・・
はい、エラーになりました。「Option Explicit」と書いているのに、変数を宣言していないからです。
では次は、「Option Explicit」も消してみます。つまり、「Option Explicit」も「変数の宣言」もない状態です。
これで実行してみると・・・
今度はエラーがなく実行できました。
Option Explicitと書くなら、絶対に変数を宣言しないといけないということが、これで分かりました。
Option Explicitの設定
この「Option Explicit」ですが、実は、自動で必ず書いてくれるようになる設定があります。もし、使っているマクロでこの「Option Explicit」が書かれていない場合は、設定してみてください。
まず、VBEのメニューの[ツール][オプション]をクリックします。
オプション画面が表示されるので、[変数の宣言を強制する]にチェックを入れて[OK]です。
これで、処理の先頭に「Option Explicit」が自動で書かれます。
Option Explicitを設定しないと起きてしまう問題
では、本題に。この「Option Explicit」は必要なのか?について。
さっき実験したときは、「Option Explicit」も「変数の宣言」も書かなければ、問題なく実行できましたよね。
じゃーどっちも書かない方が楽じゃないか!!って思うかもしれません。
でもこれ、必ず書くべきだと思うんです。次に紹介する実例2つを見てください。
変数名の間違いに気づきにくい
こんな処理を書いたとします。「Option Explicit」も「変数の宣言」もありません。
実行してみます。
”OK”と表示されるはずが、空のメッセージボックスが表示されてしまいました。
コードをよく見てみると「MsgBox namae」の部分が間違っていますね。正しくは「MsgBox name」です。変数のつづりを間違えてしまったんですね。
これを、ちゃんと「Option Explicit」も「変数の宣言」も書いて実行するとどうでしょうか・・・
エラーが表示され、間違いがあることを教えてくれました。
今回はこんなに短いコードなのですぐ気づくかもですが、これが数百行とかのコードになると、気づくのは難しいですよね。
変数の型が勝手に判断される
次の例です。次も、「Option Explicit」も「変数の宣言」もありません。
実行すると・・・
「1」と表示されました。うん、何もおかしくはなさそうです。
では、「Option Explicit」と「変数の宣言」を追加してみます。変数は数値ではなく「Boolean」にしてみました。
実行してみると・・・
今度は「1」ではなく「True」と表示されました。「数値」ではなく「Boolean」として判断されています。
このように、変数の型を宣言するとしないとでは、全然結果が変わってくることがあるんです。なので、ちゃんとあえて型を宣言した方がいいのです。
まとめ
どうだったでしょうか。
やはり「Option Explicit」は書くべきだと思います。書くことによって「型」を意識しないといけなくなりますが、そこは訓練です!慣れれば大丈夫。慣れましょう。
実際の現場ではほぼ書いてあることが多いです。これがないと保守性も悪くなるので、まずこれは必須だと覚えておいた方がいいです。