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