Excel VBA:エクセルのマクロで入力規則を設定する際のアラートの扱いがわからず困っています
エクセルでINDIRECTを使った入力規則設定をマクロで行う際の、アラートの扱いがわからず困っており、お教えいただけると幸いです。
例えば、A列に日付、B列にその日付に行った都道府県名、C列にはB列で選択した都道府県に属する自治体名を入れる場合を考えます。
そのために、
・北海道、青森、…という具合に都道府県名のリストに、あらかじめ『都道府県名』と言う名前をつけたものを作成しておく。
・洞爺湖、阿寒湖、釧路、…という北海道の自治体名リストにあらかじめ『北海道』と言う名前をつけたものを作成しておく。
・弘前、八戸、十和田、…という青森県の自治体名リストにあらかじめ『青森』と言う名前をつけたものを作成しておく。
:(以下同様)
と言う準備をしたあと
-B列の入力規則ダイアログボックスで、入力値の種類を『リスト』、元の値として『=都道府県名』とすることでドロップダウンリストから都道府県名を選ぶことが出来ます。
-C列の入力規則ダイアログボックスで、入力値の種類を『リスト』、元の値として『=INDIRECT(B1)』とすることでドロップダウンリストから自治体名を選ぶことが出来ます。
C列の規則を設定する際にB列にまだ都道府県名が入っていない場合は『元の値はエラーと判断されます。続けますか?』と言うアラートが出ますがOKを押して続行。
とすれば、C列のドロップダウンリストでB列で選択した都道府県に属する自治体名が選べることになります
ここまでは、教科書などにも書いてある内容なので問題はないのですが、これをマクロ化すると問題が発生します。
上記の入力規則の設定をマクロで記録し、実行すると
『実行時エラー'1004'.アプリケーション定義またはオブジェクト定義のエラーです。』
が発生します。エラーの起こっている場所はC列の入力規則定義部分の
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:="=INDIRECT(B1)"
のようです。
B列に都道府県名が入った状態ではエラーとはならないので、マクロ記録時に『元の値はエラーと判断されます。続けますか?』が出てOKとした部分が
何らかの問題となっているとは思うのですが、対処方法がわからずに困っております。
ちなみに、On Error Resume Nextを入れておいたとしても、エラーでマクロが中断されることはなくなりますが、入力規則の設定は行われないので対処方法にはなりません。
質問が長くなり恐縮です。
コピーペーストなどで入力規則の設定が消えてしまうことがあるので、ブックの立ち上げ時に入力規則の再定義をしたいと考え、このような質問となりました。
対処方法おわかりの方、ご教授いただけると大変助かります。
なお、環境はwindowsXP、excel2003です。
よろしくお願いいたします。
お礼
有難うございます!! 出来ました!