2010-10-27 5 views
7

descrive ciò che sto cercando di fare.vba: il dizionario di ritorno dalla funzione

questo non funziona per me, e non è chiaro il perché.

grazie in anticipo per qualsiasi aiuto.

 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 

risposta

19

Avrete bisogno di utilizzare il set di parole chiave in qualsiasi momento si assegna un oggetto invece di un valore :

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 

Il codice originale è stata anche la creazione di myDict come un nuovo oggetto Dictionary , quindi immediatamente sostituendolo con uno diverso. Puoi saltare questo passaggio.

+0

funziona con una leggera modifica se si imposta myFunc (1) = myDict2. ma poi questo crea un ciclo infinito. –

+1

No, non è un loop infinito. 'myFunction = Value' (o' SET myFunction = Object') è l'equivalente VBA di 'RETURN Value' – BradC

+0

E non vuoi 'myFunc (1) =', vuoi solo 'myFunc =', altrimenti sei semplicemente impostando il primo valore del dizionario sull'intero altro oggetto, che non è quello che vuoi. – BradC