-1
有一個用戶表單有很多文本框,我需要檢測每個文本框中的更改。所以我爲表單中的每個文本框編寫了一個子程序,結果是一大段代碼。 由於每個文本框的代碼都是相同的,我想優化它。那麼是否有可能只編寫一個子例程來檢測表單的任何文本框中的更改?VBA:檢測用戶表單的任何文本框中的更改
有一個用戶表單有很多文本框,我需要檢測每個文本框中的更改。所以我爲表單中的每個文本框編寫了一個子程序,結果是一大段代碼。 由於每個文本框的代碼都是相同的,我想優化它。那麼是否有可能只編寫一個子例程來檢測表單的任何文本框中的更改?VBA:檢測用戶表單的任何文本框中的更改
就實現這一目標的唯一方法是使用一類隨着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
是的,帶有一個類和WithEvent。請參見[VBA:在用戶窗體上使用WithEvents](http://stackoverflow.com/questions/1083603/vba-using-withevents-on-userforms) –
請參見控制數組。從幫助。控件數組是一組共享相同名稱和類型的控件。他們也分享相同的事件程序。控制數組至少包含一個元素,並且可以增長到系統資源和內存允許的元素數量;其大小還取決於每個控件需要多少內存和Windows資源。您可以在控件數組中使用的最大索引爲32767.同一控件數組的元素具有各自的屬性設置。控制數組的常用用途包括菜單控件和選項按鈕分組。 – phd443322
謝謝z̫͋。它很棒! – Millik