我正在尝试做验证输入的文本框(仅适用于数字)。
我对课程还很陌生,对某些事情有点困惑,但我会尽力学习。我在用户表单中有多个文本框,并且希望它们中的每一个都只能是数字输入。一开始我只检查一个文本框(vzdalenost1)。
第一个代码只是为了在文本框和类之间创建连接
Dim chk As New Class1
Private Sub UserForm_Initialize()
Set chk.ChkEvents = Controls("Vzdalenost1")
End Sub
第二个代码是实际的类模块
Option Explicit
Public WithEvents ChkEvents As MSForms.TextBox
Private Sub ChkEvents_change()
If IsNumeric(Me.Value) Or Me.Value = "" Then
Else
MsgBox "blablabla"
Me.Value = ""
End If
End Sub
当我尝试向文本框“vzdalenost1”中写入内容时,excel 显示错误消息“未找到方法或数据成员”。
我什至有类似将“me.value”替换为“me.control.value”之类的东西,这也不起作用。
Me
此上下文中的关键字指的是类对象本身,而不是文本框。使用ChkEvents
来指代文本框- ChkEvents.Value
。
以下是如何重新编写代码以处理多个文本框。首先,让我们给你的类起一个有意义的名字,我们称之为 clsTextbox。然后,按照封装的原则,让我们将类中的对象声明为 Private,而不是 Public。这将阻止公众直接访问它。相反,我们将使用成员函数将文本框分配给类对象。所以我们的类模块的代码看起来像这样......
Option Explicit
Private WithEvents tb As MSForms.TextBox
Private Sub tb_Change()
MsgBox tb.Name
End Sub
Public Function SetTextbox(ByRef obj As MSForms.TextBox)
Set tb = obj
End Function
然后,对于我们的用户表单,首先我们在模块级别声明一个集合来保存我们的类对象。然后,因为我们将创建多个类对象,所以我们声明一个没有关键字的类对象New
。相反,我们将在每次创建新对象时使用该关键字,然后将该新对象添加到我们的集合中。所以我们用户表单的代码看起来像这样......
Option Explicit
Dim textboxCollection As Collection
Private Sub UserForm_Initialize()
Set textboxCollection = New Collection
Dim cTextbox As clsTextbox
Dim ctrl As MSForms.Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then
Set cTextbox = New clsTextbox
cTextbox.SetTextbox ctrl
textboxCollection.Add cTextbox
End If
Next ctrl
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句