第一个问题在这里。我一直在寻找这个问题的答案好几天,并且已经解决了我一直在努力做的事情。我想分享我发现的内容,并希望有人能够提出一个更好的方法来完成这项工作。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