2017-10-12 166 views
0

我需要向EXCEL VBA中正在处理的用户表单添加一个Reset按钮。我有以下代码可以完成大部分工作,但是,我还没有弄清楚如何清除refedit控件。这是我到目前为止有: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个不同的代码片段,以这种sub清除refedit控件。

1:

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

===

2:

Case "RefEdit" 
    ctrl.RefEdit = vbNullString 

===

无论如所期望的工作原理。任何建议表示赞赏!

感谢,

回答

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 
+0

是否'ListBox'情况工作,与格式? (我从来没有见过这样的) – BruceWayne

+1

@BruceWayne它会的,是的。这种格式不是必需的,只是个人偏好。 – tigeravatar

0

这的确很难知道你需要做的明确控制的东西,因为你正在使用对于仅在运行时解析的Variant/Object的后期绑定调用,即编辑器无法帮助您发现对象的成员 - 当您键入.点时,不会获得IntelliSense下拉列表。

最重要的是,TypeName是使你的代码容易拼写错误,并在你所引用的第三方ActiveX控件库,它定义了一个TextBoxListBoxRefEdit类/控制显得格外万一,你有没有方式来确切地告诉你正在看哪一个。

改为使用TypeOf...Is进行类型检查,并考虑将ctrl控件转换为适当的类型,以便保持所有代码的早期绑定,强类型;你编译时验证,智能感知和自动完成所有的方式 - 请注意如何TypeOf...Is的作品,你需要把条件中的每个Case分支becasue,所以你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 
相关问题