我在确认三次下降时遇到了问题。下面是测试用例:
cbo_fac1 - user must select this as a pre-requisite for cbo_fac1 and cbo_fac2
cbo_fac2 - user must select cbo_fac1 as a pre-requisite
cbo_fac3 - user must select cbo_fac1 and cbo_fac2 as a pre-requisite
这是我目前使用的代码。不幸的是,在某些情况下,例如,如果用户试图首先选择cbo_fac3,它似乎是在循环几个错误。是否有任何方法可以合并这些函数,并让它在每种情况下只显示错误一次?
Private Sub cbo_fac2_Enter()
If Len(cbo_fac1.Value) = 0 Then
MsgBox ("Please select a first preference before selecting a second preference")
cbo_fac1.SetFocus
Exit Sub
End If
End Sub
Private Sub cbo_fac3_Enter()
If Len(cbo_fac2.Value) = 0 & Len(cbo_fac3.Value) = 0 Then
MsgBox ("Please select a first preference before selecting a second/third preference")
cbo_fac1.SetFocus
Exit Sub
End If
If Len(cbo_fac2.Value) = 0 Then
MsgBox ("Please select a second preference before selecting a third preference")
cbo_fac2.SetFocus
Exit Sub
End If
End Sub
发布于 2012-10-27 14:50:44
这将从另一端着手解决问题,根据是否已填入先前的组合框启用或禁用组合框。在这里,级联事件是你的朋友在第三个组合框的情况下,因为清除第一个触发一个变化在第二个,这是清除第三个。将此代码添加到用户表单中:
Private Sub cbo_fac1_Change()
With cbo_fac2
.Enabled = Len(cbo_fac1.Value) > 0
If Not .Enabled Then
.ListIndex = -1
End If
End With
End Sub
Private Sub cbo_fac2_Change()
With cbo_fac3
.Enabled = Len(cbo_fac2.Value) > 0
If Not .Enabled Then
.ListIndex = -1
End If
End With
End Sub
请注意,如果您最终得到了一个更长的系列,您将需要查看一个WithEvents控件类。
此外,尽量避免在用户输入控件时出现错误消息框。试着用视觉提示引导他们--在这种情况下是禁用的、空的控件--或者等到他们点击OK,然后告诉他们他们需要改变什么。
如果其他人想尝试这一点,请用3个组合框创建一个表单,然后将这个初始化代码添加到您的表单中:
Private Sub UserForm_Initialize()
Dim i As Long
With Me
With .cbo_fac1
For i = 1 To 10
.AddItem .Name & i
Next i
End With
With .cbo_fac2
For i = 1 To 10
.AddItem .Name & i
Next i
.Enabled = False
End With
With .cbo_fac3
For i = 1 To 10
.AddItem .Name & i
Next i
.Enabled = False
End With
End With
End Sub
https://stackoverflow.com/questions/13100563
复制相似问题