Loop over alle Excel tabbladen

Status
Niet open voor verdere reacties.

teckna

Gebruiker
Lid geworden
28 mrt 2007
Berichten
36
Geachte aanwezigen,

Ik heb het volgende Excel bestand:
-Excel bestand met meerdere (per weken) tabbladen, met daarin gewerkte uren per project.
-In het "hoofdtabblad" wil ik de som van alle uren per project kunnen zien.

Ik heb hiervoor onderstaande VBA code:

-----------------------------------------------------------------------------------------------------
Dim uren As Double

For Each ws In ThisWorkbook.Sheets
uren = uren + ws.Application.SumIf(Range("D6:D8"), "26579", Range("E6:E8"))
Next ws

Som_Als_Uren = uren

End Function
--------------------------------------------------------------------------------------------------

In het "hoofdtabblad" loop ik tegen het volgende probleem aan:
-De SumIf functie werkt;
-Het aantal uren voor project 26579 in tabblad 1 is 5uur. De uitkomst is van de functie is 20, het aantal tabbladen is 4;
-Het aantal uren in de andere tabbladen voor project 26579 is 0;
-Ik heb het idee dat de loop 4x langs tabblad 1 gaat en daardoor dus op 20 uitkomt;
-Wanneer ik de functie evalueer met F8 dan zie ik wel dat de functie langs de andere tabbladen gaat, zie screenshot.
-Kortom, wat doe ik fout en hoe kom ik op 5uur uit?

1.pngBekijk bijlage Map1.xlsm

Als je tips hebt laat het weten, alvast bedankt.
 
Volledige code


Function Som_Als_Uren()

Dim ws As Worksheet
Dim uren As Double

For Each ws In ThisWorkbook.Sheets
uren = uren + ws.Application.SumIf(Range("D6:D8"), "26579", Range("E6:E8"))
Next ws

Som_Als_Uren = uren
 
Gebruik svp codetags.

Je gebruikt de variabele ws verkeerd.

Code:
uren = uren + Application.SumIf(ws.Range("D6:D8"), "26579", ws.Range("E6:E8"))
 
Doe het eens zo:
Code:
Function Som_Als_Uren() As Double
    Dim ws As Worksheet
    Dim uren As Double
    
    For Each ws In ThisWorkbook.Sheets
        uren = uren + WorksheetFunction.SumIf(ws.Range("D6:D8"), "26579", ws.Range("E6:E8"))
    Next ws
    
    Som_Als_Uren = uren
End Function

Edit:
2 Zielen, 1 gedachte ;)
 
Waarom niet de Excel formule:

PHP:
=SUM(Blad1:Blad4!E6)
 
Bedankt voor de reacties, ik had het vanochtend direct jullie oplossing toegepast en het werkt nu. Alleen wat is precies het verschil tussen "Application.SumIf" en "WorksheetFunction.SumIf" ?
 
Te vinden op de site van snb

Conclusie
Het gebruik van Application.formule biedt veel meer toegang tot gebruik van Excelformules dan de (application.)Worksheetfunction.formule variant.
Bovendien hoeft bij de Application.formule variant geen foutafhandelingsprocedure te worden toegevoegd om doorloop van de code te garanderen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan