【ExcelVBA】エラー処理:コンパイルエラー
コンパイルエラーとは
前回に引き続き、VBAのエラーについて学習していきます。
まずは前回説明したVBAのエラーの種類について確認しておきましょう。
VBAのエラーは下記の種類がありました。
今回は、この中のコンパイルエラーについて見ていきます。
コンパイルとは、プログラムで記述したファイルを、システム(VBAの場合はExcel)が実行できるような形式に変換することを言います。
つまり、実行するためには、その前にコンパイルが成功していなければなりません。
VBEでは実行ボタンを押すと、コンパイルしてから実行するという一連の作業を実行しますが、
メニューの「デバッグ」>「VBAプロジェクトのコンパイル」を選択すると、コンパイルのみ行うこともできます。
コンパイルは、元となるプログラムが正しく記述されていないと行うことができません。
前回見た文法エラーがある場合は、当然コンパイルを行うことができませんが、
文法的に正しく記述していた場合でも論理的なエラーがある場合、エラーになります。これをコンパイルエラーといいます。
コンパイルエラーの例
では、コンパイルエラーの代表的な例である、変数が未定義であることによって発生するコンパイルエラーを見てみましょう。
まず、下記のVBAを作成してください。
Option Explicit Sub Sample1() x = 10 Debug.Print (x) End Sub
文法的には誤っていないのですが、コンパイルエラーとなるのはなぜでしょうか。
1行目に記述されている「Option Explicit」という記述に注目してみましょう。
これは、VBAのOption設定で「変数の宣言を強制する」という意味になります。
このOption設定がある状態で変数「x」を宣言せずに使用しているため、
「変数が定義されていません」というエラーが発生しているのです。
このように文法的には誤っていないが論理的に誤りがある場合のエラーをコンパイルエラーと言います。
では、1行目を削除してから再度実行してみましょう。
※下記のメッセージが表示される場合は「OK」で構いません。
今度はエラーが出ずに実行できたと思います。
このOption Explicitの設定はVBEの画面上でも行うことができます。
メニューの「ツール」>「オプション…」から下記の画面を開き、
「変数の宣言を強制する」にチェックを入れると、以降のコードには先ほどの「Option Explicit」が追加されるようになります。
ちなみに、Option Explicitがある場合、下記のように変数を宣言しておけば、エラーは発生しません。
Option Explicit Sub Sample1() Dim x As Integer x = 10 Debug.Print (x) End Sub
まとめ
・コンパイルエラーはコンパイルする際に発生するエラー。
・文法エラーがない場合でも、コンパイルエラーとなる場合もある。
確認問題
確認問題1
次の記述でコンパイルは成功しますか、失敗しますか?
失敗する場合は、理由も答えなさい。
Option Explicit Sub Test1() Debug.Print("test") End Sub
確認問題2
次の記述でコンパイルは成功しますか、失敗しますか?
失敗する場合は、理由も答えなさい。
Sub Test2() Dim x As Int x = 10 Debug.Print (x) End Sub
確認問題3
次の記述でコンパイルは成功しますか、失敗しますか?
失敗する場合は、理由も答えなさい。
Option Explicit Sub Test3() Dim x As Integer x = "test" Debug.Print (x) End Sub
次回は、「実行時エラー」についてです。