[英]excel vba clear all refedit controls in a 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控件。
For i = 0 To crtl.RefEdit - 1
ctrl.Selected(i) = vbNullString
Next i
===
Case "RefEdit"
ctrl.RefEdit = vbNullString
===
两者均无法正常工作。 任何建议表示赞赏!
谢谢,
担
这样的事情应该为您工作:
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
确实很难知道您需要做什么来清除控件,因为您正在对仅在运行时解析的Variant/Object
进行后期绑定调用,即编辑器无法帮助您发现对象的成员-键入时不会显示IntelliSense下拉列表.
点。
最重要的是, TypeName
使您的代码容易受到拼写错误的影响,并且在极不可能的情况下,您引用了定义了TextBox
或ListBox
或RefEdit
类/控件的第三方ActiveX控件库,因此您无法准确分辨您正在看哪一个。
而是使用TypeOf...Is
类型检查,并考虑将ctrl
控件转换为适当的类型,以便使所有代码都早绑定,强类型化。 您将始终获得编译时验证,智能感知和自动完成功能-请注意,由于TypeOf...Is
如何工作的,您需要在每个Case
分支中放入条件,因此请改为Select Case True
:
Private Sub ClearControls()
Dim ctrl As MSForms.Control
For Each ctrl In Me.Controls
Select Case True
Case TypeOf ctrl Is MSForms.TextBox
Dim txtBox As MSForms.TextBox
Set txtBox = ctrl
txtBox.Text = vbNullString
Case TypeOf ctrl Is MSForms.ComboBox
Dim cmbBox As MSForms.ComboBox
Set cmbBox = ctrl
cmbBox.ListIndex = -1
Case TypeOf ctrl Is MSForms.OptionButton
Dim optBtn As MSForms.OptionButton
Set optBtn = ctrl
optBtn.Value = False
Case TypeOf ctrl Is MSForms.CheckBox
Dim chkBox As MSForms.CheckBox
Set chkBox = ctrl
chkBox.Value = False
Case TypeOf ctrl Is MSForms.ListBox
Dim lstBox As MSForms.ListBox
Set lstBox = ctrl
Dim i As Long
For i = 0 To lstBox.ListCount - 1
lstBox.Selected(i) = False
Next
Case TypeOf ctrl Is RefEdit.RefEdit
Dim refEditCtrl As RefEdit.RefEdit
Set refEditCtrl = ctrl
refEditCtrl.Value = vbNullString
End Select
Next
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.