Userform上的类对象TextBox可用方法

时间:2019-06-05 12:09:14

标签: excel vba

我注意到,当我为文本框创建一个类模块并在窗体上使用它时-通过在窗体初始化事件中通过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

0 个答案:

没有答案