Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: opbouw van een 'loop'  (gelezen 3348 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
opbouw van een 'loop'
« Gepost op: 16 september 2021, 07:29:35 »
Goeiemorgen,

Bij het schrijven van een macro heb ik een codeblokje dat zich een 17-tal keren herhaald met telkens
een ander bereik en andere waarden waarvoor ik nu al twee dagen probeer een 'loop' op te bouwen.
Ik krijg het echter niet voor elkaar om de nodige variabelen correct te benoemen.

Daarom hoop ik dat iemand hier mij op weg kan helpen om onderstaande codeblok om te bouwen tot een 'loop' :


If Cells(10, 6) = "" Then
    dat2 = DateValue(dat1) + 300
    Cells(10, 2) = Day(dat2)
    Cells(10, 3) = Month(dat2)
    Cells(10, 4) = Year(dat2)
Else
    Cells(10, 2) = Cells(10, 6)
    Cells(10, 3) = Cells(10, 7)
    Cells(10, 4) = Cells(10, 8)
End If
If Cells(11, 6) = "" Then
    dat3 = DateValue(dat2) + 300
    Cells(11, 2) = Day(dat3)
    Cells(11, 3) = Month(dat3)
    Cells(11, 4) = Year(dat3)
Else
    Cells(11, 2) = Cells(11, 6)
    Cells(11, 3) = Cells(11, 7)
    Cells(11, 4) = Cells(11, 8)
End If
If Cells(12, 6) = "" Then
    dat4 = DateValue(dat3) + 300
    Cells(12, 2) = Day(dat4)
    Cells(12, 3) = Month(dat4)
    Cells(12, 4) = Year(dat4)
Else
    Cells(12, 2) = Cells(12, 6)
    Cells(12, 3) = Cells(12, 7)
    Cells(12, 4) = Cells(12, 8)
End If
If Cells(13, 6) = "" Then
    dat5 = DateValue(dat4) + 300
    Cells(13, 2) = Day(dat5)
    Cells(13, 3) = Month(dat5)
    Cells(13, 4) = Year(dat5)
Else
    Cells(13, 2) = Cells(13, 6)
    Cells(13, 3) = Cells(13, 7)
    Cells(13, 4) = Cells(13, 8)
End If
    'dit gaat zo oplopend door tem
'If Cells(26, 6) = "" Then
    'dat18 = DateValue(dat17) + 300
    'Cells(26, 2) = Day(dat18)
    'Cells(26, 3) = Month(dat18)
    'Cells(26, 4) = Year(dat18)
'Else
    'Cells(26, 2) = Cells(26, 6)
    'Cells(26, 3) = Cells(26, 7)
    'Cells(26, 4) = Cells(26, 8)
'End If
   

Alvast mijn oprechte dank.

groetjes,
BlackDevil

****edit***
nog vergeten te vermelden dat de 'loop' moet stoppen eens een bepaalde datum bereikt is (afhankelijk van meerdere voorwaarden).
Er zijn dus drie mogelijke einddatums (met de variabelen 'mvrbhdat' - 'modat' - 'vodat2')
Als de resulterende datumwaarde uit de loop groter is dan de kleinste datum van de drie einddatums dan dient de loop te stoppen en de betreffende resulterende datumwaarde niet meer weggeschreven te worden.
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: opbouw van een 'loop'
« Reactie #1 Gepost op: 16 september 2021, 09:09:09 »
Dat wordt dan zoiets

Sub jvr()
 dat1 = DateValue("1-1-2010")

 For Each it In Range("F10").Resize(4)
   If it = "" Then
      dat1 = dat1 + 300
      it.Offset(, -4).Resize(, 3).Value = Array(Day(dat1), Month(dat1), Year(dat1) - 2000)
   Else
      it.Offset(, -4).Resize(, 3).Value = it.Resize(, 3).Value
   End If
 Next
End Sub

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: opbouw van een 'loop'
« Reactie #2 Gepost op: 16 september 2021, 09:52:03 »
Hey Veerj,

Hartelijk dank voor jouw voorbeeld.
Deze werkt echter enkel maar correct als er in de kolom F (tem H) geen waarde staat.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: opbouw van een 'loop'
« Reactie #3 Gepost op: 16 september 2021, 10:56:44 »
***UPDATE***

Heb een werkende opbouw voor mijn 'loop' gevonden....

For i = 9 To 25
dat = Cells(i, 2) & "-" & Cells(i, 3) & "-" & Cells(i, 4)
If Cells(i + 1, 6) = "" Then
    dat = DateValue(dat) + 300
    Cells(i + 1, 2) = Day(dat)
    Cells(i + 1, 3) = Month(dat)
    Cells(i + 1, 4) = Year(dat)
Else
    Cells(i + 1, 2) = Cells(i + 1, 6)
    Cells(i + 1, 3) = Cells(i + 1, 7)
    Cells(i + 1, 4) = Cells(i + 1, 8)
End If
Next i

Nu moet ik nog uitzoeken hoe ik de loop moet stoppen indien een bepaalde datum bereikt is...
Eerst moet ik bepalen welke datum (uit drie gegeven datums) de kleinste is en dan moet de 'loop'
stoppen als de resulterende datumwaarde uit de loop groter is dan die kleinste datum uit de drie einddatums
en mag hij die resulterende datumwaarde niet meer wegschrijven.
Word dus weer enkele uurtjes zoeken  ;D...
Enige tips zijn welkom  ;)

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: opbouw van een 'loop'
« Reactie #4 Gepost op: 16 september 2021, 11:38:08 »
héhé, het ging vlotter dan gedacht  ;D

einddat = mvrbhdat
If DateValue(modat) < DateValue(mvrbhdat) Then einddat = modat
If DateValue(vodat2) < DateValue(mvrbhdat) Or DateValue(vodat2) < DateValue(modat) Then einddat = vodat2
For i = 9 To 25
dat = Cells(i, 2) & "-" & Cells(i, 3) & "-" & Cells(i, 4)
If Cells(i + 1, 6) = "" Then
    dat = DateValue(dat) + 300
    Cells(i + 1, 2) = Day(dat)
    Cells(i + 1, 3) = Month(dat)
    Cells(i + 1, 4) = Year(dat)
Else
    Cells(i + 1, 2) = Cells(i + 1, 6)
    Cells(i + 1, 3) = Cells(i + 1, 7)
    Cells(i + 1, 4) = Cells(i + 1, 8)
End If
If DateValue(dat) > DateValue(einddat) Then
    Cells(i + 1, 2) = ""
    Cells(i + 1, 3) = ""
    Cells(i + 1, 4) = ""
    Exit For
End If
Next i

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com