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

VBA: Rijen verwijderen op basis van celwaarden

Status
Niet open voor verdere reacties.

DrommeDaris

Gebruiker
Lid geworden
16 mei 2018
Berichten
8
Hoi allen,

Bijgevoegd bestand bestaat uit 3 werkbladen: een database, een tabblad (DelArt) waarmee de gebruiker gegevens uit de database kan verwijderen en een tabblad (DelList) welke dient te registreren welke gegevens zijn verwijderd.

Het is de bedoeling dat de gebruiker in het tabblad DelArt Artikelnummers in kan voeren welke men uit de database wilt verwijderen. Men kan tot 25 nummers tegelijkertijd verwijderen (rij 5 t/m 30). Een macro achter de 'verwerk' knop dient vervolgens ingevoerde nummers in de database op te zoeken, de bijbehorende rijen te knippen en in het tabblad DelList te plakken. Ik heb een macro in elkaar weten te knutselen maar deze vervult de taak niet helemaal goed:

- voor het gemak laat ik de macro alleen nog maar 'zoeken' naar de gegevens welke zijn ingevoerd in cel A5 en A6 van het tabblad DelArt (zie de macro): echter wanneer ik zowel een nummer in cel A5 als A6 invoer zoekt de macro alleen het laatst ingevoerde nummer op in de database en knipt de bijbehorende rij eruit. Het in cel A5 ingevoerde nummer wordt genegeerd.

- In de code verwijs ik specifiek naar cel bereiken (Range A5, Range A6). Wanneer ik de code op deze wijze helemaal uitschrijf dien ik hier dus range A7 t/m A30 aan toe te voegen: Kan dit efficiënter?

- Wanneer de macro een rij uit de database knipt wordt deze rij niet verwijderd en blijft er dus een lege rij over. Na verloop van tijd zullen hierdoor een groot aantal 'gaten' in de database ontstaan. Dit wil ik graag voorkomen

- Wanneer de macro een rij in de DelList plakt wordt rij 5 altijd overgeslagen. De gegevens worden pas vanaf rij 6 geplakt.


Tot slot heb ik het idee dat mijn code niet echt optimaal is opgebouwd. Verbeteringen zijn welkom.


Bekijk bijlage Test bestand.xlsm


Zou iemand mij met dit vraagstuk kunnen helpen?

Mocht iets niet duidelijk zijn dan licht ik het graag nader toe.
 
Uit een database verwijder je normaal gesproken geen records. Samengevoegde cellen is niet echt handig als je het over een database hebt en al zeker niet in combinatie met VBA. Je kan eens naar het geavanceerde filter kijken.
 
Maak van de database een tabel (insert / table)
Voeg een kolom toe: verwijderd
Gebruik validatie in werkblad DelArt.

en dan deze code:

Code:
Sub DelArt_Verwerken()
  With Sheets("Database").ListObjects(1)
    .Range.AdvancedFilter 1, Sheets("DelArt").Cells(4, 1).CurrentRegion
    .DataBodyRange.Columns(8) = "x"
    .Parent.ShowAllData
  End With
End Sub
 
Laatst bewerkt:
Hoi snb

Wat bedoel je precies met gebruik validatie in werkblad DelArt?

Zodra ik de code gebruik plaatst de macro een x achter elk rij in de database
 
Je werkt met Excel; dan ga ik ervan uit dat je weet wat validatie betekent.

Mijn code werkt alleen als je de voorgaande stappen heb uitgevoerd en de adviezen van V en A hebt gevolgd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan