例)Dim asx As springのところでエラーになるプログラム
Sub aaa()
Cells(1, 1).Value = 123
End Sub
Sub bbb()
Dim asx As spring
End Sub
これで、sub aaa()を実行すると
VBEのオプション:全般の順次コンパイルにチェックがある場合、
aaa()は実行され、正常終了します。
⇒
wikiなどにある「インタプリタ(interpreter)とは・・・逐次解釈しながら実行するプログラムのこと。」の通り、処理するサブルーチンを処理する順番にコンパイル(解釈)しながら実行しています。
VBEのオプション:全般の順次コンパイルにチェックがない場合、
sub bbb()の
Dim asx As spring
のところがエラー表示され、aaa()は実行されません。
逐次解釈しながら実行するプログラムとはいえないですね。
しかし、aaa()を
Sub aaa()
Cells(1, 1).Value = 123
a == 1
End Sub
とすると、どちらの場合も
Cells(1, 1).Value = 123
は処理されず、a == 1でエラーになります。
VBEのオプション:全般の順次コンパイルにチェックがない場合、
インタープリターといっても、行単位の逐次解釈ではないですね。
あくまで、サブルーチン単位の逐次解釈です。
wikiの「基本的には」となっているところが、どういう意図かは知りませんが、
実行時コンパイラがVBAでは勝手に動いていると思ったほうがいいような気もします。
(本題ではなさそうなので詳しくはやめておきます。)
「VBAProjectのコンパイル」機能は、エラーチェック目的で、実行時に行われるコンパイルを
テスト実行しているだけと思えばいいのでは?
※
コンパイルといってもファイル出力しているのではなくメモリ上に展開しているだけ
かもしれません。(詳細不明)
なお、「VBAProjectのコンパイル」実行しただけで、ファイルサイズが大きくなっているから、
これをやっておくと、実行時に行われるコンパイルがすでに済んだ状態になって
少し早いのかもしれません。
ただし、マクロを1回実行しただけで保存しても同様にファイルサイズは大きくなるので、
どちらをやってもあまり違いはないかと思います。
(同じサイズにならないところがまた良く分からないけど。
どちらにしろ、EXCELの内部的な話なのでよくわからないところです。
※以下は、感想程度に思っていただいて、あてにしないでください。
本題と関係するのか微妙ですし。)
お礼
なくても使えるのですね。ありがとうございます。