はじめに
「アプリケーション定義または オブジェクト定義のエラーです。」というエラーを調べていると昔はこのメッセージが出ていた状況でも、別のエラーメッセージに変化している事があります。
実はExcelVBAでの、このエラーは単に「エラーです」と言っているようなもので、具体的な状況を教えてくれているとは言えません。
以下のコードでError関数のエラーメッセージを表示させてみると、筆者の環境(Excel2019)では、88行のメッセージが表示されました。
Sub エラーメッセージ一覧()
Dim i As Long, cnt As Long, c As Long
cnt = 1
For i = 0 To 65535
If Error(i) <> "アプリケーション定義またはオブジェクト定義のエラーです。" Then
Cells(cnt, "A") = i
Cells(cnt, "B") = Error(i)
cnt = cnt + 1
End If
Next i
End Sub

「アプリケーション定義または オブジェクト定義のエラーです。」はその他多数扱い
プログラムが示す通り、88項目以外は全て「アプリケーション定義または オブジェクト定義のエラーです。」という事になります。
ネット上で色々なエラーを調べてみますと、以前は「アプリケーション定義または オブジェクト定義のエラーです。」とされていたメッセージも現在は異なる(もっと具体的な)メッセージが表示されているようです。
この事を鑑みますと、「このエラーはこういう時に出ます」という言い方がなかなか出来ないという事になります。
しかし、それでは埒が明きませんので、実際に試してみてこのエラーが出た時の状況と、その対策について挙げてみます。
原因1:RangeやCellsの行列指定にあり得ない値を指定
RangeやCellsで、行と列を指定する際、0以下や最大値を超えるような値を指定すると、「アプリケーション定義または オブジェクト定義のエラーです。」が発生します。
Sub Error1()
Dim row As Long
Worksheets("Sheet1").Cells(row, 1) = 123
End Sub
上記の例では、rowを初期化しなかったため値が0となり、0行目を指定しているのでエラーとなります。
訂正例は以下の通りです。
Sub NotError1()
Dim row As Long
row = 1
Worksheets("Sheet1").Cells(row, 1) = 123
End Sub
原因2:数式のRange指定の不備
セルに数式を指定する際、Rangeの指定に不備がある場合に「アプリケーション定義または オブジェクト定義のエラーです。」が発生します。
Sub Error2()
Range("A1").Value = "=SUM(1:B10)"
End Sub
上記の例では、SUMの引数のRange指定が間違っています。修正例は以下の通りです。
Sub NotError2()
Range("A1").Value = "=SUM(B1:B10)"
End Sub
原因3:Rangeの範囲指定の参照不備
以下のプログラムはSheet1がアクティブな状態ではエラーが出ませんが、別のシートがアクティブだとエラーとなります。
Sub Error3()
With Worksheets("Sheet1")
.Range(Cells(1, 1), Cells(2, 2)) = 1
End With
End Sub
わかりずらいエラーですが、Rangeの引数であるCellsにドット(.)が無いためにアクティブなシート(Sheet1以外)のセルが参照されたためにエラーとなっています。
以下のように修正すれば問題ありません。
Sub NotError3()
With Worksheets("Sheet1")
.Range(.Cells(1, 1), .Cells(2, 2)) = 1
End With
End Sub
最後に
いくつかの例を見てきましたが、これがすべては無いと思います。
もし、こういう時に「アプリケーション定義または オブジェクト定義のエラーです。」が出たという情報がありましたらご連絡いただければ調査して、この記事に追加していきたいと思います。
コメント