2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【VBA】入力規則(Validation) エラー1004 その他の原因

Last updated at Posted at 2020-01-31

『 [入力規則(Validation)の1004について] (https://qiita.com/dandelion4/items/33d849ec51424aff0814) 』と同じようにハマり、
また別の原因だったので追加メモを。

##既知の解決方法

・設定(Add)前に、Validation オブジェクトを Delete する
・シート保護を解除する (共有も?)

##その他の原因と解決例

こんな設定をしようとして...

	With Cells(3, 2).Validation
	    .Delete
	    .Add Type:=xlValidateList, _
	        AlertStyle:=xlValidAlertInformation, _
	        Formula1:="=Sheet!$B$3:$B$10"
	    .InCellDropdown = True
	    .ShowInput = False
	    .ShowError = True
	End With

やはり Add の箇所で、エラーになるときがある(ならないときもある)。

この場合、オプションの [数式の処理]>[R1C1 参照形式~ ]が
有効になっていると NG でした。

そっかー 参照形式(A1/R1C1)を合わせなきゃいけないのか
条件付き書式でも似たようなことになるのかしら

コード書いてるときは、作ったアイコンで頻繁に切り替えてるから
どっちでも動いてほしいところだけど

	Application.ReferenceStyle = xlA1

.Add の前、.Delete の前後あたりに上記を入れて強制し
解決としました。
※本当は[参照形式]の状態を調べて、分岐なり復元したほうがよい


2020.2.4 追記
@nukie_53 さんに教えてもらった方法

	.Add Type:=xlValidateList, _
		AlertStyle:=xlValidAlertInformation, _
		Formula1:=Application.ConvertFormula("=Sheet!$B$3:$B$10", _
		xlA1, Application.ReferenceStyle)

これなら[参照形式]の状態に合わせて渡すので、前後の処理不要。
Excelアプリケーション全体にかかるオプションを、変更せずに済むところが特によい。

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?