2012-03-16 91 views
0

我想將我的對象和變量集合傳遞給VBA函數,對其進行一些更改並將其傳回。所以,我創建了一個樣本的Class1:如何在vba函數中傳遞類變量

Public pInfo As String 

和樣本功能:

Public Function populate(someVar As Class1) As Class1 

    populate.pInfo = someVar.pInfo & " 1 " 

End Function 

和tryed將它傳遞給我的函數填入:

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

End Sub 

導致編譯錯誤:ByRef參數類型不匹配。

UPDATE。感謝您的幫助,現在編譯。

回答

3

它是一種類型的錯誤

Dim v, w As Class1 

Unintuitively這裏只wClass1類型,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?」 – 2012-03-16 13:59:22

+0

您創建的方法可以完成您的填充操作,但可以在類內 – 2012-03-16 14:01:32

+0

感謝您的回覆。 (我不是OP,只是好奇。)我沒有看到VBA對象的任何引用browswer到CopyTo。 – 2012-03-16 14:04:14

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繼承任何其他屬性。