「オブジェクト変数またはWithブロック変数が設定されていません。」

ブログ

エラーの原因

「オブジェクト変数または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を付け忘れていないかオブジェクトを適切に代入しているかを確認してみましょう。


タイトルとURLをコピーしました