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 文」の使い方をしてはいけません。