2017-06-09 5 views
1

Je suis confronté à l'utilisation d'une fonction que j'ai construite dans VBA. J'essaie de l'utiliser dans une autre feuille que celle à laquelle je me réfère à l'intérieur de la fonction, mais je reçois une erreur de référence circulaire. Quelqu'un pourrait-il m'aider s'il vous plaît? C'est la première fois que j'écris un code en VBA, donc s'il vous plaît comprenez si les erreurs sont ... drôles.Erreur de référence circulaire VBA de la fonction

Function Dividend(row As String, col As Date) As Variant 
Dim Table As Range 
Dim Blgdata() As Variant 
Dim v As Integer 
Dim h As Integer, var As Date 

v = 666 
h = 27 

Sheets(3).Activate 
Set Table = Range(Cells(179, 1), Cells(844, 27)) 
Debug.Print Table.Address 
ReDim Blgdata(1 To v, 1 To h) 
Blgdata = Table 




Dim i As Integer, j As Integer 


'For i = 1 To 666 
    ' For j = 1 To 26 
    '  Debug.Print Blgdata(i, j) 
    '  If Blgdata(i, j + 1) = 0 Then 
    ' Exit For 
     ' 
     ' End If 

    'Next j 
'Next i 


For i = 1 To v Step 7 
    If Blgdata(i, 1) = row Then 
            For j = 3 To h 

            var = Blgdata(i + 1, j) 
            'Debug.Print var 

            If (var = col) Then 
            Dividend = Blgdata(i + 4, j) 
            Exit For 
            End If 

            If j = h Then 
            Dividend = "-" 
            Exit For 
            End If 

            If Blgdata(i, j + 1) = 0 Then 
            Exit For 
            End If 

            Next j 


    End If 

Next i 

End Function 
+0

Quelle ligne de code produit l'erreur? Et le code ci-dessus dans une feuille de calcul ou dans un module (si feuille, lequel)? –

+0

Non apparenté, mais 'row As String, col As Date' dans la signature, n'a tout simplement pas l'air juste. En fait, il est tout à fait déroutant - à l'avenir, vous regarderez ce code en disant "WTF?!" dans quelques mois à partir de maintenant. Une ligne/colonne devrait raisonnablement être un entier long faisant référence à un index de ligne/colonne. –

+0

Vous pouvez utiliser un outil tel que [Rubberduck] (http://rubberduckvba.com/indentation) (avertissement: je gère ce projet open-source) pour vous aider à créer une indentation correcte. –

Répondre

0

Mon premier conseil sur l'écriture des fonctions vba serait de donner à votre fonction une chance de faire plus que le seul emploi que vous avez écrit pour. Par exemple, plutôt que votre

sheets(3).Activate 

Vous pouvez utiliser Utiliser Activesheet ou mieux, passer la fonction de la plage sur laquelle vous voulez agir.

Même chose avec votre v et h variables, utilisez peut-être le

h = inputrange.columns.count() 
fonction

afin que vous puissiez parcourir les gammes de tailles différentes. Tout cela pour dire que je ne peux pas vraiment reproduire ou tester votre erreur de référence circulaire, car il est écrit pour fonctionner uniquement sur votre feuille de calcul spécifique, que je n'ai pas. En tant que conseil générique, si vous voulez réellement une référence circulaire (comme dans le cas d'un problème nécessitant une solution itérative), vous pouvez cocher la case enable iterative calculation et autoriser la référence circulaire.

Bonne chance,

Edgar.