Ошибки при добавлении элементов в коллекцию VBA / VB6 - PullRequest
4 голосов
/ 30 июля 2010

Я все еще изучаю VBA и не могу понять, у меня так много проблем с объектом Collections.

У меня есть функция, которая добавляет пользовательские объекты (я создал очень простой классхранить некоторые данные), который выполняет типичные операции «чтение данных, создание представления объекта, вставка его в коллекцию».

Если я пытаюсь добавить «ключ» к вызову bag.add, я получаю«Ошибка компиляции. Ожидается: =» сообщение.

Если мне это не удается, похоже, что оно сработало, то при запуске программы появляется сообщение «Ошибка компиляции. Аргумент не является обязательным» и выделяется «getRevColumns = bag».line.

Я не могу понять, что происходит со мной!Я подозреваю, что что-то не так с тем, как я инициализировал свою сумку ?!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

Ответы [ 4 ]

11 голосов
/ 30 июля 2010

Попробуйте удалить символы вокруг него в надстройке:

bag.Add itm

или

bag.Add itm, key

Прошло много времени с тех пор, как мне приходилось работать с VBA / VB6, но я считаю, что включение паренов приводит к тому, что его передают по значению, а не по ссылке. Я могу ошибаться.

3 голосов
/ 30 июля 2010

сумка это предмет. Правило № 1 для объектов использовать Set

Set getRevColumns = bag
0 голосов
/ 12 марта 2014

У меня была похожая проблема с коллекцией.

Я потускнул его, но не установил его с помощью New или не инициализировал его.

В основном у меня было

Dim collection1 As Collection
...
collection1.Add item     'no compile error just empty

Я добавил следующее перед добавлением

Set collection1 = New Collection
Call collection1.init

тогда это работало как чудо ... Я также переместил оператор Dim из Sub в верхнюю часть модуля, чтобы сделать его переменной класса

0 голосов
/ 30 июля 2010

Вы должны сказать

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

Надеюсь, это поможет

...