Microsoft Access Club >VBA物語 >このページ >次頁 < 前項  サイト内検索


VBA設定オプション_変数の宣言を強制する:VBA物語16



前回から、「VBA設定オプション」を取り上げています。VBAを記述していく上で、これらの知識をホント大事です。邪魔くさくてもじっくり理解していきましょうね。

今回は、「変数の宣言を強制する」にスポットを当ててみましょう。下記の図でいいますと、2番目の項目です。

「変数を事前に宣言しておくのは、当たり前じゃないか!」このように理解されている方は、VBAの良き理解者です。「変数は宣言する必要があるの?」とお思いの方は初心者の方か、それともある意味で上級者の方です。

VBAの元はVBです。そして、VBはBasic言語に端を発します。
このBasic言語はとても柔軟な言語で、事前に変数を定義しなくても自動的に変数と理解させることができるんです。
以前、変数のデータ定義のところで、Variant型についてお話しました。何でも飲み込んでしまうデータ型でしたよね。数値と文字列とで足し算もできるように…。そして、宣言していない変数は全てこのVariant型としてデータ定義されます。

でも、この柔軟さが時にはデメリットになることがあります。
「スペルミス」という言葉をご存知ですね。Linkと記述したつもりがRinkとなってしまったり…。作成者は全然気づかないんですよ。この場合、プロシージャの実行が止まります。当然です。
※アルファベットの大文字、小文字は無視されます。つまり、同義語として扱われます。

このチェック項目は、事前に宣言を強制するかどうかを作成者が決めることができるものです。普通はチェック済みにします。すると、モジュールの標準宣言領域に下記のような記述がいつも自動的に付加されます。

Option Explicit 

では、「変数の強制を宣言」してあるのに宣言しなかった場合はどのようになるのでしょうか?下記サンプル図をご覧下さい。

変数(と作者が考えている) strmsg を前もって宣言せずに、MsgBoxステートメントに直接用いています。この場合、VBAが「エラー」と認識する段階は何処でしょう?回答は「コンパイルの直前」です。コンパイルとは"マシン語"に変換することでしたね。コンピュータは全て二進数のマシン語で動いています。よって、コンパイルを行う行為は、

  1. デバック処理を行う。
  2. プロシージャを実行する。

この2種類の行為の直前にコンパイルがなされます。

上記の誤ったプロシージャでも"保存"は何の問題もなく行うことができますので、初心者の方は"これで記述は完了済み"と思いがちです。この考えは間違っていますから、プロシージャを記述し終われば、必ず「ツールバー」の「デバッグ」から「コンパイル」を行うよう習慣付けましょう。

話を元に戻しますと、先ほどのプロシージャを「デバック」又は「実行」すると下記のエラーメッセージが表示されます。

え、どのように定義するの?って…。仕方ないですね。下記のようにして下さい。

    Dim strmsg As String
    strmsg = "楽しいかい"

    MsgBox strmsg

これでOKです。今回はこのぐらいにしておきます。次回も引き続き設定プロパティを取り上げます。

関連ページ

2001/11/24

ページの先頭へ 前ページへ戻る


VBA設定オプション_変数の宣言を強制する:VBA物語16


 

-Microsoft Access Club-