|
▼ichinose さん:
>おはようございます。
>
>
>>ところが、初回の試行(真っ新のシート)の後で 試行を繰り返す場合、この Delete で一度 プルダウンリストが 削除される筈と思いますが、F8 のステップワイズでコードとセルの関係を追跡しても 削除されている様子が見えません。
>>何故でしょうか。
>新規ブックにて(Sheet1、Sheet2というシート名が存在する)、
>
>標準モジュールに
>
>'=======================================================
>Sub test()
> With Worksheets("Sheet2")
> .Range("a1:b5").Value = [{"a","f";"b","g";"c","h";"d","i";"e","j"}]
> .Range("c1:c2").Value = [{"甲";"乙"}]
> End With
> With Worksheets("sheet1")
> With .Range("a1").Validation
> .Delete
> .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
> xlBetween, Formula1:="=indirect(""sheet2!c1:c2"")"
> End With
> With .Range("B1").Validation
> .Delete
> .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
> xlBetween, Formula1:= _
> "=if(a1=""甲"",indirect(""sheet2!a1:a5""),indirect(""sheet2!b1:b5""))"
> End With
> End With
>End Sub
>'==========================================================
>Sub test2()
> With Worksheets("sheet1")
> .Range("a1").Select
> With .Range("a1").Validation
> .Delete
> End With
> With .Range("B1").Validation
> .Delete
> End With
> End With
>
>End Sub
>
>
>testを実行すれば、A1,B1に入力規則が設定されます。
>test2では、入力規則の削除を行っていますが、A1のドロップダウンが残っています。
>選択も出来てしまいます。
>
>私は、非表示し忘れだと思います!!
>まっ、A2を選択して、再度、A1を選択すれば、今度は、表示されないので
>仕様だと言い張るのかなあ・・・、MS社は。
>
>
>Sub test2()
> With Worksheets("sheet1")
> .Range("a1").Select
> With .Range("a1").Validation
> .InCellDropdown = False
> .Delete
> End With
> With .Range("B1").Validation
> .InCellDropdown = False
> .Delete
> End With
> End With
>End Sub
>
>このようにすれば、大きい問題はなさそうなので、良しとしますか?
>
>
>>
>>また、イベント駆動の方での1つのトラブル(B列へのドロップダウンリスト作成の暴走は sheet.change の コードがあるため、 Sub 〜 End Sub が
>>1件づつで終了せず、イベント発生が無限ループに落ちっていることが分かりました。
>解決したのなら、良いですが・・・、
>
> Application.EnableEvents というプロパティを調べてください。
>
>
> Application.EnableEvents = False
>
>
> とすれば、
>
>
> Application.EnableEvents = True
>
> にするまで、Excelイベントが発生しません。
>
>
>>ただ、この段階ではC列にプルダウンリストが作成されません。
>>引き続き検討します。
>ですね。
>よく入力規則の設定セルとそこで設定している数式を良く調べて見てください。
ichinose 様
いろいろご丁寧にアドバイスをいただき、ありがとうございました。
イベント駆動でも期待した通りの動きを確認できました。
入力規則の削除の件についてはまだ検討中ですが、3台のPC中、2台では
削除できるを確認しましたので何か設定が違うのではないかと思っています。
確かに
Application.EnableEvents = False
(私自身、これと Application.ScreenUpdating = False とを多用しております)を使えば、イベントのバッティングが防げます。
また、同じcolumnに change駆動とsheet_change駆動を併用するとオカシナことが生じます。
最終的には、このどちらかのみを使うことで上手くいきました。
本当にありがとうございました。
|
|