|
おはようございます。
>>>>>>'==================================================
>>>>>>Option Explicit
>>>>>>Sub test()
>>>>>> With Sheets("Sheet2")
>>>>>> .Range("a1:b5").Value = [{"a","f";"b","g";"c","h";"d","i";"e","j"}]
>>>>>> .Range("c1:c2").Value = [{"甲";"乙"}]
>>>>>> 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
>気にはなっていましたが、
> With Range("a1").Validation
> With Range("B1").Validation
>では コード上、sheet1 を指定してませんが
私のミスです。
>これで 何故 sheet1の
>セルA1およびセルB1の入力規制の削除、設定が
>できるのでしょうか。
標準モジュールに上記コードがある場合、
シート名を省略すると、アクティブシートのセルだと認識します。
(Range("A1")と記述すると、Application.Range("A1")と同値)
Sheet1をアクティブにして、実行されれば正常に作動しますが、
他のシートをアクティブにすれば、別のシートに入力規則を設定してしまいます。
シートモジュールにコードがある場合は、
シート名を省略すると、コードを記述しているシートのセルだと認識します。
よって、シートの記述を省略しても、正常に作動しますが、
良い記述では、ないですね。
このように訂正してください。
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
上記の
> With Worksheets("sheet1")
を
> With Worksheets("sheet3")
にすれば、Sheet3に入力規則を設定します。
よく調べていただいているのですね!!
ミスを指摘して頂いて、感謝いたします。
|
|