我正在VBA中创建一个工具来创建包含事务信息的标签。
我希望用户使用表单提供所有信息,并自动创建标签。
为此,我创建了一个名为clsTransaction
的交易类。
Public PartNum As String
Private Sub Class_Initialize()
MsgBox "initialized!"
End Sub
在表单的初始化中创建一个新对象
Private Sub UserForm_Initialize()
(...)
Dim trans As New clsTransaction
End Sub
然后,当更新文本框时,我想更新对象属性
Private Sub txtPartNum_AfterUpdate()
Dim strPartNum As String
strPartNum = txtPartNum.Value
MsgBox (strPartNum)
trans.PartNum = strPartNum
End Sub
我收到以下错误消息
运行时错误' 424': 需要对象
我的理解是我需要声明对象。我试图添加:
dim trans as object
但是我收到了其他错误消息:
运行时错误' 91': 对象变量或未设置块变量
有人可以帮我通过表单更新对象吗?
答案 0 :(得分:0)
问题似乎在您的声明范围内。通过这样做:
Private Sub UserForm_Initialize()
(...)
Dim trans As New clsTransaction '<-- declaration + assignment
End Sub
您在trans
的范围内声明UserForm_Initialize()
。因此,当您尝试使用它进入另一个范围时:
Private Sub txtPartNum_AfterUpdate()
(...)
trans.PartNum = strPartNum
End Sub
对象trans
不再存在,因为它超出范围(所以它已经被垃圾收集器收集)并且你得到了一个&#34;对象所需的错误&# 34 ;.您需要在全局级别声明trans
,这是一个想法:
Dim trans as yourClass '<-- global declaration: the object trans will keep on existing into all scopes
Private Sub UserForm_Initialize()
Set trans = New yourClass '<-- new instance of the object
End Sub
Private Sub txtPartNum_AfterUpdate()
'use the instance here
trans.PartNum = strPartNum
End Sub