2017-10-12 213 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 
相關問題