这里的第一个问题。我好几天都在寻找这个问题的答案,并且已经解决了我自己一直想做的事情。我想分享我发现的内容,并希望有人可以建议更好的方法来完成这项工作。
我有一个使用多个类的函数,然后需要在数组中返回此信息以供其他地方使用。使用它的代码需要将这些信息分解回来,并重用返回的信息。它不是所有代码块的原因是该函数被多次调用而没有要求返回值。
我们关注的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
这就是我计划解压缩数据的方式,但我似乎没有正确使用它:
Private Sub 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工作得很好。
我确定我在这里错过了一些东西,或者我可能只是把自己扔在墙上。关于我缺少什么,或者我如何改进的任何建议都得到了很好的赞赏。我觉得这样做会提高可读性,但是它也不会浪费命名空间吗?
答案 0 :(得分:0)
尝试声明
Dim cAgentInfo As Variant
像这样的数组:
Dim cAgentInfo() As Variant
答案 1 :(得分:0)
我无法抓住你的大设计,所以我尝试建议
Private Sub cmdAssignRecords_Click()
'Dim cAgentInfo As Variant
Dim cAgentInfo() As cAgent
...
和
'Function CalculateRecords() As Variant
Function CalculateRecords() As cAgent()
这样你就可以在函数CalculateRecords
中使用cAgentInfo(0).AgentNames(0)