エラー内容
VBAコンパイル時に、「End With に対応する With がありません。」と表示される。
原因と解決方法
おもに次の2つの原因と解決方法が考えられます。
原因1. Withに対してEnd Withの方が多い
解説
Withの終わりをVBAに教えるのが、End Withです。
この終わりを意味するEnd Withが、開始を意味するWithより多いとこのエラーが起こります。
実際のプログラムでは、次のような場面で起こりやすいです。
- 「Withは1つなのに、End Withを2回入力してしまった。」
- 「Withをコメントアウトしたのに、End Withをコメントアウトし忘れた。」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub ErrSample10_01() ' With Sheets(1) '← 外側のWithをコメントアウト With Range("A2") '太字にする .Font.Bold = True End With End With '← End With がそのまま End Sub |
解決方法
WithとEnd Withがセットになるように、不要なEnd Withはコメントアウト、または削除します。
今回の例は、Withをコメントアウトしているので、End Withもコメントアウトしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub ErrSample10_01() ' With Sheets(1) With Range("A2") '太字にする .Font.Bold = True End With ' End With '← End With もコメントアウト End Sub |
原因2. If文が閉じていない
解説
Withの内側にあるIf文が正しく閉じていない時に起こります。
エラーメッセージが「End With に対応する With がありません。」なので、With周辺に目が向いて、なかなかエラー原因を特定できないパターンです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub ErrSample10_02() With Range("A2") '100点の時、太字にする If .Value = 100 Then .Font.Bold = True '← End If がない End With End Sub |
解決方法
End ifを追加して、内側のIf文を正しい構造にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub ErrSample10_02() With Range("A2") '100点の時、太字にする If .Value = 100 Then .Font.Bold = True End If '← End If を追加 End With End Sub |
POINT
WithとEnd Withの数が同じで、正しくセットになっている時は、内側のIf文などをチェックしてみてください。
WithとEnd Withの数が同じで、正しくセットになっている時は、内側のIf文などをチェックしてみてください。