|
おはようございます。
>ところが、初回の試行(真っ新のシート)の後で 試行を繰り返す場合、この 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列にプルダウンリストが作成されません。
>引き続き検討します。
ですね。
よく入力規則の設定セルとそこで設定している数式を良く調べて見てください。
|
|