【发布时间】:2017-03-24 23:43:26
【问题描述】:
我有一个组合框 (DescBox1),它根据在文本框中输入的值引用动态范围。
Private Sub DescBox1_Change()
Range("C25").Value = DescBox1.Value
End Sub
和
Private Sub UserForm_Initialize()
Me.DescBox1.RowSource = "CCList1"
End Sub
当我们在 TextBox (ClassCode1) 中输入一个值时,它会将值传输到活动工作簿单元格 B25。
B25 然后通过 vlookup 生成一个动态列表,然后成为 CCList1。
Private Sub ClassCode1_Change()
Range("B25").Value = ClassCode1.Value
End Sub
当我使用我的 clearfields 代码时,它似乎首先清除了所有文本框,从而删除了动态查找引用,使其无法清除组合框 (DescBox1)。
Private Sub ClearFields_Click()
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Name = "ExpModFactor" Then
Me.ExpModFactor.Value = 1
Else
If ctl.Name = "SurchargeTextBox" Then
Me.SurchargeTextBox.Value = 100
Else
Select Case TypeName(ctl)
Case "ComboBox"
ctl.ListIndex = -1
Case "TextBox"
ctl.Value = ""
Case "CheckBox"
ctl.Value = False
End Select
End If
End If
Next ctl
End Sub
【问题讨论】:
-
检查您的清除子例程是否不会触发文本框和组合框中的更改事件。在更改事件处理程序中,您应该在对工作表进行任何更改之前验证组合框/文本框的值。
-
抱歉,我不确定您的意思。我认为 clear 子例程确实会触发更改事件,但我不确定如何验证...
-
如何填写组合框的值?
-
=OFFSET(Quote!$B$25,COLUMN()-1,) 参考上述 B25。 B25 由用户表单文本框填充。然后我使用以下公式提取所有匹配结果以创建 CCList1 组合框范围 =IFERROR(INDEX(FLClassCodes!$C$1:$C$1291,SMALL(IF($A$31=FLClassCodes!$B$1:$B$1291, ROW(FLClassCodes!$B$1:$B$1291)-ROW(FLClassCodes!$B$1)+1),ROW(1:1)))," ") (它是一个数组公式
-
清除文本框时是否需要删除动态查找引用?您可以在文本框的更改事件处理程序中放置一个 if-then 子句,例如如果 TextBox.Value = "" 则不更新引用,否则照常进行。