『 [入力規則(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アプリケーション全体にかかるオプションを、変更せずに済むところが特によい。