エラーの原因

「オブジェクト変数またはWithブロック変数が設定されていません。」はオブジェクト変数の代入のさいにSetを付け忘れているか、代入を忘れているため
「オブジェクト変数またはWithブロック変数が設定されていません。」はオブジェクト変数の代入のさいにSetを付け忘れているか、代入を忘れているため、オブジェクト変数がNothingになって起こるエラーです。
エラーとなるケース
実際にエラーとなる例をみてみましょう。

この例では、shがオブジェクト変数(ワークシート)であるにもかかわらず、Setを付けていないためNothingとなりエラーが発生しています。
以下のようにSetを付けて代入すれば解決します。
Sub macro10()
Dim sh As Worksheet
Set sh = ActiveSheet
Debug.Print sh.Name
End Sub
次は、オブジェクト変数に間違った値を代入した例です。

この場合は値に宣言したオブジェクトを代入する必要があります。
Sub macro11()
Dim sh As Worksheet
Set sh = ActiveSheet
sh.Range("A1") = 100
Debug.Print sh.Name
End Sub
最後にWithブロック変数に使うオブジェクト変数が空の場合です。

With ブロック変数の Sh が指定されていないのが原因です。
Sub macro12()
Dim sh As Worksheet
Set sh = ActiveSheet
With sh
Debug.Print .Name
End With
End Sub
まとめ
原因は全てオブジェクト変数がNothingになっている事で起こるエラーです。
気づくと何という事もなくわかりますが、Setの付け忘れなどに気付けないと「何で???」と迷うことがあります。
Setを付け忘れていないか、オブジェクトを適切に代入しているかを確認してみましょう。