我试图用一行调用多个子,此刻我要这样做(这不实用(
' Textbox1
' Textbox2
' Textbox3
' Textbox...
' Textbox100
Private Sub TextBox1_AfterUpdate()
Call TextBox1_Function
End Sub
Private Sub TextBox2_AfterUpdate()
Call TextBox2_Function
End Sub
Private Sub TextBox3_AfterUpdate()
Call TextBox3_Function
End Sub
' ......................... till Textbox100
我现在想知道我是否可以这样的事情:
' Textbox1
' Textbox2
' Textbox3
' Textbox...
' Textbox100
Private Sub TextBox1_AfterUpdate()
' 1 - Get this Sub Object (I don't know if it's possible)
' 2 - Then Call the function
Call TextBox_Function OBJ_Name
End Sub
Function TextBox_Function(OBJ as Object)
' Do some code
End Function
或其他任何更好的代码行...因为我有10类文本,每个类别都有100个文本框...
对于某些文本框来说,它具有不同的功能,因此我无法使用"每个文本框....."
您可以通过添加处理事件的类来为多个文本框添加事件处理程序。该类可以包括一个BoxType
,因此您可以为每种TextBox
定义哪种类型,在事件处理程序中,您可以通过其BoxType
区分盒子。
-
添加
Class Module
名称clsTextBox
并粘贴以下代码:Option Explicit Public WithEvents pTbx As MSForms.TextBox Public BoxType As String Private Sub pTbx_AfterUpdate() Select Case BoxType Case "TypeA" Debug.Print "Type A update " & pTbx.Name Case "TypeB" Debug.Print "Type B update " & pTbx.Name End Select End Sub Private Sub pTbx_Change() Select Case BoxType Case "TypeA" Debug.Print "Type A change " & pTbx.Name Case "TypeB" Debug.Print "Type B change " & pTbx.Name End Select End Sub
创建您需要的事件。
-
pTbx
指的是触发事件的文本框。 -
BoxType
指定触发事件的文本框的类型。
-
-
初始化您的文本框。因此,将以下代码粘贴到您的用户表格
中Option Explicit Private mClsTbx() As clsTextBox Private Sub InitBoxes(ByVal BoxType As String, ByVal BoxNames As Variant) Dim StartIdx As Long On Error Resume Next StartIdx = UBound(mClsTbx) + 1 On Error GoTo 0 ReDim Preserve mClsTbx(StartIdx + UBound(BoxNames)) Dim i As Long For i = 0 To UBound(BoxNames) Set mClsTbx(i + StartIdx) = New clsTextBox Set mClsTbx(i + StartIdx).pTbx = Controls(BoxNames(i)) mClsTbx(i + StartIdx).BoxType = BoxType Next i End Sub Private Sub UserForm_Initialize() 'here we define which TextBox belongs to which type InitBoxes BoxType:="TypeA", BoxNames:=Array("TextBoxA1", "TextBoxA2") InitBoxes BoxType:="TypeB", BoxNames:=Array("TextBoxB1", "TextBoxB2") 'add more types here End Sub