excel vba清除userform中的所有refedit控件

时间:2017-10-12 15:03:44

标签: excel vba reset userform

我需要向我在EXCEL VBA中使用的用户表单添加一个重置按钮。我有以下代码执行大部分工作,但是,我还没有想出如何清除refedit控件。这就是我到目前为止所做的:

===

'Reset Button
Private Sub CommandButton2_Click()

    For Each ctrl In Me.Controls

        Select Case TypeName(ctrl)
            Case "TextBox"
                ctrl.Text = ""
            Case "ComboBox"
                    ctrl.ListIndex = -1
            Case "OptionButton", "CheckBox"
                    ctrl.Value = False
            Case "ListBox"
            For i = 0 To ctrl.ListCount - 1
                If ctrl.Selected(i) Then
                    ctrl.Selected(i) = False
                End If
            Next i
        End Select
    Next

End Sub

===

这适用于文本框,复选框等。我尝试将2个不同的代码片段添加到此子代码以清除refedit控件。

1:

For i = 0 To crtl.RefEdit - 1
      ctrl.Selected(i) = vbNullString
Next i

===

2:

Case "RefEdit"
     ctrl.RefEdit = vbNullString

===

两者都没有按预期工作。任何建议表示赞赏!!

谢谢,

2 个答案:

答案 0 :(得分:1)

这样的事情对你有用:

Dim ctrl As Control
Dim i As Long

For Each ctrl In Me.Controls
    Select Case TypeName(ctrl)
        Case "TextBox":                     ctrl.Text = vbNullString
        Case "ComboBox":                    ctrl.ListIndex = -1
        Case "OptionButton", "CheckBox":    ctrl.Value = False
        Case "RefEdit":                     ctrl.Value = vbNullString
        Case "ListBox":                     For i = 0 To ctrl.ListCount - 1
                                                ctrl.Selected(i) = False
                                            Next i
    End Select
Next ctrl

答案 1 :(得分:0)

确实很难知道清除控件需要做什么,因为您正在使用仅在运行时解析的Variant/Object的后期绑定调用,即编辑无法帮助您发现对象'成员 - 当您键入.点时,您无法获得IntelliSense下拉列表。

最重要的是,TypeName使您的代码容易受到拼写错误的影响,并且在非常不可能的情况下,您引用的第三方ActiveX控件库定义了TextBox或{{1或者ListBox类/控制,你无法准确地确定你正在看哪一个。

使用RefEdit进行类型检查,并考虑将TypeOf...Is控件转换为适当的类型,以便保持所有代码的早期绑定,强类型;你得到编译时验证,智能感知和自动完成 - 请注意,由于ctrl的工作方式,你需要在每个TypeOf...Is分支中加上条件,所以你Case代替:

Select Case True