2014-06-25 17 views
-1

有一個用戶表單有很多文本框,我需要檢測每個文本框中的更改。所以我爲表單中的每個文本框編寫了一個子程序,結果是一大段代碼。 由於每個文本框的代碼都是相同的,我想優化它。那麼是否有可能只編寫一個子例程來檢測表單的任何文本框中的更改?VBA:檢測用戶表單的任何文本框中的更改

+0

是的,帶有一個類和WithEvent。請參見[VBA:在用戶窗體上使用WithEvents](http://stackoverflow.com/questions/1083603/vba-using-withevents-on-userforms) –

+0

請參見控制數組。從幫助。控件數組是一組共享相同名稱和類型的控件。他們也分享相同的事件程序。控制數組至少包含一個元素,並且可以增長到系統資源和內存允許的元素數量;其大小還取決於每個控件需要多少內存和Windows資源。您可以在控件數組中使用的最大索引爲32767.同一控件數組的元素具有各自的屬性設置。控制數組的常用用途包括菜單控件和選項按鈕分組。 – phd443322

+0

謝謝z̫͋。它很棒! – Millik

回答

0

就實現這一目標的唯一方法是使用一類隨着WithEvents

這裏有一個小例子:

代碼名爲mytextbox類模塊:

Private WithEvents txtbox As MSForms.TextBox 


Public Property Set TextBox(ByVal t As MSForms.TextBox) 
    Set txtbox = t 
End Property 


Private Sub txtbox_Change() 
    ' code for handling the event 
End Sub 

而且裏面的代碼用戶表單,假設你想處理每個文本框的事件

Private myEventHandlers As Collection 

Private Sub UserForm_Initialize() 
    Dim txtbox As mytextbox 

    Set myEventHandlers = New Collection 

    Dim c As Control 
    For Each c In Me.Controls 
     If TypeName(c) = "TextBox" Then 
      Set txtbox = New mytextbox 

      Set txtbox.TextBox = c 

      myEventHandlers.Add txtbox 
     End If 
    Next c 
End Sub 
相關問題