2012-03-16 13 views
0

オブジェクトと変数のセットをVBA関数に渡し、いくつか変更して結果として戻したいと思います。vba関数でクラス変数を渡す方法

Public pInfo As String 

とサンプル関数:だから私は、サンプルのClass1作成

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ここだけwvがバリアントである、タイプ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 

(よりもむしろ使用して、それらが両方Class1あなたがしなければならないようにするに あなたが好きかもしれない機能はv.copyTo(w)です)

+0

「copyto」とは –

+0

Populateが何をしているのかクラス内に作成するメソッド –

+0

返事をありがとう。 (私はOPではなく、ちょっと好奇心旺盛です。)VBAオブジェクトの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 

ます。また、それはsomeVarから、他のプロパティのいずれかを継承することはありませんので、これはClass1の新しいインスタンスを作成することに注意する必要があります。

関連する問題