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