Vraag & Antwoord

Programmeren

For next loopt te lang door VBA in EXCEL

4 antwoorden
  • Hoi, Ik was even iets aan het proberen in excel de volgende code [code:1:2c9b6e26d7]Sub RangeNext() Dim counter As Integer Dim i As Variant Dim Rangep1 As Range Set Rangep1 = Range("A1:A100") counter = 0 Rangep1.Select Rangep1.ClearContents For Each i In Rangep1 Rangep1.Offset(counter, 0).Value = counter counter = counter + 1 Next End Sub [/code:1:2c9b6e26d7] als ik deze code run zou de cell A1 waarde 0 krijgen en A2 1 enz enz. Het merkwaardige is nu dat de for lus doorloopt tot cell A200. ik vermoed dat variable i variant daar iets mee te maken heeft maar weet niet hoe ik dit moet oplossen
  • [quote:d1f9554d9c="bertjedeb"] als ik deze code run zou de cell A1 waarde 0 krijgen en A2 1 enz enz. Het merkwaardige is nu dat de for lus doorloopt tot cell A200. ik vermoed dat variable i variant daar iets mee te maken heeft maar weet niet hoe ik dit moet oplossen[/quote:d1f9554d9c] Het heeft niks te maken met counter, maar met het feit dat je een Range van 100 cellen hebt geselecteerd. Met jouw code wordt per iteratie een range van 100 cellen met dezelfde waarde gevuld. Je kan beter met een teller aan de gang. [code:1:d1f9554d9c] dim i as integer dim RangeP1 as Range Set RangeP1 = Range("A1") For i = 0 to 99 RangeP1.Offset(i,0).Value = counter counter = counter + 1 Next [/code:1:d1f9554d9c]
  • oke thanks
  • Met For Each benader je objecten in een collectie. Een Range is zelf een object, geen collectie, wat bijv. Rangep1.Cells weer wel is. Verder gaat je procedure nu de mist in omdat je steeds een hele range (met 1 rij naar beneden opgeschoven) van 100 cellen met een oplopende waarde vult, waardoor bij de 100ste dus rij 100-200 met waarde 99 wordt gevuld. Onderstaande doet het beter: [code:1:4211391f20] Sub RangeNext() Dim i As Integer Dim Rangep1 As Range Set Rangep1 = Range("A1:A10") Rangep1.Select Rangep1.ClearContents For i = 1 To Rangep1.Cells.Count Rangep1.Cells(i, 1).Value = i - 1 Next End Sub [/code:1:4211391f20] Waar dan een gewone For..Next wordt gebruikt. Als je het met een For Each wil doen: [code:1:4211391f20] Sub RangeNext() Dim Rangep1 As Range Set Rangep1 = Range("B1:B10") Rangep1.Select Rangep1.ClearContents counter = 0 For Each c In Rangep1.Cells c.Value = counter counter = counter + 1 Next End Sub [/code:1:4211391f20] Maar dan heb je dus een aparte variabele nodig (counter) die je steeds met 1 moet opplussen, terwijl daar in een gewone For..Next-lus al in is voorzien.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.