Se ho una serie di celle di un foglio di lavoro che voglio aggiungere, posso usare la formula:Utilizzando SUM() in VBA
=SUM(Sheet1!A1:A10)
di fare questo in un sub, userei:
Sub example1()
Dim r As Range, v As Variant
Set r = Sheets("Sheet1").Range("A1:A10")
v = Application.WorksheetFunction.Sum(r)
End Sub
Se, tuttavia, voglio aggiungere una singola cella in molti fogli di lavoro, io uso la formula:
=SUM(Sheet1:Sheet38!B2)
in VBA questa linea fallisce miseramente, come spiegato in Specify an Excel range across sheets in VBA:
Sub dural()
v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub
Ho due soluzioni. Posso la somma programmando un ciclo:
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
o utilizzando Evaluate()
:
v = Evaluate("Sum(Sheet1:Sheet3!B2)")
E 'possibile utilizzare Application.WorksheetFunction.Sum()
per questo calcolo, o devo attaccare il ciclo?
Perché non 'valutare'? – findwindow
Non ho fatto nulla di tutto questo da molto tempo, quindi non aggiungerò questo come risposta finché non lo proverai, ma non dovresti usare anche: 'Set r = Sheets (" Sheet1 ") .Range ("Sheet1: Sheet3! B2") 'e quindi esegui' Sum' su 'r'? O simile ... qualsiasi cosa tu abbia bisogno di fare per creare una gamma dai fogli. Probabilmente stai meglio usando uno dei tuoi altri approcci. – gmiley
@findwindow Io uso 'Evaluate()' e funziona bene .... ma se devo calcolare basato su un intervallo dinamico * (uguale su tutti i fogli) *, c'è un passo in più che rende la stringa che devo fornire per 'Evaluate()' –