Excel 如何在类模块中使用文本框的更新后?
如何在类模块中使用“更新后”选项 在我问完最后一个问题后,我想我已经成功了。我仍然无法在类模块中选择“更新后”选项 我的UserForm和Class模块中有以下代码: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
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
欲了解更多信息和更好的编码,请查看此处:请查看此处:您需要后更新还是前更新?我需要后更新非常有趣+:)这是我无法胜任的。。。。我会尽力理解这一点