Excel VBA の実行時エラー辞典

実行時エラー '91':オブジェクト変数または With ブロック変数が設定されていません

Set で参照先を設定したか、検索結果が Nothing になっていないか確認します。

よくある原因

直し方

  1. 停止した行の左側にあるオブジェクト変数を特定します。
  2. Set する行が実行されたか確認し、Find の結果なら Nothing を先に判定します。
  3. 対象がない場合は案内して処理を分け、見つかった場合だけプロパティを使います。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。

最初のシートで「合計」を探す例です。検索対象がない場合を通常の分岐として扱います。

修正前

Dim hit As Range
Set hit = ThisWorkbook.Worksheets(1).Range("A1:A100").Find( _
    What:="合計", LookIn:=xlValues, LookAt:=xlWhole)
Debug.Print hit.Row

修正後

Dim hit As Range
Set hit = ThisWorkbook.Worksheets(1).Range("A1:A100").Find( _
    What:="合計", LookIn:=xlValues, LookAt:=xlWhole)
If hit Is Nothing Then
    MsgBox "合計の行が見つかりません"
Else
    Debug.Print hit.Row
End If

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. Set の直後にブレークポイントを置いて、検索結果が Nothing か確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? hit Is Nothing

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料