我如何重置一个dynamic变化的validation列表到第一个项目?

我使用下面的代码来dynamic地更改Excel中的validation列表。 这个想法是,当其他值改变时,例如,列表应该包含三个项目而不是五个(前两个已经消失):

Private Sub Worksheet_Change(ByVal Target As Range) Dim ToS, CoC As String Dim HoC, HoR As Single ToS = Range("B4").Value CoC = Range("B12").Value HoC = Range("B10").Value HoR = Range("B11").Value With Range("B6") With .Validation .Delete If ToS = "CMSA" Then If HoC <= 7.6 Then If HoR > 10.7 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$3:$V$3" Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$1:$V$3" End If ElseIf CoC = "III" Or CoC = "IV" Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$3:$V$3" Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$1:$V$3" End If ElseIf ToS = "ESFR" Then If HoR > 10.7 And HoR <= 12.2 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$7:$V$9" ElseIf HoR > 9.1 And HoR <= 9.8 And HoC > 6.1 And HoC <= 7.6 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$6:$V$7" ElseIf HoR > 12.2 And HoR <= 13.7 And HoC > 7.6 And HoC <= 12.2 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$7:$V$9" Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$6:$V$9" End If Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$6:$V$9" End If End With End With End Sub 

问题是,我希望它自动重置到列表的第一个项目。 该列表正在从同一工作表中的某个其他单元格中获取数据。

我怎么能这样做?

我需要添加什么代码?

我尝试添加...formula1:=命令类似于Range("B6").Value= "the value I want"但它不起作用。

虽然我不得不在评论中同意Eh Bacon和Scott的评分,但我认为所要求的只是下面的内容:

(这是我想你只是想添加一行来更改值作为数据validation列表中的第一个值)

 Private Sub Worksheet_Change(ByVal Target As Range) Dim ToS, CoC As String Dim HoC, HoR As Single ToS = Range("B4").Value CoC = Range("B12").Value HoC = Range("B10").Value HoR = Range("B11").Value With Range("B6") With .Validation .Delete If ToS = "CMSA" Then If HoC <= 7.6 Then If HoR > 10.7 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$3:$V$3" .Value=Range("$V$3").Value Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$1:$V$3" .Value=Range("$V$1").Value End If ElseIf CoC = "III" Or CoC = "IV" Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$3:$V$3" .Value=Range("$V$3").Value Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$1:$V$3" .Value=Range("$V$1").Value End If ElseIf ToS = "ESFR" Then If HoR > 10.7 And HoR <= 12.2 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$7:$V$9" .Value=Range("$V$7").Value ElseIf HoR > 9.1 And HoR <= 9.8 And HoC > 6.1 And HoC <= 7.6 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$6:$V$7" .Value=Range("$V$6").Value ElseIf HoR > 12.2 And HoR <= 13.7 And HoC > 7.6 And HoC <= 12.2 Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$7:$V$9" .Value=Range("$V$7").Value Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$6:$V$9" .Value=Range("$V$6").Value End If Else .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$V$6:$V$9" .Value=Range("$V$6").Value End If End With End With End Sub 

但是,我认为你应该更好地处理数据validation,也许只是使用vba来更改单元格的值。