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

Check of bereik lege cellen bevat

Status
Niet open voor verdere reacties.

ewaldmauritz

Gebruiker
Lid geworden
19 okt 2011
Berichten
87
Ik heb een bestand (zie bijgevoegd bestand) waarin in bereik B2:B11;B13:B22;B24:B33 geen lege cellen mogen voorkomen. Nu had ik al een en ander met validatie geprobeerd, maar dat geeft niet het gewenste effect. Wil de validatie werken dan moet je eerst de cel activeren. Gebruikers zullen dat uiteraard niet doen en daardoor de foutmelding nav de validatie ook niet zien.
Nu wilde ik het oplossen door te checken of het aantal argumenten in het bereik B2:B11;B13:B22;B24:B33 ongelijk is aan het aantal argumenten in bereik A2:A11;A13:A22;A24:A33. In dat geval zou er een MsgBox moeten komen met de waarschuwing dat er onvoldoende gegevens zijn ingevoerd. Dit bouw ik dan in een bestaande macro in. Zijn de aantallen argumenten gelijk dan kan de macro worden vervolgd. Zo niet, dan moet de macro stoppen, zodat de gebruiker de mogelijkheid krijgt om de gegevens aan te vullen.
Kan iemand voor helpen met de VBA code hiervoor?
 

Bijlagen

Ewald,
klopt het dat als er in de A kolom iets staat dat er dan ook iets in ernaast in de B kolom moet komen?
en wat als er niets in de A kolom staat ? mag er dan ook niets in de B kolom komen?
 
@ewaldmauritz,

In jouw bestand staat geen macro en wanneer moet de controle plaatsvinden?
 
Als er iets in kolom is ingevuld, moet dat ook in dezelfde rij in kolom B zijn gedaan en andersom. Vandaar dat ik wilde checken of het aantal argumenten in kolom A gelijk is aan dat in kolom B.
Het klopt dat het bestand geen macro bevat. Het gaat mij nu om alleen een macro om het aantal argumenten te checken. Dat voeg ik dan toe aan een andere macro die ik in het originele bestand heb staan. Alleen dat bestand is te groot om te uploaden en het is te veel werk om het bestand te strippen tot een fatsoenlijk formaat.

Zelf zat ik te denken aan iets als:

ALS(AANTALARG(A2:A11)<>AANTALARG(B2:B11);MsgBox("Uw invoer is onvolledig");bestaande macro loopt door)
Maar dan uiteraard in VBA taal.
 
Dank Sylvester,

Een aardige tool lijkt me. Echter, bij het testen blijkt dat het nog niet helemaal vlekkeloos werkt. Soms is het mogelijk om toch maar één kolom te vullen. Het gekke is dat er weinig logica in lijkt te zitten wanneer dit wel en niet gebeurd. In eerste instantie werkte de code bij rij twee. Na wat velden gevuld te hebben en vervolgens verwijderd werkt de code in rij twee opeens weer niet. Ik word er eerlijk gezegd niet wijs uit waar 'm dat in zit. Jij enig idee?
 
De logica is volgens mij wel te vinden en ik had dezelfde gedachte als sylvester-ponte nu geplaatst heeft en liep tegen het probleem aan waarom het niet werkt. Vandaar ook mijn vraag: "wanneer moet de controle plaatsvinden"? Volgens mij hik je op twee gedachten:

1e als het op regelniveau niet klopt dan moet er iets?
2e als het op totaalniveau niet klopt dan moet er iets?

Als je het in wil passen in een andere macro, dan is de vraag wanneer wordt deze aangeroepen?
 
De logica waar ik het over had, ging over wanneer de oplossing van Sylvester wel en niet werkte. De ene keer werkt het wel en de andere keer niet. Maar daar lijkt op het eerste gezicht niet echt een logica achter te zitten. Vandaar.

Om nog even het probleem helder te maken zal ik het nog eens proberen te omschrijven.
Ik heb een macro die alleen goed werkt als alle rijen waar in kolom A iets is ingevoerd, ook in kolom B iets is ingevoerd. Daarom wil ik toetsen of dat ook echt het geval is, op het moment dat de macro gaat draaien. De gebruiker kan de macro middels een knop in werking zetten. Daarom wil ik in die macro iets inbouwen om te checken of in alle rijen waar in kolom A iets is ingevoerd, dat ook in kolom B is gedaan.
- Die check kan je op regelniveau doen, als de gebruiker iets invoert. Dat is de oplossing die Sylvester aandroeg.
- Die check kan je ook doen op het moment dat de macro in gang wordt gezet door de gebruiker. Op dat moment toets je of alle velden zijn ingevuld (dus of het aantal argumenten in het bereik in kolom A gelijk is aan het aantal argumenten in het bereik in kolom B).

Ik hoop dat het zo duidelijker is wat de bedoeling is.
 
Hoi Sylvester,

Jouw oplossing werkt nu beter. Maar je loopt de kans in een loop te eindigen waar je niet meer uitkomt. Bijvoorbeeld: Ik vul cel A2 t/m B3 in, selecteer dan B2 t/m B3 en verwijder dit d.m.v. Delete. Dan krijg je de melding: Vul B2 in. Als je dan op OK klikt, krijg je gelijk de melding: Vul B3 in. Je zit dan in een loop en de enige manier om daar uit te komen is Excel m.b.v. Taakbeheer af te sluiten.

Ook als dit probleem wordt opgelost blijft er (ook met de oplossing van Cobbe) een belangrijk probleem overeind. Het is namelijk mogelijk om zonder alles ingevuld te hebben, toch een andere macro te draaien.

Stel, ik vul A2 in en druk op Enter. Dan krijg ik de melding dat ik B2 in moet vullen. Ik selecteer dan cel B2. Op dat moment ben ik in de gelegenheid op een knop te klikken en zo een andere macro te activeren. Dus ook mijn macro die alleen mag draaien als alle velden zijn ingevuld. Nu krijg ik tijdens het draaien van deze macro wel nog een keer de melding ‘Vul B2 in’. Maar als je dan op OK klikt loopt de macro gewoon verder. Het is dus niet een waterdicht systeem voor wat ik wilde.

Daarom lijkt het mij bij nader inzien toch eenvoudiger om de check te doen voorafgaand aan de betreffende macro. Mijn eerste suggestie dus.
ALS(AANTALARG(A2:A11)<>AANTALARG(B2:B11);MsgBox("Uw invoer is onvolledig");bestaande macro loopt door).

Hopelijk willen jullie mij nog even helpen hiermee.
 
We kunnen dat niet zo afvangen daarvoor hebben we de overige macro's nodig.
Zet in elke macro apart die foutafvang waarin het aantal argumenten in A en B worden vergeleken.
Zijn die ongelijk dan exit sub of zoiets.
 
@Sylvester: Dank. Het werkt nu prima.
@Cobbe: Dat zou inderdaad een prachtige oplossing zijn. Maar mij ontbreekt de kennis van VBA om dat te schrijven. Kan je een voorzet geven?

Bij deze jullie ook alvast een goede jaarwisseling toegewenst.
 
voeg deze function aan een module toe:
Code:
Function testInvulgebied(Optional Invulgebied As Range) As Boolean
    Dim R As Range
    testInvulgebied = True
    If Invulgebied Is Nothing Then Set Invulgebied = Union([A2:A11], [A13:A22], [A24:A33])
    For Each R In Invulgebied
        If Not ((Cells(R.Row, 1) = "" And Cells(R.Row, 2) = "") Or (Cells(R.Row, 1) <> "" And Cells(R.Row, 2) <> "")) Then
            testInvulgebied = False
            Exit Function
        End If
    Next R
End Function
en zet dit boven in je eigen macro:
Code:
    If testInvulgebied = False Then
        MsgBox ("vul eerst de rode cellen in")
        Exit Sub
    End If
 
Super, dat werkt en doet precies wat ik wilde. Hartelijk dank.
Ik zet de vraag op opgelost.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan