更新日:、 作成日:

VBA エラー 91 オブジェクト変数または With ブロック変数が設定されていません。

はじめに

Excel VBA マクロのエラー 91 「オブジェクト変数または With ブロック変数が設定されていません。」の対処法を紹介します。

オブジェクトを Set を付けないで代入したときに発生します。

インスタンス化されていない Nothing の状態で操作したり、「GoTo 文」で With ブロックの中に処理を移動すると発生します。

エラーの基本的な対処法は、エラー箇所の特定とその原因となったコードをデバッグします。

デバッグについては「デバッグの仕方」をご覧ください。
エラー処理については「エラー処理をする」をご覧ください。

解決する

クラス」で作成されたオブジェクトを代入するには Set が必要です。付けないと発生します。

オブジェクトがインスタンス化されてないときは Nothing の状態です。このときに操作すると発生します。

Set を付ける

Sheet1 や Range などのオブジェクトを代入するときに Set を付けないと発生します。

Dim s As Worksheet
s = Sheet1     ' エラー
Set s = Sheet1 ' OK

Dim r As Range
r = Range("A1")     ' エラー
Set r = Range("A1") ' OK

その型がオブジェクト型かどうか確認すると解決します。

インスタンス化する

オブジェクトを操作するにはインスタンス化が必要です。インスタンス化されていない Nothing の状態で操作すると発生します。

Dim c As Class1
c.Name = "Tips"    ' エラー

Set c = New Class1 ' インスタンス化
c.Name = "Tips"    ' OK

GoTo 文」を使用して With ブロックの中に移動すると発生します。

    GoTo Label

With Sheet1
Label:
    .Name = "Sheet1" ' エラー
End With

With の行が飛ばされるのでエラーになります。このような「GoTo 文」の使い方をしてはいけません。