使用表单更新类对象

时间:2015-04-29 10:06:52

标签: forms vba ms-word word-vba

我正在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':   对象变量或未设置块变量

有人可以帮我通过表单更新对象吗?

1 个答案:

答案 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