我注意到,当我为文本框创建一个类模块并在窗体上使用它时-通过在窗体初始化事件中通过VBA添加-输入或退出方法均不可用。当然,如果我只是在表单中添加一个文本框。
我可以使DblClick方法正常工作,因此可以正确设置类,并且form.init代码也可以。
当我在对象浏览器中查找MSForms.TextBox时,我发现它没有Enter或Exit方法,并且推测这是原因。
这对我来说没有紧迫性,因为在构建使用针对文本框使用自己的类的第一个表单时,我注意到了这一点-幸运的是,根据我现在的工作情况,-我实际上不需要Enter或Exit方法,但以为有人会知道是否有解决方法,因为将来我可能需要它们,对于文本框,它们是非常有用的方法
这是我的班级代码nxTxtV
Option Explicit
Public WithEvents oTxtV As MSForms.TextBox
Private Sub oTxtV_Enter()
' This method never fires
MsgBox "Hello World from the Enter Method"
End Sub
Private Sub oTxtV_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
' This method works fine
MsgBox "Hello World from the DoubleClick Method for " & oTxtV.Value
End Sub
这是我的表单初始化代码
Private Sub UserForm_Initialize()
Dim xItm As Control, i As Long
Dim dItm As nxTxtV ' nxTxtV is the name of my class
For i = 1 To 5
Set xItm = Me.Controls.Add("Forms.TextBox.1", "Column" & i, True)
With xItm
.Value = "P" & i
.AutoSize = False
.Font.Size = 9
.Width = 25
.Height = 250
.TextAlign = 2 ' Centred
.SpecialEffect = 0
.BackColor = RGB(255, 128, 0)
.WordWrap = True
.Left = 200 + (i * 27)
.Top = 5
.Enabled = True
.Visible = True
End With
Set dItm = New nxTxtV ' nxTxtV is the name of my class
Set dItm.oTxtV = xItm
CodedObjs.Add dItm ' CodedObjs is declared at module level (form level) as a Collection
Next i
End Sub
简而言之,我可以让我的班级对Enter和Exit事件做出反应吗?
附录-CodedObjs声明
Public CodedObjs As New Collection