第一個問題在這裏。我一直在尋找這個問題的答案好幾天,並且已經解決了我一直在努力做的事情。我想分享我發現的內容,並希望有人能夠提出一個更好的方法來完成這項工作。VBA - 在函數之間傳遞對象
我有一個函數使用幾個類,然後需要返回這個信息在一個數組在其他地方使用。使用此代碼需要將此信息分解並重新使用返回的信息。它不是全部代碼塊的原因是該函數被調用很多次而不詢問返回值。
我們關心的Class模塊的一部分如下。這是我能夠實現它的唯一途徑。注意括號並計算參數。
Option Compare Database
Option Explicit
Private p_intaryAgentNames() As Integer
Public Property Get AgentNames() As Variant
AgentNames = p_intaryAgentNames()
End Property
Public Property Let AgentNames(IncomingArray As Variant)
If IsArray(IncomingArray) Then
If UBound(p_intaryAgentNames) <> UBound(IncomingArray) Then ReDim Preserve p_intaryAgentNames(UBound(IncomingArray))
p_intaryAgentNames() = IncomingArray
Else
MsgBox ("Invalid information passed to AgentNames array")
End If
End Property
Public Property Get Filter() As String
Filter = p_strFilter
End Property
Public Property Let Filter(value As String)
p_strFilter = value
End Property
Private Sub Class_Initialize()
ReDim p_intaryAgentNames(0)
End Sub
當完成我的功能,這是我用我的對象成員,把它們放到一個數組,然後將它傳遞給調用代碼:
Function CalculateRecords() As Variant
Const CONSTANTSTRINGZEROLENGTH As String = ""
Dim objRec1 As cAgent
Dim objRec2 As cAgent
Dim objRec3 As cAgent
Set objRec1 = New cAgent
Set objRec2 = New cAgent
Set objRec3 = New cAgent
Dim objAgents(2) As cAgent
'some things happen
Set objAgents(0) = objRec1
Set objAgents(1) = objRec2
Set objAgents(2) = objRec3
CalculateRecords = objAgents
End Function
這是我計劃如何解壓數據,但它似乎並不像我使用的是正確的:
私人小組cmdAssignRecords_Click()
Dim cAgentInfo As Variant
Dim objRec1 As cAgent
Set objRec1 = New cAgent
Dim objRec2 As cAgent
Set objRec2 = New cAgent
Dim objRec3 As cAgent
Set objRec3 = New cAgent
cAgentInfo = CalculateRecords() 'A variant to catch a variant
Set objRec1 = cAgentInfo(0)
Set objRec2 = cAgentInfo(0)
Set objRec3 = cAgentInfo(0)
我寧願做的是直接使用cAgentInfo(),並且這可以用於該類的其他對象。我不能做的是訪問cAgentInfo(0).AgentNames(0),而objRec1.AgentNames(0)和cAgentInfo(0).filter工作得很好。
我確定我只是在這裏錯過了一些東西,或者我只是把自己扔在牆上。任何關於我失蹤的建議,或者我可以改進的建議都是值得讚賞的。我覺得這樣做會提高可讀性,但這不是也浪費命名空間嗎?
這是什麼工作。我不知道我可以將該函數聲明爲我創建的類的數組。我以爲我只能將數組作爲變體傳遞。 – sweBers