【发布时间】:2015-11-13 18:17:11
【问题描述】:
我正在使用以下代码动态更改 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 的情况下执行此操作的示例,请参见此处:stackoverflow.com/q/31948083/5090027。
-
给出了非 vba 答案here。就在今天早上我可能会补充。
标签: excel vba list validation reset