2013-08-27 5 views
0

Я использую функцию в Excel с помощью VBA. Вот мой код: «! #VALUE»Переводчик VBA останавливается, по-видимому, без причины

Function PresentValue2() 

     Dim i As Double 
     i = 1 

     Dim coll As Collection 

     coll.add i 

     PresentValue2 = coll.Item(1) 

    End Function 

Я сделал точку останова и intepreter просто останавливается в инструкции coll.add i и функция возвращает значение

Почему?

добавить ту же проблему с динамическим массивом

ответ

4

Коллекция является объектом. Вам необходимо создать экземпляр, прежде чем использовать его. Например. Dim col1 в коллекции Set col1 = Новая коллекция col1.add «пункт»

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

Dim col1 as New Collection 

Function PresentValue2 as Double 
Dim i as Double 
i = 1 

col1.add i 

'rest of your code here and return value 
'.... 
End Function 
+1

Static довольно хорошо тоже, и поэтому вы не» t нужно опоздать на привязку к коллекции (бит медленнее бит медленнее) (используйте как 'Sub blah(): Static foo: Если foo ничего не задает, то foo = New Bar(): ... rest sub sub ...') –

1

Вы пропускаете Set:

Function PresentValue2() 
    Dim i As Double 
    i = 1 
    Dim coll As Collection 
    Set coll = New Collection 
    coll.Add i 
    PresentValue2 = coll.Item(1) 
End Function 
Смежные вопросы