-
∨目次
- 解決する
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 文」の使い方をしてはいけません。