gpt4 book ai didi

excel - 一根线调用多个Sub

转载 作者:行者123 更新时间:2023-12-02 19:01:06 25 4
gpt4 key购买 nike

我正在尝试用一行调用多个 Sub,此时我正在这样做(这不切实际)

' 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 个文本框...

某些文本框的功能必须不同,因此我无法使用“For Each Textbox.....”

最佳答案

您可以通过添加处理事件的类来为多个文本框添加事件处理程序。此类可以包含 BoxType,以便您可以为每个 TextBox 定义它的类型,然后在事件处理程序中,您可以通过它们的 BoxType.

  1. 添加一个类模块将其命名为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 指定触发事件的文本框的类型。
  2. 初始化文本框。因此,将以下代码粘贴到您的用户表单中

    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

关于excel - 一根线调用多个Sub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56326513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com