Excel 如何在类模块中使用文本框的更新后?

Excel 如何在类模块中使用文本框的更新后?,excel,vba,class,module,textbox,Excel,Vba,Class,Module,Textbox,如何在类模块中使用“更新后”选项 在我问完最后一个问题后,我想我已经成功了。我仍然无法在类模块中选择“更新后”选项 我的UserForm和Class模块中有以下代码: Public verzameling作为新系列 Public with events TextBox events As MSForms.TextBox 私有子用户表单_初始化() 对于控制中的每个ctl 如果TypeName(ctl)=“文本框”,则 verzameling.添加新的发票控件 设置verzameling(verz

如何在类模块中使用“更新后”选项

在我问完最后一个问题后,我想我已经成功了。我仍然无法在类模块中选择“更新后”选项

我的UserForm和Class模块中有以下代码:

Public verzameling作为新系列
Public with events TextBox events As MSForms.TextBox
私有子用户表单_初始化()
对于控制中的每个ctl
如果TypeName(ctl)=“文本框”,则
verzameling.添加新的发票控件
设置verzameling(verzameling.Count)。cl_tekstvak=ctl
如果结束
下一个
我的课程模块中的下一个:

Public with events cl_tekstvak As MSForms.TextBox
Dragover之前的私有子目录(ByVal Cancel作为MSForms.ReturnBoolean,ByVal数据作为MSForms.DataObject,ByVal X作为Single,ByVal Y作为Single,ByVal DragState作为MSForms.fmDragState,ByVal Effect作为MSForms.ReturnEffect,ByVal Shift作为Integer)
效果=2
如果nr=621或nr=622,则效果=fmDropEffectCopy
取消=错误
端接头

打开记事本,复制下面的代码,并将其粘贴到新的txt文件中。将其保存为als CatchEvents2.cls

VERSION 1.0 CLASS
    BEGIN
      MultiUse = -1  'True
    End
    Attribute VB_Name = "CatchEvents2"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Private Type GUID
          Data1 As Long
          Data2 As Integer
          Data3 As Integer
          Data4(0 To 7) As Byte
    End Type

    #If VBA7 And Win64 Then
          Private Declare PtrSafe Function ConnectToConnectionPoint Lib "shlwapi" Alias "#168" (ByVal punk As stdole.IUnknown, _
                  ByRef riidEvent As GUID, ByVal fConnect As Long, ByVal punkTarget As stdole.IUnknown, ByRef pdwCookie As Long, _
                  Optional ByVal ppcpOut As LongPtr) As Long
    #Else
         Private Declare Function ConnectToConnectionPoint Lib "shlwapi" Alias "#168" (ByVal punk As stdole.IUnknown, ByRef riidEvent As GUID, _
                  ByVal fConnect As Long, ByVal punkTarget As stdole.IUnknown, ByRef pdwCookie As Long, Optional ByVal ppcpOut As Long) As Long
    #End If

    Private EventGuide As GUID
    Private Ck As Long
    Private ctl As Object
    Private CustomProp As String

    Public Sub MyAfterUpdate()
    Attribute MyChange.VB_UserMemId = -2147384832

        Debug.Print " AfterUpdate ControlName " & " Type: " & TypeName(ctl) & " CustomProp: " & CustomProp
       Select Case TypeName(ctl)
         Case "TextBox": Debug.Print "do something after afterupdate of textboxes"
         Case Else:: Debug.Print "do something else or nothing"
       End Select
    End Sub



    Public Sub ConnectAllEvents(ByVal connect As Boolean)
          With EventGuide
              .Data1 = &H20400
              .Data4(0) = &HC0
              .Data4(7) = &H46
          End With
          ConnectToConnectionPoint Me, EventGuide, connect, ctl, Ck, 0&
    End Sub

    Public Property Let Prop(newProp As String)
          CustomProp = newProp
    End Property

    Public Property Let Item(Ctrl As Object)
          Set ctl = Ctrl
          Call ConnectAllEvents(True)
    End Property
在VBA编辑器中导入此文件(右键单击VBA项目并选择“导入”)

在普通模块中,输入以下代码:

Private AllControls() As New CatchEvents2
在用户表单背后的代码中:

Private Sub UserForm_Initialize()

Dim j As Long

ReDim AllControls(Controls.Count - 1)
    For j = 0 To UBound(AllControls)
       AllControls(j).Item = Controls(j)
       AllControls(j).Prop = Controls(j).Name
    Next

End Sub

Sub disconnect()
Dim j As Long
  For j = LBound(AllControls) To UBound(AllControls)
          AllControls(j).Clear
   Next j
      Erase AllControls

End Sub

Private Sub UserForm_Terminate()
disconnect
End Sub

欲了解更多信息和更好的编码,请查看此处:

请查看此处:您需要后更新还是前更新?我需要后更新非常有趣+:)这是我无法胜任的。。。。我会尽力理解这一点