サイトについて      連絡先   検索

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

  • 目次
    • 解決する