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

macro stopt

Status
Niet open voor verdere reacties.

oliesjeik

Gebruiker
Lid geworden
5 jan 2007
Berichten
34
Hallo allemaal,

Ik heb een macro gemaakt die 2 dingen doet:
1. Hij kijkt in kolom b of er een x staat. Is dit het geval dan wordt de hele rij verwijderd
2. Rij 894 wordt geselecteerd en gekopieerd naar rij 895 (dit zorgt ervoor dat de formule's van rij 894 naar rij 895 gekopieerd worden.

Dit wordt vervolgens herhaald totdat ale x'en verwijderd zijn.

Nu heb ik het volgende probleem:
Als er meerdere x'en staan bijvoorbeeld in 20 rijen van de 60 en ik voer vervolgens de macro uit dan komt het vaak voor dat er een stuk of 6 verwijderd worden maar dat daarna de macro stopt. Vervolgens moet de macro nog een keer (of meerdere keren) uitgevoerd worden om de rest van de x'en te verwijderen. Nu vroeg ik me af hoe dit komt. Het is nogal willekeurig; de ene keer worden er bijvoorbeeld 5 rijen verwijderd, de andere keer weer 4, etc.

Ik gebruik de onderstaande macro:
Sub Knop_VerwijderX_click()

With Sheets("Huidige status") 'kijkt in sheet "Huidige status"
.Protect UserInterfaceOnly:=True 'zet beveiliging uit
.EnableAutoFilter = True
End With

Dim c As Range
For Each c In ActiveSheet.Range("B:B") 'kijkt in Kolom b
If LCase(c.Value) = "x" Then 'wanneer in kolom b de waarde "x" voorkomt
ActiveSheet.Rows(c.Row).EntireRow.Delete 'dan hele rij verwijderen

Range("A894:Z894").Select 'selecteer cellen A894:z894
Selection.AutoFill Destination:=Range("A894:Z895"), Type:=xlFillDefault 'kopieer formules van A894:z894 in rij 895
Range("B1").Select 'selecteer b1
End If
Next

End Sub

alvast bedankt!
 
Laatst bewerkt:
Jij maakt een lus doorheen een bereik, maar als je rijen verwijdert schuift de rest op naar boven. Waardoor je er dus een aantal mist.

Oplossing: werk van onder naar boven toe.

Wigi
 
Jij maakt een lus doorheen een bereik, maar als je rijen verwijdert schuift de rest op naar boven. Waardoor je er dus een aantal mist.

Oplossing: werk van onder naar boven toe.

Wigi

Hoi Wigi, ben jij toevallig een leraar? Die geven meestal ook alleen een tip zodat je het daarna zelf uit moet zoeken haha :) . Is alleen maar goed hoor. Begrijp ook wat je bedoeld alleen weet niet hoe ik van beneden naar boven ipv boven naar beneden kan zoeken. Maakt opzich niet meer uit omdat ik iets anders verzonnen/gevonden :p heb namelijk de volgende code:

Sub Knop_VerwijderX_click()

With Sheets("Huidige status") 'kijkt in sheet "Huidige status"
.Protect UserInterfaceOnly:=True 'zet beveiliging uit
.EnableAutoFilter = True
End With

Do
Set rrange = Range("B:B").Find(what:="x", lookat:=xlWhole) 'zet range kolom B en vind x
If rrange Is Nothing Then Exit Do 'wanneer geen x dan sluit macro
rrange.EntireRow.Delete 'wanneer x dan verwijder rij

Range("A894:Z894").Select 'selecteer cellen A894:z894
Selection.AutoFill Destination:=Range("A894:Z895"), Type:=xlFillDefault 'kopieer formules van A894:z894 in rij 895
Range("B1").Select 'selecteer b1
Loop
end sub

Dit werkt ook goed.

Thomas
 
Hoi Wigi, ben jij toevallig een leraar? Die geven meestal ook alleen een tip zodat je het daarna zelf uit moet zoeken haha :) . Is alleen maar goed hoor. Begrijp ook wat je bedoeld alleen weet niet hoe ik van beneden naar boven ipv boven naar beneden kan zoeken. Maakt opzich niet meer uit omdat ik iets anders verzonnen/gevonden :p heb namelijk de volgende code:



Dit werkt ook goed.

Thomas

hmm werkt toch niet zo goed.
Wat is namelijk het geval, er wordt een x gezet op basis van een formule
(=ALS(AANTAL.ALS('ATB lijst'!$B$5:$C$901;D5)>0;"x";""))

Wanneer dus een nummer voorkomt in de andere sheet dan komt er een x te staan. De macro ziet deze x echter niet (komt door de formule denk ik). Als ik namelijk gewoon handmatig een x in de kolom zet dan wordt wel de hele rij verwijderd.

Hoe is dit op te lossen?
 
hmm werkt toch niet zo goed.
Wat is namelijk het geval, er wordt een x gezet op basis van een formule
(=ALS(AANTAL.ALS('ATB lijst'!$B$5:$C$901;D5)>0;"x";""))

Wanneer dus een nummer voorkomt in de andere sheet dan komt er een x te staan. De macro ziet deze x echter niet (komt door de formule denk ik). Als ik namelijk gewoon handmatig een x in de kolom zet dan wordt wel de hele rij verwijderd.

Hoe is dit op te lossen?

Door LookIn toe te voegen aan de zoekfunctie.

Code:
Sub Knop_VerwijderX_click()

With Sheets("Huidige status") 'kijkt in sheet "Huidige status"
.Protect UserInterfaceOnly:=True 'zet beveiliging uit
.EnableAutoFilter = True
End With

Do
Set rrange = Range("B:B").Find(what:="x",[B][COLOR="Red"]lookin:=xlValues[/COLOR][/B], lookat:=xlWhole) 'zet range kolom B en vind x
If rrange Is Nothing Then Exit Do 'wanneer geen x dan sluit macro
rrange.EntireRow.Delete 'wanneer x dan verwijder rij

Range("A894:Z894").Select 'selecteer cellen A894:z894
Selection.AutoFill Destination:=Range("A894:Z895"), Type:=xlFillDefault 'kopieer formules van A894:z894 in rij 895
Range("B1").Select 'selecteer b1
Loop
end sub

Met vriendelijke groet,


Roncancio
 
Door LookIn toe te voegen aan de zoekfunctie.

Code:
Sub Knop_VerwijderX_click()

With Sheets("Huidige status") 'kijkt in sheet "Huidige status"
.Protect UserInterfaceOnly:=True 'zet beveiliging uit
.EnableAutoFilter = True
End With

Do
Set rrange = Range("B:B").Find(what:="x",[B][COLOR="Red"]lookin:=xlValues[/COLOR][/B], lookat:=xlWhole) 'zet range kolom B en vind x
If rrange Is Nothing Then Exit Do 'wanneer geen x dan sluit macro
rrange.EntireRow.Delete 'wanneer x dan verwijder rij

Range("A894:Z894").Select 'selecteer cellen A894:z894
Selection.AutoFill Destination:=Range("A894:Z895"), Type:=xlFillDefault 'kopieer formules van A894:z894 in rij 895
Range("B1").Select 'selecteer b1
Loop
end sub

Met vriendelijke groet,


Roncancio

Thanks! Works like a charm.

btw. Goed onderschrift -> will keep that in mind!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan