2010-03-03 3 views
0

J'écris un ensemble de fonctions en C++ qui peuvent être appelées par excel. Cependant, ces fonctions sont asynchrones, donc aucune valeur de retour immédiate n'est disponible. Une fois qu'un résultat est disponible, j'ai utilisé une fonction de rappel via VBA qui met à jour le résultat dans la cellule qui a appelé les fonctions.Comment éviter la référence circulaire lors de la mise à jour de la cellule Excel

Mais, ici, j'ai un problème d'appel de fonction circulaire, parce que quand je mets à jour la cellule. Excel appelle automatiquement la fonction d'origine une fois de plus. S'il vous plaît aidez-moi à contourner ce problème

Merci Vous

Répondre

1

Sans savoir plus sur le flux de données de votre programme, il est impossible de répondre en détail. Quand les fonctions C++ sont-elles appelées, quelles données leur sont transmises et quand mettez-vous à jour la cellule concernée? Peu importe comment appelez-vous les fonctions C++? Si c'est via VBA, essayez de désactiver le calcul automatique:

MyWorkSheet.EnableCalculation = False 

puis de le rallumer à la fin de la fonction de rappel:

MyWorkSheet.EnableCalculation = True 
0

Il est préférable, si vous pouvez mettre un exemple de code expliquant ce que vous essayez exactement de faire.

qu'entendez-vous par

passer la référence de cellule actuelle

si je comprends bien, vous essayez de passer la valeur de retour de la fonction à la fonction elle-même à nouveau. Ceci est une référence circulaire. car, lorsque la fonction renvoie une valeur, la valeur de la cellule est mise à jour, ce qui entraîne une réévaluation de toute fonction ayant la référence de cellule mise à jour comme paramètre d'entrée, ce qui oblige votre fonction à appeler une boucle!

Questions connexes