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


Sub Sample1()
    Dim Target As Worksheet
    Target = ActiveSheet
    Target.Name = "Sample"
End Sub

これは、よく見るエラーメッセージです。

上のコードは、オブジェクト変数Targetにアクティブシート(への参照)を格納して、シート名を"Sample"に変更しようとしていますが、オブジェクト変数に格納するときのSetステートメントがありませんのでエラーになります。正しくは次のようにします。

Sub Sample2()
    Dim Target As Worksheet
    Set Target = ActiveSheet
    Target.Name = "Sample"
End Sub

また、そもそもオブジェクトを格納していないオブジェクト変数を操作しようとしたときにも発生します。

Sub Sample3()
    Dim Target As Worksheet
    Target.Name = "Sample"
End Sub

もうひとつ。次のようなケースでも発生します。

Sub Sample4()
    Dim FoundCell As Variant
    Set FoundCell = Cells.Find("tanaka")
    FoundCell.Activate
End Sub

ワークシート上で"tanaka"という文字列を検索し、見つかったセルをアクティブにします。"tanaka"が見つかった場合は問題なく動作しますが、見つからなかったとき(検索に失敗したとき)は、変数FoundCellにはRangeオブジェクトが格納されません。Rangeオブジェクトでない変数FoundCellに対してActivateメソッドを実行しているので、Sample3と同じ理由からエラーになります。