• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Hoe werkt een loop

Status
Niet open voor verdere reacties.

petermb

Gebruiker
Lid geworden
16 dec 2011
Berichten
6
Hallo,

Jullie hebben me al op verschillende plekken geholpen alleen ik vraag me af hoe een loopt werkt.

Ik weet nu alwat een macro is en kan het ook goed gebruiken.

Alleen als ik de onderstaande data zie

Code:
Sub berekning()
'
' berekning Macro
'

'
   Sheets("datasheet").Select
    Range("B8:D8").Select
    Selection.Copy
    Sheets("berekeningsheet").Select
    Range("B10").Select
    ActiveSheet.Paste
    Sheets("datasheet").Select
    Range("B9:D9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("berekeningsheet").Select
    Range("B15").Select
    ActiveSheet.Paste
    Sheets("datasheet").Select
    Range("B10:D10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("berekeningsheet").Select
    Range("B20").Select
    ActiveSheet.Paste
    Sheets("datasheet").Select
    Range("B11:D11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("berekeningsheet").Select
    Range("B25").Select
    ActiveSheet.Paste
End Sub


|k zie een patroon en ik weet dat je dan een loop kunt gebruiken.

Maar welke en hoe zet je hem in?

Graag jullie input zodat ik het begrijp.

Bedankt.
 
Ik hoop dat het nu een beetje duidelijker is voor u:


Code:
Sub berekening()
'
' code bewerkt door cobbe
''hier staat de beginrij van de op te halen  en van de bestemmingsplaats
 rij = 8: rij2 = 10
'hier wordt bepaald hoe vaak de lus moet doorlopen worden.
For lus = 1 To 4
'bronblad
   With Sheets("datasheet")
'werkelijke handeling met dynamische rijen
    .Range("B" & rij & ":D" & rij).Copy Sheets("berekeningsheet").Range("B" & rij2)
   End With
'rijen worden verhoogd met de nodige eenheden
rij = rij + 1: rij2 = rij2 + 5
'doorlopen tot waarde lus
Next
End Sub
 
Laatst bewerkt:
petermb,

Volgens mij moet het zo ook werken.
Het zal best wel wat korter kunnen denk ik maar dat lukt mij nog niet.
Code:
Sub berekening()
  Application.ScreenUpdating = False
    Sheets("datasheet").Range("B8:D8").Copy Sheets("berekeningsheet").Range("B10")
    Sheets("datasheet").Range("B9:D9").Copy Sheets("berekeningsheet").Range("B15")
    Sheets("datasheet").Range("B10:D10").Copy Sheets("berekeningsheet").Range("B20")
    Sheets("datasheet").Range("B11:D11").Copy Sheets("berekeningsheet").Range("B25")
  Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
@Cobbe,

Als ik de code van u liet lopen deed hij enkel de eerste regel kopieren.
Ik heb 2 regels omgedraaid in de code en nu werkt het bij mij goed, klopt dit.

Code:
Sub berekening()
' code bewerkt door cobbe
'hier staat de beginrij van de op te halen  en van de bestemmingsplaats
rij = 8: rij2 = 10
'hier wordt bepaald hoe vaak de lus moet doorlopen worden.
For lus = 1 To 4
'bronblad
   With Sheets("datasheet")
'werkelijke handeling met dynamische rijen
    .Range("B" & rij & ":D" & rij).Copy Sheets("berekeningsheet").Range("B" & rij2)
   End With
'rijen worden verhoogd met de nodige eenheden
rij = rij + 1: rij2 = rij2 + 5
'doorlopen tot waarde lus
Next
End Sub
 
Ja die aanpassing is correct en nodig.
Stom hé, als ik had getest had ik dat gezien.
Bedankt.
 
Als je je openstaande vragen bekijkt, zie je hoe een LOOP werkt en reageer ook als het is opgelost Peter.
Dit is voor zoekers in de zoekfunctie handig, en zien ze aan jou reactie of de code het doet of niet.

Zet de andere vragen even op opgelost als daar geen vragen meer over zijn.
Bvd.
 
Er zijn verschillende soorten lussen (voornamelijke lussen, onvoorwaardelijke lussen) en welke je gebruikt hangt af van de situatie en je voorkeur.

Voorwaardelijke lus is bijvoorbeeld For .... Next
Onvoorwaardelijke lussen is bijvoorbeeld For Each ... Next, While ... Wend, Do While, Do .... Until.

Code:
Sub berekening()
Dim iPl As Integer
Dim lRij As Long
    For lRij = 8 To 11
        Sheets("datasheet").Range("B" & lRij & ":D" & lRij).Copy Sheets("berekeningsheet").Range("B" & lRij + iPl + 2)
        iPl = iPl + 4
    Next
End Sub

Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan