2010-10-27 17 views
7

ten schemat określa, co próbuję zrobić.vba: słownik powrotu z funkcji

to nie działa dla mnie i nie jest jasne, dlaczego.

z góry dziękuję za wszelką pomoc.

 Sub mySub() 
     dim myDict as Dictionary 
      myDict=new Dictionary 

       myDict=myFunc() 

     End Sub 

     Function myFunc() 
      dim myDict2 
       set myDict2 = new Dictionary 

        'some code that does things and adds to myDict2' 

      myFunc=myDict2 
     End Function 

Odpowiedz

19

Musisz użyć słowa kluczowego SET każdej chwili jesteś przypisanie obiekt zamiast wartości :

Sub mySub() 
     dim myDict as Dictionary 
     set myDict = myFunc() 
    End Sub 

    Function myFunc() as Dictionary 
     dim myDict2 as Dictionary 
     set myDict2 = new Dictionary 
       'some code that does things and adds to myDict2' 
     set myFunc=myDict2 
    End Function 

Twój oryginalny kod został również tworzenie myDict jako nowego obiektu Dictionary , a następnie natychmiast zastępując go innym. Możesz po prostu pominąć ten krok.

+0

działa to z niewielkimi zmianami, jeśli ustawisz myFunc (1) = myDict2. ale wtedy tworzy nieskończoną pętlę. –

+1

Nie, nie jest to nieskończona pętla. 'myFunction = Wartość' (lub' SET myFunction = Object') to odpowiednik VBA 'RETURN Value'' – BradC

+0

A ty nie chcesz' myFunc (1) = ', po prostu chcesz' myFunc = ', w przeciwnym razie jesteś wystarczy ustawić pierwszą wartość słownika na cały inny obiekt, który nie jest tym, czego potrzebujesz. – BradC