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...Is
types检查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
- 显示用户表单后,将焦点设置回应用程序窗口
- 在Image1.Click调用后,VBA UserForm.Image1.Picture不会刷新
- VBA – 从用户的Combobox中复制文本,并将其粘贴到Excel工作表中
- 在标签内的图像捕获
- 在Excel用户窗体上将点击VBA函数分配给一个dynamic创build的button
- 修改一个用户窗体在多个工作表上工作
- 如何根据一个标准findRange,然后根据另一个标准find该Range内的一个Cell
- OptionButton决定在macros中使用的值
- Excel 2013 64位 – VBA Userform – 添加28天到文本框的date,并显示在另一个文本框中