我需要向我在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控件。
For i = 0 To crtl.RefEdit - 1
ctrl.Selected(i) = vbNullString
Next i
===
Case "RefEdit"
ctrl.RefEdit = vbNullString
===
两者都没有按预期工作。任何建议表示赞赏!!
谢谢,
丹
答案 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