我还在学习VBA,我无法弄清楚我是否遇到过Collections对象的这么多问题。
我有一个添加自定义对象的函数(我创建了一个非常简单的类来存储一些数据),这些函数执行典型的“读取数据,创建对象表示,将其粘贴到集合中”这类东西。
如果我尝试在bag.add调用中添加“密钥”,则会收到“编译错误。预期:=”消息。
如果我不这样做,那么当我运行该程序时,它会显示“编译错误。参数不是可选的”并突出显示“getRevColumns = bag”行。
我不能为我的生活弄清楚是不是正在发生!我怀疑我的包包初始化有什么问题?! PS:columnMap是我的自定义类的名称。
Function getRevColumns() As Collection
Dim rng As Range
Dim i As Integer
Dim bag As Collection
Dim opManCol As Integer, siebelCol As Integer
Dim opManColName As String, siebelColName As String
Dim itm As columnMap
Set bag = New Collection
Set rng = shSiebelMap.UsedRange.Columns(5)
i = 1
For i = 1 To rng.Rows.count
If StrComp(UCase(rng.Cells(i).value), "Y") = 0 Then
opManCol = rng.Rows(i).OffSet(0, -2).value
opManColName = rng.Rows(i).OffSet(0, -4)
siebelCol = rng.Rows(i).OffSet(0, -1).value
siebelColName = rng.Rows(i).OffSet(0, -3)
Set itm = New columnMap
itm.opManColName = opManColName
itm.opManColNumber = opManCol
itm.siebelColName = siebelColName
itm.siebelColNumber = siebelCol
'WHY DOESN'T IT WORK!''
bag.Add (itm)
'MsgBox "opMan Col: " & opManColName & " : " & opManCol & ". Siebel Col: " & siebelColName & " : " & siebelCol'
End If
Next i
getRevColumns = bag
End Function
答案 0 :(得分:11)
尝试在add:
中删除它周围的parensbag.Add itm
或
bag.Add itm, key
已经有一段时间了,因为我不得不使用VBA / VB6,但我相信包括parens导致它通过值而不是通过引用传递。我错了。
答案 1 :(得分:3)
Set getRevColumns = bag
答案 2 :(得分:0)
你需要说
set getRevColumns = bag
我猜你在添加时遇到了问题。我不知道为什么会这样,但它适用于
bag.add itm
我以简单的方式尝试了整个事情,这是我的工作代码
Sub myroutine()
Dim bag As Collection
Dim itm As clsSimple
Set bag = getTheCollection()
Set itm = bag.Item(1)
MsgBox (itm.someObjectValue)
Set itm = bag.Item(2)
MsgBox (itm.someObjectValue)
End Sub
Function getTheCollection() As Collection
Dim bag As Collection
Dim itm As clsSimple
Set bag = New Collection
Set itm = New clsSimple
itm.someObjectValue = "value 1"
bag.Add itm
Set itm = New clsSimple
itm.someObjectValue = "value 2"
bag.Add itm
Set getTheCollection = bag
End Function
课程非常简单:
Public someObjectValue As String
希望有所帮助
答案 3 :(得分:-1)
我的收藏品有类似的问题。
我昏暗但没有用新的或初始化它。
基本上我有
Dim collection1 As Collection
...
collection1.Add item 'no compile error just empty
我在添加
之前添加了以下内容Set collection1 = New Collection
Call collection1.init
然后它就像一个魅力......我还将Dim语句从Sub移到模块的顶部,使其成为一个类变量