• 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.

Hulp met eigenzinnige Macro

Status
Niet open voor verdere reacties.

Logistiek

Gebruiker
Lid geworden
8 okt 2008
Berichten
74
Ik kom er niet uit en wil graag leren / begrijpen wat er gebeurt met de macro. Ik heb dit bestand van iemand gehad die er wel mee werkt maar het ook niet heeft gemaakt.
Het is een ruimte planning bestand dat in 3 fases kan werken / rekenen en dat gaat volgens mij prima.

Het geval is als ik er een regen boven de eerste aan toevoegt lijkt er iets niet goed te gaan.
Dus met andere woorden wat standaard regel 1 is wordt dan regel 2 zodat er een nieuwe lege regel ontstaat waar ik dan netjes macro knoppen wil gaan maken enz.
Maar als er iets in cel Y2 staat en de macro wordt dan gebruikt gooi hij alles vanaf kolom Y en wat er verder volgt ook leeg!? En dat is niet de bedoeling.
Als er niets in Y2 dan gebeurt dat niet ?

Ik kan het niet vinden waar dat nu gebeurt in de macro en of daar iets aan te doen is zodat er toch gewoon tekst of iets in Y2 kan worden gezet.

Hoop dat de vraag een beetje duidelijk is
 

Bijlagen

  • Helpmij Testfile.xlsm
    235,9 KB · Weergaven: 51
Om heel sec antwoord te geven op je vraag.

Na de waslijst aan variabelen kom er een select van de cel W2 daarna wat gegochel met variabelen waardoor de cursor in Y2 beland en er een do while loop wordt gestart.
Als je W2 veranderd in W3 dan heb je je regel

Om je wat houvast te geven waar in deze spaghettiberg die regel zit heb ik wat extra regels getoond.

Code:
        strFase2Formule = "=RC13/RC19"
        strFase3Formule = "=RC13/RC20"

    Dim strCurrentYear As String
    Dim strWeeksLastYear As String
    strCurrentYear = Sheets("Instellingen").Range("B1")
[COLOR=#ff0000][B]    Range("W2").Select[/B][/COLOR]
    Dim i As Integer
    Dim intFaseLenght As Integer
    'Loop door x aantal rijen
    Range(strKolomStartweekJaar1 & (ActiveCell.Row)).Select
    Do While (Range(strKolomStuks & (ActiveCell.Row)) > 0)

De code kan veel efficienter..
Het enige wat deze macro namelijk doet is vanaf Y2, cell voor cell ca 50.000 cellen één voor één leegmaken en de celkleur veranderen.

Ik denk dat je met 2 a 3 kleine macro's van elk 5 regels hetzelfde kan bereiken
 
Laatst bewerkt:
alvast bedankt

Alvast bedankt voor het geen je er al naar heb willen kijken, ik ga er mee testen.
ja het is inderdaad een hele berg spaghetti :D vandaar dat ik het ook ff niet zag.
nu heb ik een heel klein beetje al gewerkt met macro`s en volg YouTube filmpjes om alles beter te begrijpen.
Maar deze berg aanpassen gaat nu nog net ff te ver voor mij, als iemand zich geroepen voelt / of wil helpen om het simpeler te maken dan heel graag!
 
Hallo Logistiek,

Ik heb 2 alternatieve codes geschreven PlanningLeegmaken en PlanningVullen

Essentie is dat steeds alle loops die cell voor cell af gaat eruit zijn. Er wordt alleen in planning vullen 1 for next loop gebruikt om regel voor regel af te gaan.

Het leegmaken kan in een paar regels code
Het enige wat verwijderd wordt is de celinhoud (formule) en de celkleur die de fase aangeeft
Het hele gebruikte plangebied, in jou voorbeeld rij 2 tm 10 wordt in één keer leeg gemaakt ipv cel voor cel

Code:
Sub PlanningLeegmaken()
'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal aantal rijen gevulde planning
planRows = Range("A47").End(xlUp).Offset(1).Row - 2

'verwijder geplande regels
With Worksheets("Planningslijst").Range("Y2:BY2").Resize(planRows)
    .ClearContents
    .Offset(, 1).Interior.Color = xlNone
End With
End Sub


Voor het vullen ook een stuk kortere code. Ik heb alleen nog geen oplossing gemaakt voor als het startjaar kleiner of groter is dan het ingestelde jaar is. Ik zag het een beetje laat dat dat er ook in zit. feitelijk is het alleen zorgen dat de startkolom van de planning wordt aangepast en evt DuurF1 anders wordt berekend. misschien kun je dat zelf beredeneren, ik kijk er anders vanavond nog even naar..

Er worden maar een paar eenvoudige elementen gebruikt. de hele macro draait om de gedachte dat het startpunt kolom Y is en kolom W is week 1 van het jaar in de instellingen.
Daarna wordt met offset de startweek opgezocht en dan resize wordt het aantal kolommen bepaald waar de formule in moet komen en de celkleur voor de fase.

Code:
Sub PlanningVullen()

'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal Laatste rij van planning
lastRow = Range("A47").End(xlUp).Row

For i = 2 To lastRow
    StartJaarF1 = Cells(i, "H")
    StartWeekF1 = Cells(i, "I")
    DuurF1 = Cells(i, "U")
    DuurF2 = Cells(i, "V")
    DuurF3 = Cells(i, "W")
    
    If StartJaarF1 = Worksheets("Instellingen").Range("B1") Then
        With Cells(i, 25).Offset(0, StartWeekF1).Resize(1, DuurF1)
        .FormulaR1C1 = "=RC13/RC18"
        .Interior.ColorIndex = 6
            If Not DuurF2 = "" Then
                With .End(xlToRight).Offset(0, 1).Resize(1, DuurF2)
                    .FormulaR1C1 = "=RC13/RC19"
                    .Interior.ColorIndex = 45
                End With
            End If
            If Not DuurF3 = "" Then
                With .End(xlToRight).Offset(0, 1).Resize(1, DuurF3)
                    .FormulaR1C1 = "=RC13/RC20"
                    .Interior.ColorIndex = 53
                End With
             End If
         End With
    
    End If
Next i

End Sub
 

Bijlagen

  • Helpmij Testfile Nieuwe Code.xlsm
    244,9 KB · Weergaven: 18
Code:
Sub M_snb()
  With sheets("Planningslijst").usedRange.columns(25).Resize(,52).offset(1)
    .ClearContents
    .Offset(, 1).Interior.Color = xlNone
  End With
End Sub
 
Beste snb

ook met deze ga ik van de week oefenen.
alvast bedankt.
 
Laatst bewerkt:
Hallo Logistiek,

Ik heb 2 alternatieve codes geschreven PlanningLeegmaken en PlanningVullen

Essentie is dat steeds alle loops die cell voor cell af gaat eruit zijn. Er wordt alleen in planning vullen 1 for next loop gebruikt om regel voor regel af te gaan.

Het leegmaken kan in een paar regels code
Het enige wat verwijderd wordt is de celinhoud (formule) en de celkleur die de fase aangeeft
Het hele gebruikte plangebied, in jou voorbeeld rij 2 tm 10 wordt in één keer leeg gemaakt ipv cel voor cel

Code:
Sub PlanningLeegmaken()
'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal aantal rijen gevulde planning
planRows = Range("A47").End(xlUp).Offset(1).Row - 2

'verwijder geplande regels
With Worksheets("Planningslijst").Range("Y2:BY2").Resize(planRows)
    .ClearContents
    .Offset(, 1).Interior.Color = xlNone
End With
End Sub


Voor het vullen ook een stuk kortere code. Ik heb alleen nog geen oplossing gemaakt voor als het startjaar kleiner of groter is dan het ingestelde jaar is. Ik zag het een beetje laat dat dat er ook in zit. feitelijk is het alleen zorgen dat de startkolom van de planning wordt aangepast en evt DuurF1 anders wordt berekend. misschien kun je dat zelf beredeneren, ik kijk er anders vanavond nog even naar..

Er worden maar een paar eenvoudige elementen gebruikt. de hele macro draait om de gedachte dat het startpunt kolom Y is en kolom W is week 1 van het jaar in de instellingen.
Daarna wordt met offset de startweek opgezocht en dan resize wordt het aantal kolommen bepaald waar de formule in moet komen en de celkleur voor de fase.

Code:
Sub PlanningVullen()

'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal Laatste rij van planning
lastRow = Range("A47").End(xlUp).Row

For i = 2 To lastRow
    StartJaarF1 = Cells(i, "H")
    StartWeekF1 = Cells(i, "I")
    DuurF1 = Cells(i, "U")
    DuurF2 = Cells(i, "V")
    DuurF3 = Cells(i, "W")
    
    If StartJaarF1 = Worksheets("Instellingen").Range("B1") Then
        With Cells(i, 25).Offset(0, StartWeekF1).Resize(1, DuurF1)
        .FormulaR1C1 = "=RC13/RC18"
        .Interior.ColorIndex = 6
            If Not DuurF2 = "" Then
                With .End(xlToRight).Offset(0, 1).Resize(1, DuurF2)
                    .FormulaR1C1 = "=RC13/RC19"
                    .Interior.ColorIndex = 45
                End With
            End If
            If Not DuurF3 = "" Then
                With .End(xlToRight).Offset(0, 1).Resize(1, DuurF3)
                    .FormulaR1C1 = "=RC13/RC20"
                    .Interior.ColorIndex = 53
                End With
             End If
         End With
    
    End If
Next i

End Sub

Beste Roel,

Het geen je als eerste heb aangegeven door W2 met W3 te vervangen werk goed daardoor kan ik er in ieder geval een regel aan toevoegen wat in eerste instantie de vraag was top !:thumb:

de rest is nog even flink puzzelen, misschien dat je toch nog wat hulp wil geven?

ik zie dat het leegmaken nu loopt tot Regel A47 uit eindelijk zal deze sheet gaan over meer dan 700 regels die er door de tijd aan worden toegevoegd.
is het dan zo te maken dat de macro zelf gaat kijken naar de hoeveelheid regels er zijn ? dus variabel net zo dat ook in de originele (spaghetti ) macro gebeurd

en zou je misschien ook nog willen kijken of je het vullen over meerdere jaren kan toevoegen. dan zou wel heel fijn wezen.
want zoals jij het nu heb gemaakt gaat het in ieder geval al vele malen sneller dan in de spaghetti hoop :D

alvast bedankt
 
ik zal er morgenavond nog eens naar kijken.
 
Ik ben een heel eind gekomen, ik loop alleen nog vast op de planning van oppotjaar = als je plant met jaar 2022 en 2023 en het aantal weken komt voorbij kolom FY
Maar ik dacht ik plaatst toch het tussenresultaat. mogelijk zie je zelf wat er mis gaat. of zien anderen het/ Ik kijk morgen avond nog eens met frisse blik

Code:
Sub PlanningLeegmaken()
'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal aantal rijen gevulde planning
planRows = Range("PlanningTotaal").End(xlUp).Offset(1).Row - 2

'verwijder geplande regels
With Worksheets("Planningslijst").Range("Z2:FY2").Resize(planRows)
    .ClearContents
    .Interior.Color = xlNone
End With
End Sub

Code:
Sub PlanningVullen()

'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal Laatste rij van planning
lastRow = Range("PlanningTotaal").End(xlUp).Row


For i = 11 To lastRow
    StartJaarF1 = Cells(i, "H") 'het startjaar komt uit kolom H en i bepaald rijnr
    Oppotjaar = StartJaarF1 - Worksheets("Instellingen").Range("B1") 'uitkomst -1,0,1 of 2 rekenhulp voor planstart
    PlanStart = 26 + IIf(Oppotjaar < 0, 0, Oppotjaar * 52 - 1) 'bij oppotjaar -1 of 0 begint de planning in kolom Z
    RestPlanlengte = 156 - IIf(Oppotjaar < 0, 0, Oppotjaar * 52) 'bij oppotjaar 1 of 2 wordt de max aantal weken verkort
    StartWeekF1 = IIf(Oppotjaar < 0, 0, Cells(i, "I"))
    

    
    'Plan fase 1 in
    DuurF1 = IIf(Oppotjaar < 0, Cells(i, "U") - (Worksheets("Instellingen").Range("B2") - Cells(i, "I")), Cells(i, "U"))
    DuurF1 = IIf(DuurF1 > RestPlanlengte, RestPlanlengte, DuurF1)
    With Cells(i, PlanStart).Offset(0, StartWeekF1).Resize(1, DuurF1)
        .FormulaR1C1 = "=RC13/RC18"
        .Interior.ColorIndex = 6
        RestPlanlengte = RestPlanlengte - DuurF1
        'Plan fase 2 als die er is
        DuurF2 = IIf(Cells(i, "V") > RestPlanlengte, RestPlanlengte, Cells(i, "V"))
        If DuurF2 > 0 Then
            With .End(xlToRight).Resize(1, DuurF2)
                .FormulaR1C1 = "=RC13/RC19"
                .Interior.ColorIndex = 45
            End With
            RestPlanlengte = IIf(RestPlanlengte - DuurF2 < 0, 0, RestPlanlengte - DuurF2)
        End If
        
        'Plan fase 3 als die er is
        DuurF3 = IIf(Cells(i, "W") > RestPlanlengte, RestPlanlengte, Cells(i, "W"))
        If DuurF3 > 0 Then
            With .End(xlToRight).Resize(1, DuurF3)
                .FormulaR1C1 = "=RC13/RC20"
                .Interior.ColorIndex = 53
            End With
            RestPlanlengte = IIf(RestPlanlengte - DuurF3 < 0, 0, RestPlanlengte - DuurF3)
         End If
         
     End With
Next i


End Sub
 

Bijlagen

  • Helpmij Testfile Nieuwe Code3.xlsm
    244,2 KB · Weergaven: 12
#9

Hoi Roel,

ik heb ook al een poosje zitten testen en proberen, maar zou het kunnen dat er ergen een stop op moet zodat er naar 3 jaar niet meer wordt doorgerekend en dus niet voor bij aan FY mag ?
ik hoop dat je nog een frisse blik kan werpen , want dit ziet er al wel een stuk beter uit.

de leegmaak Marco wekt super. Maar is het nog simpel te maken dat wanneer er in kolom Y bijvoorbeeld en X of * staat ( dus niet leeg is ) dat dan allen die regel leeg gemaakt mag worden,
en als de x of * dan blijven staan, hier via een andere knopt de macro "planningvullen" wordt getart en dus de zelfde regels gebruikt en dat die uiteindelijk wel weer kolom Y leegmaakt.
dat zou wel heel mooi wezen zodat als er een keer een wijziging voordoet alleen de betreffende regels hoeven te worden leeggemaakt en her berekend.
 
Zo he hé het koste even wat door analyseren maar ik denk dat ik eruit ben.. Maar dit is wel de kern van (goede) code maken, door een paar versies heen om bij het beste resultaat te komen. zonder dat elke keer dat je de macro start je koffiepauze kunt gaan houden omdat hij feitelijk niet veel meer doet dan al je menselijke handeling geautomatiseerd te herhalen (zoals de vorige code vooral deed)

Ik heb jou opmerking over alleen bepaalde regels plannen ook meegenomen.

De leegmaken code is ongewijzigd.

DE planningscode heb ik aangepast naar een code die alleen 1 regel behandelt, ik heb per fase een een stukje code die vrijwel identiek is. Als ik me nog ff kwaad maak zou ik ook nog een loopje kunnen bedenken waardoor je maar 1x de code hebt waar ie dan 3x doorheen loopt, maar ik vind soms een iets langere code die ik (en anderen) makkelijker kunnen lezen belangrijker dan een technisch perfecte en meest optimale code.

Naast deze macro die een regel plant heb ik 3 "knop macro's" gemaakt, zo noem ik dat.. dat zijn hele korte macro's waarin je bepaald hoe vaak de hoofdmacro uitgevoerd moet worden. de macro's die ik heb gemaakt zijn.

1. Een macro die alleen de regel van de actieve cel opnieuw plant. (handig als je op 1 regel de startweek wijzigt of de duur met 1 week verlengt.)
2. Een macro die alleen die regels plant waarin kolom Y een x of X staat. (handig als je door de planning heen alleen een x aantal regels wil herplannen"
3. Een macro die de hele planning leeghaalt en het hele planning daarna opnieuw vult (die zal vooral handig zijn als je het jaar in de instellingen aanpast, of als iemand handmatig heeft zitten knutselen in de planningsregels en je weet niet waar.)

al met al zie je hoe je met 1 hoofdcode met de hoofdactiviteit via diverse hulp macro's bepaald hoe de code wordt ingezet.

Code:
Sub PlanningRegelVullen(PlanRij)
'Deze macro plant  alle fases voor een locatie, feitelijk 1 excelrij.
'deze macro is als het ware de motor van de planning, met andere (knop)macros bepaal je hoeveel rijen gepland worden.


'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal Laatste rij van planning
lastRow = Range("PlanningTotaal").End(xlUp).Row


    Oppotjaar = Cells(PlanRij, "H") - Worksheets("Instellingen").Range("B1") 'uitkomst -1,0,1 of 2 rekenhulp voor planstart
    PlanStart = 26 + IIf(Oppotjaar < 0, 0, Oppotjaar * 52 + Cells(PlanRij, "I") - 1) 'bij oppotjaar -1 of 0 begint de planning in kolom Z (26)
     
    'Plan fase 1 in
    DuurF1 = IIf(Oppotjaar < 0, Cells(PlanRij, "U") - (Worksheets("Instellingen").Range("B2") - Cells(PlanRij, "I")), Cells(PlanRij, "U"))
    DuurF1 = IIf(PlanStart + DuurF1 > 181, 182 - PlanStart, DuurF1) ' test of de startkolom + duur niet voorbij kolom 181 (FY) loopt, als dat wel het geval is kort DuurF1 dan in.
    With Cells(PlanRij, PlanStart).Resize(1, DuurF1)
        .FormulaR1C1 = "=RC13/RC18"
        .Interior.ColorIndex = 6
    End With
    PlanStart = IIf(PlanStart + DuurF1 >= 181, 181, PlanStart + DuurF1) 'Bepaal het startpunt voor de volgende fase
    
    'Plan fase 2 als die er is
    If Cells(PlanRij, "V") > 0 And PlanStart <> 181 Then
        DuurF2 = IIf(PlanStart + Cells(PlanRij, "V") > 181, 182 - PlanStart, Cells(PlanRij, "V"))
        With Cells(PlanRij, PlanStart).Resize(1, DuurF2)
            .FormulaR1C1 = "=RC13/RC19"
            .Interior.ColorIndex = 45
        End With
    PlanStart = IIf(PlanStart + DuurF2 >= 181, 181, PlanStart + DuurF2)
    End If
        
    'Plan fase 3 als die er is
    If Cells(PlanRij, "W") > 0 Then
        DuurF3 = IIf(PlanStart + Cells(PlanRij, "W") > 181, 182 - PlanStart, Cells(PlanRij, "W"))
        With Cells(PlanRij, PlanStart).Resize(1, DuurF3)
            .FormulaR1C1 = "=RC13/RC20"
            .Interior.ColorIndex = 53
        End With
     End If
     
End Sub

De code voor de hulp macro's izjn

Code:
Sub PlanningActieveRegel()
'Met deze macro onder een knop wordt alleen de regel waar je op staat herpland. Het maakt niet uit waar in welke cel je op de rij staat. Alleen die rij zal gepland worden

Call PlanningRegelVullen(ActiveCell.Row)

End Sub

Code:
Sub PlanningGeselecteerdeRegels()
'Met deze macro onder een knop kun je alleen de regels laten herplannen waar in kolom Y een X staat.

For c = 2 To Range("Planningtotaal").Row - 1
    If UCase(Cells(c, "Y")) = "X" Then Call PlanningRegelVullen(c)
Next

End Sub

Code:
Sub PlanningAlleRegels()
'met deze macro onder een knop wordt eerst het hele plangebied leeg gemaakt en daarna alle regels herpland

Call PlanningLeegmaken

For c = 2 To Range("Planningtotaal").Row - 1
    Call PlanningRegelVullen(c)
Next
End Sub


Ik denk dat we nu een heel eind zijn, kijk nog even goed naar of alle regels en fases in de goede kolom starten en eindigen.
Het kan zijn dat hier of daar nog een + 1 of -1 in de code moet om alles goed te krijgen.
 

Bijlagen

  • Helpmij Testfile Nieuwe Code5.xlsm
    244,6 KB · Weergaven: 23
Super Roel dat het zo ver heb willen brengen, ik ga er van de week als ik wat meer tijd heb naar kijken en testen.
ik laat het weten hoe het gaat


maar voor nu grote dank alvast! :thumb::D
 
voor als nog ziet5 het er goed goed uit en kan ik hier wel wat mee super bedankt .
ik ga nog wel even stoeie met een fout melding voor als er niks is geselecteerd in kolom Y
want als er wel een X staat in kolom Y maar geen gegevens in 1 van de 3 fases of aantallen per m2 dan loopt de macro vast.
en dat is niet wenselijk.
 
Mooi dat het meeste werkt. Die combi klinkt niet heel logisch, wel een waarde in kolom Y maar niets in één van de fases. maar ok..
ik denk dat je met een "catch all" regel die fout wel kan afvangen. probeer het eens met dde volgende extra regel in de code


Code:
Sub PlanningGeselecteerdeRegels()
'Met deze macro onder een knop kun je alleen de regels laten herplannen waar in kolom Y een X staat.

[B]On Error Resume Next[/B]
For c = 2 To Range("Planningtotaal").Row - 1
    If UCase(Cells(c, "Y")) = "X" Then Call PlanningRegelVullen(c)
Next

End Sub
 
Hoi Roel,

sorry voor late reactie ( komt door omstandigheden) maar dit is een prima oplossing ik ga hier voorlopig is mee aan de gang.

Ik dacht ook simpel gebruik te maken van de geselecteerde regels macro en deze dan te gebruiken voor het leegmaken, maar dat wil nog niet helemaal zoals ik wil.
Dit is ook geen vereiste m de sheet te laten werken maar lijk met toch een leuke optie, maar als je dit gebruikt bij de planning dan gaat het wel goed goed en palnd hij alleen de geselecteerde regels.
Is het dan toch niet zo makkelijk als het lijkt om dit ook zo te doen bij het leeg maken ? of wat zie ik dan over het hooft.




Sub LeegmakenGeselecteerdeRegels()
'Met deze macro onder een knop kun je alleen de regels laten leegmaken waar in kolom Y een X staat.

On Error Resume Next
For c = 2 To Range("Planningtotaal").Row - 1
If UCase(Cells("Y")) = "x" Then Call PlanningLeegmaken
Next

End Sub


Sub PlanningLeegmaken()
'Voer de macro alleen uit als werkblad planningslijst actief is.
If ActiveSheet.Name <> "Planningslijst" Then Exit Sub

'Bepaal aantal rijen gevulde planning
planRows = Range("PlanningTotaal").End(xlUp).Offset(1).Row - 2

'verwijder geplande regels
With Worksheets("Planningslijst").Range("Z2:FY2").Resize(planRows)
.ClearContents
.Interior.Color = xlNone
End With
End Sub
 
Iemand nog een idee

Heeft er iemand misschien nog een idee hoe dit is op te lossen ik ben zelf al heel veel aan het puzzelen geweest maar het wil maar niet lukken.
of hij gooit toch gewoon de hele lijst leeg of er worden meer dan de geselecteerde regels leeg :(
ik dacht dat ik het wel zou kunnen oplossen maar kom er toch niet uit.
Als er nog iemand een idee heeft graag.

het is de bedoeling dat er zoals de code hier boven doet met de planning dat die wel de regels met een X in kolom Y plant
maar ik zou dit ook graag willen dat hij de regels met een X in kolom Y leeg maakt.
 
ik had je reactie gemist..

je kunt de leegmakencode niet aanroepen per regel omdat die code juist gemaakt is om altijd het hele bereik leeg te maken, dat komt door de toevoeging .resize(planrows)
even snel zonder uitgebreide test.. en alleen dat element aanpassen
dan kom ik tot deze code

Code:
Sub LeegmakenGeselecteerdeRegels()
'Met deze macro onder een knop kun je alleen de regels laten leegmaken waar in kolom Y een X staat.

On Error Resume Next
For c = 2 To Range("Planningtotaal").Row - 1
If UCase(Cells("Y")) = "x" Then

With Worksheets("Planningslijst").Range("Z2:FY2").Offset(c - 2)
.ClearContents
.Interior.Color = xlNone
End With

Next

End Sub

De .resize is vervangen door .offset nu gaat hij wel regel voor regel af
offset verplaatst telkens het te verwijderen bereik 1 regel naar beneden
 
Kan dit wel?

UCase(Cells("Y")) = "x"

UCase maakt er toch HOOFDLETTERS van?

En in de bijdrage van Roel stond ook

UCase(Cells("Y")) = "X"
 
Next zonder If

Allereerst de beste wensen allemaal! en een gezond 2022 toegewenst.

Dan het volgende.
ik krijg met deze code heel de tijd een "Next zonder For" foutmelding.
nu heb ik geprobeerd om next op anders plaatsen te zetten maar dat helpt niet.
Even googelen en daar ging het oven "end If er bij te zetten, dan is de foutmelding weg maar wort het hele veld leeg gegooid ? :rolleyes::confused:

Ook wat Haije aangeeft met grote "X" of kleine "x" maakt geen verschil.


Sub LeegmakenGeselecteerdeRegels()
'Met deze macro onder een knop kun je alleen de regels laten leegmaken waar in kolom Y een X staat.

On Error Resume Next
For c = 2 To Range("Planningtotaal").Row - 1
If UCase(Cells("Y")) = "X" Then

End If

With Worksheets("Planningslijst").Range("Z2:FY2").Offset(c - 2)
.ClearContents
.Interior.Color = xlNone
End With

Next

End Sub



Zijn er nog ideeën hoe dit wel zou kunnen werken.
 
Van mij ook de Beste wensen voor iedereen..

Gisteren iets te snel met knippen en plakken 2 schoonheidsfoutjes erin.. eerst wat Haije al meldt met de if regel. en de ontbrekende end if..

Dit is de juiste code.

Code:
Sub LeegmakenGeselecteerdeRegels()
'Met deze macro onder een knop kun je alleen de regels laten leegmaken waar in kolom Y een X staat.

On Error Resume Next
For c = 2 To Range("Planningtotaal").Row - 1
If UCase(Cells(c, "Y")) = "X" Then

    With Worksheets("Planningslijst").Range("Z2:FY2").Offset(c - 2)
        .ClearContents
        .Interior.Color = xlNone
    End With
End If
Next

End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan