Excel VBAで「Validation」オブジェクトを使って、セルをプルダウン(リスト)入力できるようにした時に、実行時エラー1004が出ました。
その時の対処法の記録です。
< スポンサーリンク >
エラーの現象
下記のようにプルダウンで入力出来るように実行したところ、実行時エラー1004「アプリケーション定義またはオブジェクト定義のエラーです。」とメッセージが出ました。
Sub test()
With Range(“B1”).Validation
.Delete
.Add Type:=xlValidateList, Formula1:=”=A1:A5″
End With
End Sub
原因は、
・シートが保護されている
・参照形式がR1C1になっている
の2つのどちらかを確認しています。
エラーの対処法
シートが保護されている
シートが保護されていると、色々と制限がかかります。
「Validation」の前にシート保護を解除する
ActiveSheet.Unprotect
を入れ、「Validation」の後にシートを保護する
ActiveSheet.Protect
を入れます。
Sub test()
ActiveSheet.Unprotect
With Range(“B1”).Validation
.Delete
.Add Type:=xlValidateList, Formula1:=”=A1:A5″
End With
ActiveSheet.Protect
End Sub
参照形式がR1C1になっている
私はVBAを作るときによくR1C1参照形式にして、そのまま・・・ということがあり、よくこの1004エラーが出ます。
A1参照形式にする
Application.ReferenceStyle = xlA1
を「Validation」の前に入れます。
私はほとんど、この2つの対処法で解決しています。
とくにA1参照形式にする「ReferenceStyle」は必ず入れるようにしています。
こんな記事も書いています