Wenn ich eine Reihe von Zellen in einem Arbeitsblatt, die ich hinzufügen will, kann ich die Formel:Mit SUM() in VBA
=SUM(Sheet1!A1:A10)
Um dies zu tun in einem Unter, würde ich verwenden:
Sub example1()
Dim r As Range, v As Variant
Set r = Sheets("Sheet1").Range("A1:A10")
v = Application.WorksheetFunction.Sum(r)
End Sub
Wenn aber ich will eine einzelne Zelle über viele Arbeitsblätter addieren, verwende ich die Formel:
=SUM(Sheet1:Sheet38!B2)
in VBA diese Linie kläglich versagt, wie erläutert in Specify an Excel range across sheets in VBA:
Sub dural()
v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub
Ich habe zwei Problemumgehungen. Ich kann das die Summe durch die Programmierung einer Schleife:
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
oder durch Evaluate()
mit:
v = Evaluate("Sum(Sheet1:Sheet3!B2)")
Ist es möglich, Application.WorksheetFunction.Sum()
für diese Berechnung zu verwenden, oder sollte ich die Schleife bleiben?
Warum nicht "evaluieren"? – findwindow
Ich habe das schon lange nicht mehr gemacht, also werde ich das nicht als Antwort hinzufügen, bis Sie es versuchen können, aber sollten Sie nicht auch folgendes verwenden: 'Set r = Sheets (" Sheet1 ") .Range ("Sheet1: Sheet3! B2") 'und dann' Sum' auf 'r'? Oder ähnliches ... was immer Sie tun müssen, um aus den Blättern einen Bereich zu erstellen. Es ist jedoch wahrscheinlich besser, einen Ihrer anderen Ansätze zu verwenden. – gmiley
@findwindow Ich benutze 'Evaluate()' und es funktioniert gut .... aber wenn ich basierend auf einem dynamischen Bereich * (gleich auf allen Blättern) * berechnen muss, gibt es einen zusätzlichen Schritt, der die Zeichenfolge muss ich liefern zu 'Evaluate() ' –