Je ne connais pas un moyen de l'arrêter, mais vous pouvez au moins reconnaître quand cela se passe la plupart du temps. Cela peut être utile si votre calcul prend du temps ou a des effets secondaires que vous ne voulez pas avoir deux fois et que vous voulez court-circuiter. (Réponse: Charles Williams a une réponse à votre question spécifique.) Ma réponse pourrait être utile si vous ne savez pas quel type de données vous pourriez récupérer, ou quand vous prévoyez d'obtenir quelque chose comme un tableau ou Si vous utilisez la propriété Application.Caller
dans une routine appelée à la suite d'un appel à Application.Evaluate
, vous verrez que l'un des appels semble provenir de la cellule supérieure gauche de la plage réelle. Evaluate
l'appel est fait à partir de, et un à partir de la cellule $ A $ 1 de la feuille de cette gamme est sur. Si vous appelez Application.Evaluate
à partir de la fenêtre immédiate, comme vous appelleriez votre exemple Sub, un appel semble provenir de la cellule supérieure gauche de la plage actuellement sélectionnée et un de la cellule $ A $ 1 de la feuille de calcul en cours. Je suis à peu près sûr que c'est le premier appel qui coûte $ 1 dans les deux cas. (Je le testerais si c'est important.)
Cependant, une seule valeur sera retournée par Application.Evaluate
. Je suis à peu près sûr que c'est celui du deuxième eval. (Je le testerais aussi.)
Évidemment, cela ne fonctionnera pas avec les appels faits à partir de la cellule réelle $ A $ 1.
(Quant à moi, j'aimerais savoir pourquoi la double évaluation arrive, j'aimerais aussi savoir pourquoi l'évaluateur est exposé à tout le monde..?)
EDIT: J'ai demandé sur StackOverflow ici : Why is Excel's 'Evaluate' method a general expression evaluator?
J'espère que cela aide, même si elle ne répond pas directement à votre question.
Est-ce considéré comme un bug, ou juste un comportement non documenté? – jtolle
Je considérerais cela comme un bug ... –
Appeler la fonction avec la syntaxe de parenthèse (par exemple '[EvalTest]') obtient le même résultat –