2012-10-17 148 views
3

我在使用創建的類作爲另一個類中的一個屬性時遇到問題。我有兩個類,一個叫Vertex,另一個叫Edge。 Edge,Parent和Child的兩個屬性是Vertex對象。這裏是我嘗試使用它們的方法。使用一個類作爲另一個類的屬性的VBA

Option Explicit 

Public Sub OrgChart() 

Dim Vertices As Collection 
Dim Edges As Collection 
Dim vParent As Vertex 
Dim vChild As Vertex 
Dim eEdge As Edge 
Dim rEdgeRow As Range 

Set rEdgeRow = ActiveSheet.Range("A1:C1") 

Do While Len(rEdgeRow(1, 1).Value) > 0 

Set vChild = New Vertex 
Set vParent = New Vertex 
Set eEdge = New Edge 

vChild.Name = rEdgeRow(1, 1).Value 
vChild.Dummy = False 

vParent.Name = rEdgeRow(2, 1).Value 
vParent.Dummy = False 

eEdge.Parent = vParent 
eEdge.Child = vChild 
eEdge.Percent = rEdgeRow(3, 1).Value 

Set rEdgeRow = rEdgeRow.Offset(1, 0) 

Loop 

End Sub 

當我運行它,我得到的錯誤,

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

調試表明,它是打破在該行

eEdge.Parent = vParent 

我認爲,這個問題已與eEdge.Parent做到不被初始化,但我嘗試使用

Set eEdge.Parent = New Vertex 

和我有同樣的問題。

如果有幫助,我也可以發佈類代碼,儘管它們非常簡單,只包含Property Get和Property Let函數。

我很抱歉,如果我做了任何錯誤發佈時,這是我第一次在SO上發佈任何內容。

感謝, 埃裏克

+0

com piler建議eEdge爲空。 – mcalex

+0

我懷疑可能是這種情況,但我無法弄清楚如何正確初始化它。我是否需要在Edge類的Property Let函數中包含某種初始化,超出了我爲簡單屬性(如Int)所包含的內容? – Eric

+1

設置屬性是對象類型時,您確實需要使用Set。您應該發佈您的'Edge'類的'Parent'屬性的代碼。 –

回答

1

我可能不會理解這個權利,但你嘗試:

Set eEdge.Parent = vParent 
Set eEdge.Child = vChild 

如果他們的對象,你需要使用 「設置」

...此外,如果這不能解決它,你可以發佈你的頂點類的代碼 - 你可能需要在其構造函數中以不同的方式調暗父對象和子對象...

+0

您可以在回覆其他答案時看到我的評論。基本上,是的,這是問題所在。 – Eric

相關問題