2015-04-29 20 views
-1

我在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 

形式的initilalisation然後當一個文本框的更新,我想更新的對象屬性

Private Sub txtPartNum_AfterUpdate() 

    Dim strPartNum As String 
    strPartNum = txtPartNum.Value 
    MsgBox (strPartNum) 
    trans.PartNum = strPartNum 

End Sub 

我得到以下錯誤信息

運行時錯誤或'424': 需要對象

我的理解是我需要聲明obect。我嘗試添加:

dim trans as object 

,但我得到了其他錯誤消息:

運行時錯誤「91」: 對象變量或帶塊變量未設置

莫非有人幫助我通過表單更新對象?

+0

哪個程序正在使用? Excel?訪問?請相應標記。 –

+0

'UserForm_Initialize'中的dimmed * trans *不能在'txtPartNum_AfterUpdate'中'看到',而不會將其作爲參數傳遞(不太可能)或作爲公共/私有變量傳遞給該模塊。 – Jeeped

回答

0

該問題似乎在您的聲明範圍內。通過這樣做:

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不存在了,因爲它是超出範圍(因此它已經被垃圾收集器收集),你會得到一個「對象所需的錯誤」。您需要在全球範圍內聲明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