【问题标题】:When I clear contents, my dynamic combobox referencing a text box won't clear当我清除内容时,引用文本框的动态组合框不会清除
【发布时间】: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 = "" 则不更新引用,否则照常进行。

标签: vba excel


【解决方案1】:

会做这个工作吗?

for i = me.controls.count to 1 step -1  
    with me.controls.item(i)
        (your code)
    end with
next

【讨论】:

  • 我的意思是你在 originak 帖子中的所有内容,只是将所有 "ctl.XXX" 替换为 ".XXX" 。我的想法是避免每个可能导致问题的原因。
【解决方案2】:

我想通了。我将参考分开,以便它们以正确的顺序清除。我还添加了一个 .ClearContents 操作来清除工作表中的特定字段。

Private Sub ClearFields_Click()


Dim ctl As Control

For Each ctl In Me.Controls
    If TypeOf ctl Is MSForms.ComboBox Then
        ctl.Text = ""
    End If
Next ctl
For Each ctl In Me.Controls
    If TypeName(ctl) = "TextBox" Then
        ctl.Text = ""
    End If
Next ctl
For Each ctl In Me.Controls
    If TypeName(ctl) = "TextBox" Then
        ctl.Text = ""
    End If
Next ctl
For Each ctl In Me.Controls
    If TypeOf ctl Is MSForms.CheckBox Then
        ctl.Value = False
    End If
Next ctl
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
    End If
    End If
Next ctl


Range("B25:D48").ClearContents
Range("B6").ClearContents
Range("B10").ClearContents

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多