Marco laten uitvoeren over verschillende bereiken.

Status
Niet open voor verdere reacties.

kleinen

Nieuwe gebruiker
Lid geworden
29 mrt 2009
Berichten
4
Jow, effe mijn vraag posten.

Ik wil een macro laten uitvoeren over verschillende bereiken.
Dus ik heb bereik E3:AI3. Hier laat ik een macro uitvoeren ( no problem ).

Maar nu wil ik dat de macro die op de rij 3 wordt uitgevoerd ook op andere ( volgende ) rijen wordt uitgevoerd.
Dus per rij wil ik een resultaat hebben.
Dus het totaal bereik E3:AI24 moet per rij een paar macro's uitgevoerd worden.

Ik moet dus een of andere loop hebben die na het uitvoeren van alle macro's op een rij naar de volgende gaat ( dus tot 24 ).

Ik hoop dat het duidelijk is!
 
Deze lus gaat alle rijen langs in jou bereik
Screenupdating wordt uitgezet om de uitvoering te versnellen.
Code:
Sub test()
    Application.ScreenUpdating = False
        For Each Row In Range("E3", "AI23")
              'hier kun je jouw macro's uitvoeren of aanroepen.
        Next
    Application.ScreenUpdating = True
End Sub

mvg leo
 
Laatst bewerkt:
Deze lus gaat alle rijen langs in jou bereik
Screenupdating wordt uitgezet om de uitvoering te versnellen.
Code:
Sub test()
    Application.ScreenUpdating = False
        For Each Row In Range("E3", "AI23")
              'hier kun je jouw macro's uitvoeren of aanroepen.
        Next
    Application.ScreenUpdating = True
End Sub

mvg leo

lukt maar precies zelf een paar dingen over het hoofd gezien.

Dit is mijn code tot nu toe :

Private Sub CommandButton1_Click()

' eerst nachturen uitrekenen, dan weekenduren

Dim rngcell As Range
Dim bytdummy As Byte

Range("B3") = 0
Range("C3") = 0
Range("D3") = 0

Range("B4") = 0
Range("C4") = 0
Range("D4") = 0

'de macros voor alle rijen laten uitvoeren
For Each Row In Range("E3", "AI5")

' uitrekenen nachturen
For Each rngcell In Blad1.Range("E3:AI3")

If rngcell = 3 Then
Range("D3") = Range("d3") + 2
ElseIf rngcell = 4 Then
Range("C3") = Range("C3") + 3
Range("D3") = Range("d3") + 2
ElseIf rngcell = 5 Then
Range("D3") = Range("d3") + 7
ElseIf rngcell = 6 Then
Range("D3") = Range("d3") + 9
ElseIf rngcell = 7 Then
Range("C3") = Range("C3") + 3
Range("D3") = Range("d3") + 9
ElseIf rngcell = 9 Then
Range("C3") = Range("C3") + 2
ElseIf rngcell = 10 Then
Range("C3") = Range("C3") + 4
End If

Next rngcell

If Range("C3") And Range("D3") = 0 Then
bytdummy = MsgBox("U heeft geen nachten geselecteerd voor sommige leden", vbOKOnly, "Geen nachten")
End If

'uitrekenen weekenduren
'elke maand dagen weekends aanpassen, is vast!
For Each rngcell In Blad1.Range("G3:H3,N3:O3,U3:V3,AB3:AC3,AI3")

If rngcell = 1 Then
Range("B3") = Range("B3") + 7
ElseIf rngcell = 2 Then
Range("B3") = Range("B3") + 8
ElseIf rngcell = 3 Then
Range("B3") = Range("B3") + 2
ElseIf rngcell = 4 Then
Range("B3") = Range("B3") + 5
ElseIf rngcell = 5 Then
Range("B3") = Range("B3") + 7
ElseIf rngcell = 6 Then
Range("B3") = Range("B3") + 9
ElseIf rngcell = 7 Then
Range("B3") = Range("B3") + 12
ElseIf rngcell = 8 Then
Range("B3") = Range("B3") + 12
ElseIf rngcell = 9 Then
Range("B3") = Range("B3") + 10
ElseIf rngcell = 10 Then
Range("B3") = Range("B3") + 10
ElseIf rngcell = WE Then

End If

Next rngcell

If Range("B3") = 0 Then
bytdummy = MsgBox("U heeft geen weekends geselecteerd voor sommige leden", vbOKOnly, "Geen weekends")
End If

Next

End Sub
Dus ik wil een macro voor een dienst uit te rekenen ( dus het aantal weekenduren, uren tussen 19 en 22u en ten slotte van 22 tot 7u ).
Dus per rij moet de macro het aantal weekend en nacht-uren per lid uitrekenen en in in de kolommen B, C en D zetten.

Dus nu gaat hij alle rijen af ( al goed ) maar hij plaatst het resultaat van iedereen in dezelfde 3 cellen.
Dus hoe pas ik de macro aan dat hij naar de volgende rij gaat en dan het resultaat van die rij in die rij zet.

Ik hoop dat het duidelijk is!
 
Door dat je een vaste range gebruikt blijff je in dezelfde rij
Er zijn vele manieren om dat anders te doen.
In ieder geval moet de drie van het rij nummer door een variabele vervangen worden.
Code:
Range("D3") = Range("d3") + 2

wordt b.v.
Code:
cells(r,4)=cells(r,4)+2

Waarbij r de teller is die voor het rijnummer staat (dat is bij cells andersom dan bij range)
Code:
dim r as integer
for r = 3 to 23
cells(r,4)=cells(r,4)+2 (etc, jouw code dus)
next r

Naar de verdere code heb ik niet gekeken, maar zal wel makkelijker te kunnen.
Kijk bij voorbeeld eens naar Select Case in de VBA help
 
Door dat je een vaste range gebruikt blijff je in dezelfde rij
Er zijn vele manieren om dat anders te doen.
In ieder geval moet de drie van het rij nummer door een variabele vervangen worden.
Code:
Range("D3") = Range("d3") + 2

wordt b.v.
Code:
cells(r,4)=cells(r,4)+2

Waarbij r de teller is die voor het rijnummer staat (dat is bij cells andersom dan bij range)
Code:
dim r as integer
for r = 3 to 23
cells(r,4)=cells(r,4)+2 (etc, jouw code dus)
next r

Naar de verdere code heb ik niet gekeken, maar zal wel makkelijker te kunnen.
Kijk bij voorbeeld eens naar Select Case in de VBA help

Ik zal de code morgen eens proberen. Alvast bedankt voor de snelle en goede hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan