excel vba清除用户表单中的所有refedit控件

我需要添加一个重置button到我在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 

===

这适用于文本框,checkbox等我已经尝试添加2个不同的代码段,以清除refedit控件。

1:

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

===

2:

 Case "RefEdit" ctrl.RefEdit = vbNullString 

===

既不按要求工作。 任何build议表示赞赏!

谢谢,

像这样的东西应该为你工作:

 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 

确实很难知道你需要做什么来清除控件,因为你正在使用一个只在运行时parsing的Variant/Object后期调用,也就是说,编辑器不能帮你发现对象的“成员 – 当您input该信息时,您不会收到IntelliSense下拉菜单. 点。

最重要的是, TypeName使你的代码容易受到拼写错误的影响,并且在极其不可思议的情况下,你有一个第三方的ActiveX控件库被引用,它定义了一个TextBox或者ListBox或者RefEdit类/控件,哪一个你正在看。

使用TypeOf...Istypes检查TypeOf...Is而是考虑将ctrl控件转换为适当的types,以便保持所有代码早期绑定,强types; 你会得到编译时validation,intellisense和自动完成所有的方式 – 请注意,由于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