エラー内容
VBAコンパイル時に、「End With が必要です。」と表示される。
原因と解決方法
おもに次の2つの原因と解決方法が考えられます。
原因1. Withの閉じ忘れ
解説
Withステートメントの終わりで、End Withを 書いていないと起こります。
1 2 3 4 5 6 7 8 9 10 |
Sub ErrSample09_01() With Range("A2") '太字にする .Font.Bold = True '← Withに対応するEnd With がない End Sub |
解決方法
Withステートメントの終わりに、End With を追加します。
1 2 3 4 5 6 7 8 9 10 |
Sub ErrSample09_01() With Range("A2") '太字にする .Font.Bold = True End With '← End With を追加 End Sub |
原因2. End Withの数が足りない
解説
Withステートメントがネスト(入れ子)になっていて、Withに対するEnd Withが足りていない場合です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub ErrSample09_02() With Range("A2") With .Font '太字にする .Bold = True End With '← Withに対応するEnd With がない End Sub |
字下げをしていないと見つけにくく、End Withが1つあるので「End Withがちゃんとあるのにエラーになる・・・」とハマりやすいです。
Withが2つあるので、終わりを意味するEnd Withももちろん2つ必要です。
解決方法
WithとEnd Withがペアになるように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub ErrSample09_02() With Range("A2") With .Font ' ← 構造がわかりやすいように字下げ '太字にする .Bold = True End With End With '← End With を追加 End Sub |
POINT
入れ子構造の時は、字下げをして構造が見やすいようにしましょう。
字下げは、コードの先頭でTabキーを押下すればOKです。
入れ子構造の時は、字下げをして構造が見やすいようにしましょう。
字下げは、コードの先頭でTabキーを押下すればOKです。
POINT
Withを入力したした後は、中身のプログラムを入力せずに、先にEnd Withを入力しましょう。
その後、Withの中身のプログラムを書くようにすれば、End Withの入力漏れが格段に減ります。
Withを入力したした後は、中身のプログラムを入力せずに、先にEnd Withを入力しましょう。
その後、Withの中身のプログラムを書くようにすれば、End Withの入力漏れが格段に減ります。