2
我使用以下代码在Excel中动态更改验证列表。我们的想法是,当其他价值变动则列表应,例如,包含三个项目,而不是五(前两个是走了):如何将一个动态更改的验证列表重置为第一项?
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"
的命令,但它不起作用。
这很可能没有使用VBA - 您是否将VBA用于项目的不同部分?因为如果这意味着工作簿是免费的,那么在此避免它会很有用。有关如何在没有VBA的情况下执行此操作的示例,请参阅http://stackoverflow.com/q/31948083/5090027。 –
非vba答案给出[这里](http://stackoverflow.com/questions/33697154/change-sheet-source-dynamically)。就在今天上午我可能会补充一点 –