• 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 maak ik een geneste loop

Status
Niet open voor verdere reacties.

hahaHans

Gebruiker
Lid geworden
24 jan 2006
Berichten
46
Deze makro:

Sub koppeling()
Dim r As Range
For Each r In Range("A1:A5")
Range("A" & r.Row).Select
ActiveCell.Formula = "=H1"
Next
End Sub

vult de rij A1 tot A5 met waarden. Hoe kan ik de makro uitbreiden als een geneste loop zodat hij in alle cellen in bijvoorbeeld A1:F10 een waarde invult die ik ergens anders vandaan haal. In essentie zoek ik de manier om de cellen een voor een te selecteren in de geneste loop.
 
Deze makro:

Sub koppeling()
Dim r As Range
For Each r In Range("A1:A5")
Range("A" & r.Row).Select
ActiveCell.Formula = "=H1"
Next
End Sub

vult de rij A1 tot A5 met waarden. Hoe kan ik de makro uitbreiden als een geneste loop zodat hij in alle cellen in bijvoorbeeld A1:F10 een waarde invult die ik ergens anders vandaan haal. In essentie zoek ik de manier om de cellen een voor een te selecteren in de geneste loop.


Even zoeken op het forum. Er zijn voldoende voorbeelden voor deze oplossing.

Wim
 
Hiervoor heb je geen lussen nodig:

Code:
Sub koppeling()
    Range("A1:A5").Formula = "=$H$1"
End Sub

Wigi
 
De oorspronkelijke makro die ik als voorbeeld gaf is een vereenvoudigde versie van wat k uiteindelijk nodig heb. Daarom had ik er ook bijgeschreven: "In essentie zoek ik de manier om de cellen een voor een te selecteren in de geneste loop." In elke rij in dat bereik moet een waarde gaan komen die opgehaald wordt uit rijen uit andere excelfiles. Maar die koppelingen lukt me wel. Ik heb nu alleen moeite met de exacte syntax van de geneste lus.
 
De oorspronkelijke makro die ik als voorbeeld gaf is een vereenvoudigde versie van wat k uiteindelijk nodig heb. Daarom had ik er ook bijgeschreven: "In essentie zoek ik de manier om de cellen een voor een te selecteren in de geneste loop." In elke rij in dat bereik moet een waarde gaan komen die opgehaald wordt uit rijen uit andere excelfiles. Maar die koppelingen lukt me wel. Ik heb nu alleen moeite met de exacte syntax van de geneste lus.

Als je hele rijen uit een ander bestand overneemt kun je beter het bereik pakken ipv cel voor cel de gegevens plaatsen.

Met vriendelijke groet,


Roncancio
 
De oorspronkelijke makro die ik als voorbeeld gaf is een vereenvoudigde versie van wat k uiteindelijk nodig heb. Daarom had ik er ook bijgeschreven: "In essentie zoek ik de manier om de cellen een voor een te selecteren in de geneste loop." In elke rij in dat bereik moet een waarde gaan komen die opgehaald wordt uit rijen uit andere excelfiles. Maar die koppelingen lukt me wel. Ik heb nu alleen moeite met de exacte syntax van de geneste lus.

Probeer dan zelf de formule te zetten in de cellen, en neem een macro op waarbij je gewoon op een cel F2 doet en Enter. VBA genereert dan de VBA-syntax voor die formule (in het Engels, met komma als scheidingsteken, aanhalingstekens voor tekst worden verdubbeld, enz.)

Wigi
 
De juiste syntax voor de formule lukt wel. In feite heb ik de makro wel werkend gekregen zonder geneste lus, maar dan krijg ik wel veel herhalende tekst in de makro. Hij moet nog veel langer worden als hij nu is, maar dit is in ieder geval een goed functionerend begin:

Sub koppeling()
Sheets("persoonlijke gegevens").Select
Dim r As Range
For Each r In Range("B2:B8")
Range("B" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B1"
Range("C" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B2"
Range("D" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B3"
Range("E" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B4"
Range("F" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B5"
Range("G" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B6"
Range("H" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B7"
Range("I" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B8"
Range("J" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B9"
Range("K" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B10"
Range("L" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B11"
Range("M" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B12"
Range("N" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B13"
Range("O" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B14"
Range("P" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B15"
Range("Q" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B16"
Range("R" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B17"
Range("S" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B18"
Range("T" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B19"
Range("U" & r.Row).Select
ActiveCell.Formula = "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B20"
Next
End Sub

Ik had alleen het idee dat het in een geneste lus veel efficienter zou moeten kunnen.
 
Ik had alleen het idee dat het in een geneste lus veel efficienter zou moeten kunnen.

Korter zeker.
Code:
Sub koppeling()
Dim r As Range, iWaarde As Integer
    For Each r In Range("B2:B8")
        For iWaarde = 1 To 20
            Sheets("persoonlijke gegevens").Cells(r.Row, iWaarde + 1).Formula = _
              "='D:\clienten\client " & Format(r.Row - 1, "000") & "\[client " & Format(r.Row - 1, "000") & ".xls]client'!B" & iWaarde
        Next
    Next
End Sub

Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan