2010-10-27 4 views
7

cela décrit ce que je suis en train de faire.vba: retourner le dictionnaire de la fonction

cela ne fonctionne pas pour moi, et on ne sait pas pourquoi.

merci d'avance pour toute aide.

 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 

Répondre

19

Vous devez utiliser le moment de mot-clé SET vous assignez un objet au lieu d'une valeur :

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 

Votre code d'origine a été crée aussi mondict comme un nouvel objet Dictionnaire , puis en le remplaçant immédiatement par un autre. Vous pouvez simplement ignorer cette étape.

+0

cela fonctionne avec une légère modification si vous définissez myFunc (1) = myDict2. mais alors cela crée une boucle infinie. –

+1

Non, ce n'est pas une boucle infinie. 'myFunction = Value' (ou' SET myFunction = Object') est l'équivalent VBA de 'RETURN Value' – BradC

+0

Et vous ne voulez pas' myFunc (1) = ', vous voulez juste' myFunc = ', sinon vous êtes il suffit de définir la première valeur du dictionnaire sur l'ensemble de l'objet, ce qui n'est pas ce que vous voulez. – BradC

Questions connexes