Class 使用表单更新对象
Class Object update using a form
我正在 VBA 创建一个工具来创建带有交易信息的标签。
我希望用户使用表格提供所有信息,标签将自动创建。
为此,我创建了一个名为 clsTransaction
的交易 class。
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
我收到以下错误消息
Run-time error '424':
Object required
我的理解是我需要声明对象。我尝试添加:
dim trans as object
但我收到另一条错误消息:
Run time error '91':
object variable or With block variable not set
有人可以帮我通过表格更新对象吗?
问题似乎在你声明的范围内。通过这样做:
Private Sub UserForm_Initialize()
(...)
Dim trans As New clsTransaction '<-- declaration + assignment
End Sub
您在 UserForm_Initialize()
的范围内声明 trans
。因此,当您尝试在另一个范围内使用它时:
Private Sub txtPartNum_AfterUpdate()
(...)
trans.PartNum = strPartNum
End Sub
对象 trans
不再存在,因为它超出了范围(因此它已被垃圾收集器收集)并且您得到一个 "object required error"。您需要在全局级别声明 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
我正在 VBA 创建一个工具来创建带有交易信息的标签。
我希望用户使用表格提供所有信息,标签将自动创建。
为此,我创建了一个名为 clsTransaction
的交易 class。
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
我收到以下错误消息
Run-time error '424': Object required
我的理解是我需要声明对象。我尝试添加:
dim trans as object
但我收到另一条错误消息:
Run time error '91': object variable or With block variable not set
有人可以帮我通过表格更新对象吗?
问题似乎在你声明的范围内。通过这样做:
Private Sub UserForm_Initialize()
(...)
Dim trans As New clsTransaction '<-- declaration + assignment
End Sub
您在 UserForm_Initialize()
的范围内声明 trans
。因此,当您尝试在另一个范围内使用它时:
Private Sub txtPartNum_AfterUpdate()
(...)
trans.PartNum = strPartNum
End Sub
对象 trans
不再存在,因为它超出了范围(因此它已被垃圾收集器收集)并且您得到一个 "object required error"。您需要在全局级别声明 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