À l'aide de SOMME() en VBA

Si j'ai un ensemble de cellules dans une feuille de calcul que je veux ajouter, je peux utiliser la formule:

=SUM(Sheet1!A1:A10)

Pour ce faire, dans un sous, je voudrais utiliser:

Sub example1()
    Dim r As Range, v As Variant

    Set r = Sheets("Sheet1").Range("A1:A10")
    v = Application.WorksheetFunction.Sum(r)
End Sub

Si, toutefois, je tiens à ajouter en place une cellule unique à travers de nombreuses feuilles de calcul, j'utilise la formule:

=SUM(Sheet1:Sheet38!B2)

En VBA cette ligne échoue lamentablement, comme expliqué dans Spécifiez une plage Excel à travers les feuilles en VBA:

Sub dural()
    v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub

J'ai deux solutions de contournement. Je peux la somme par la programmation d'une boucle:

Sub example2()
    Dim i As Long
    Dim v As Variant

    v = 0
    For i = 1 To 38
        v = v + Sheets(i).Range("B2")
    Next i
End Sub

ou en utilisant Evaluate():

v = Evaluate("Sum(Sheet1:Sheet3!B2)")

Est-il possible d'utiliser Application.WorksheetFunction.Sum() pour ce calcul, ou devrais-je le bâton de la boucle?

Pourquoi ne pas evaluate?
Je n'ai pas fait tout cela dans un temps long, donc je ne vais pas ajouter cela comme une réponse jusqu'à ce que vous pouvez l'essayer, mais ne devriez-vous pas besoin d'utiliser également: Set r = Sheets("Sheet1").Range("Sheet1:Sheet3!B2") et puis ne Sum sur r? Ou similaire... tout ce que vous devez faire pour créer une gamme de feuilles. Vous êtes probablement mieux d'utiliser un de vos autres approches.
Je ne l'utilisation de Evaluate() et il fonctionne très bien....mais si je dois calculer basée sur une gamme dynamique (même sur toutes les feuilles), il y a une étape supplémentaire de décisions de la chaîne-je fournir à Evaluate()
Vous pouvez également créer deux caché des feuilles blanches "DÉMARRER" puis "TERMINER" et jalonnent les fiches que vous le souhaitez. Puis v = Evaluate("Sum(START:FINISH!B2)")
Et comme vous le savez, mais je vais le mettre ici pour les futurs téléspectateurs, vous pouvez remplacer la B2 de la partie avec une plage dynamique de référence. Par exemple, dire que vous avez la plage que vous souhaitez définir comme une variable rng il serait v = Evaluate("Sum(START:FINISH!" & rng.Address(1,1) & ")")

OriginalL'auteur Gary's Student | 2016-05-27