エラー内容
VBAコンパイル時に、「ステートメントの最後」と表示される。
原因と解決方法
「ステートメントの最後」とありますが、実際には文法・記述ミスが原因でよく起こります。
なので原因はいくつもありますが、6つの原因と解決方法をピックアップします。
スペースや()などの抜けがある時がよくあるかな・・・
原因1. 変数の定義と値のセットを同時にしている
解説
変数の定義と、値のセットを同時にすることはできません。
1 2 3 4 5 6 7 |
Sub ErrSample13_01() dim siteName as String = "えくとしょ" '← 変数の定義と値のセットを同時にしている End Sub |
解決方法
変数の定義と、値のセットをそれぞれ別で書きます。
1 2 3 4 5 6 7 8 |
Sub ErrSample13_01() Dim siteName As String '← 定義 siteName = "えくとしょ" '← 値のセット End Sub |
定数なら、定義と値のセット同時もOK
Const siteName As String = “えくとしょ”
Const siteName As String = “えくとしょ”
原因2. ForとNextを1行に書いている
解説
繰り返し処理でForとNextが同じ行に書かれているとエラーになります。
1 2 3 4 5 6 7 8 9 |
Sub ErrSample13_02() Dim i As Long For i = 0 To 5 Next End Sub |
解決方法
ForとNextをそれぞれ別の行に書きます。
1 2 3 4 5 6 7 8 9 10 11 |
Sub ErrSample13_02() Dim i As Long For i = 0 To 5 Next End Sub |
原因3. セルに値をセットする時、=がない
解説
RangeやCellsでセルに値をセットする時、=がないのが原因です。
1 2 3 4 5 6 7 8 9 |
Sub ErrSample13_03() Range("A8") 200 Cells(1,1) 200 End Sub |
解決方法
対象セル(RangeやCell)とセットする値の間に、=を書きます。
1 2 3 4 5 6 7 8 9 |
Sub ErrSample13_03() Range("A8") = 200 Cells(1, 1) = 200 End Sub |
原因4. Callステートメントで引数に()がない
解説
Callでプロシージャ(Sub、Function)を呼ぶ時、引数を()で囲んでいないのが原因です。
1 2 3 4 5 6 7 |
Sub ErrSample13_04() Call MsgBox "VBAがんばろー" End Sub |
解決方法
Callでプロシージャ(Sub、Function)を呼ぶ時は、引数を()で囲みます
1 2 3 4 5 6 7 |
Sub ErrSample13_04() Call MsgBox("VBAがんばろー") End Sub |
Callで呼んでない時は、引数の()はなくてもOK
MsgBox “VBAがんばろー”
原因5. メソッドや関数で引数に()がない
解説
呼び出したメソッドや関数の戻り値を使う時(返された値を変数にセットする時)時に、引数を()で囲んでいないのが原因です。
1 2 3 4 5 6 7 8 |
Sub ErrSample13_05() Dim wb As Workbook Set wb = Workbooks "えくとしょ生徒リスト" End Sub |
解決方法
呼び出したメソッドや関数の引数を()で囲みます
1 2 3 4 5 6 7 8 |
Sub ErrSample13_05() Dim wb As Workbook Set wb = Workbooks("えくとしょ生徒リスト") End Sub |
原因6. IfやFor文で半角スペースがない
解説
IfやFor文の直後に半角スペースがないと、文字がつながって認識されてしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub ErrSample13_06() Dim i As Long Fori = 1 to 10 Next Ifi = 1 then End If End Sub |
解決方法
IfやFor文の直後に半角スペースを入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub ErrSample13_06() Dim i As Long For i = 1 To 10 Next If i = 1 Then End If End Sub |