2012-03-16 3 views
0

Я хочу передать свой набор объектов и переменных функции VBA, внести в него некоторые изменения и передать их обратно. Таким образом, я создал образец Class1:как передать переменные класса в функции vba

Public pInfo As String 

и пример функции:

Public Function populate(someVar As Class1) As Class1 

    populate.pInfo = someVar.pInfo & " 1 " 

End Function 

и судимое передать ее моей функции заселить:

Sub test() 
Dim v, w As Class1 
Set v = New Class1 
v.pInfo = "303" 
Set w = populate(v) ' ERROR here 

End Sub 

приводит к ошибке компиляции: ByRef тип аргумента несоответствие.

ОБНОВЛЕНИЕ. Благодаря вашей помощи он компилируется сейчас.

ответ

3

Сво ошибка типа

Dim v, w As Class1 

Unintuitively здесь только w имеет тип Class1, v вариант. Для того, чтобы оба Class1 вы должны:

Dim v As Class1, w As Class1 

Здесь:

Public Function populate(someVar As Class1) As Class1 
    populate.pInfo = someVar.pInfo & " 1 " 
End Function 

populate не является экземпляром Class1, вам нужно создать его:

Public Function populate(someVar As Class1) As Class1 
    set populate = new Class1 
    populate.pInfo = someVar.pInfo & " 1 " 
End Function 

(Вместо того, чтобы использовать функцию, которую вы можете предпочесть v.copyTo(w))

+0

Что такое «copyto»? –

+0

Созданный вами метод делает то, что делает ваш Populate, но внутри класса –

+0

Спасибо за ответ. (Я не ОП, просто любопытно.) Я не вижу никакой ссылки в объекте VBA browswer на CopyTo. –

2

Кроме того, необходимо скорректировать свой метод Populate() следующим образом:

Public Function Populate(someVar As Class1) As Class1  
    Dim z as Class1 

    Set z = New Class1 

    z.pInfo = someVar.pInfo & " 1 " 

    Set Populate = z 

    Set z = Nothing 
End Function 

Вы также должны знать, что это создаст новый экземпляр Class1 поэтому он не будет наследовать какой-либо из других свойств от someVar.