2010-10-27 7 views
7

Dies umreißt, was ich versuche zu tun.vba: Rückgabewörterbuch von Funktion

dies funktioniert nicht für mich, und es ist unklar, warum.

danke im voraus für jede und alle hilfe.

 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 

Antwort

19

Sie werden die SET-Schlüsselwort zu jeder Zeit verwenden müssen Sie ein Objekt zuweisen anstelle eines Wert:

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 

Ihr Original-Code auch myDict als neues Wörterbuch-Objekt erstellt wurde , dann sofort durch einen anderen ersetzen. Sie können diesen Schritt einfach überspringen.

+0

Dies funktioniert mit einer leichten Änderung, wenn Sie myFunc (1) = myDict2 festlegen. aber dann erzeugt dies eine Endlosschleife. –

+1

Nein, es ist keine Endlosschleife. 'myFunction = Value' (oder' SET myFunction = Object') ist das VBA-Äquivalent von 'RETURN Value' – BradC

+0

Und du willst nicht' myFunc (1) = ', du willst nur' myFunc = ', sonst bist du Setzen Sie einfach den ersten Wert des Wörterbuchs auf das gesamte andere Objekt, was nicht das ist, was Sie wollen. – BradC