Met VBA controleren of cellen in tabblad gevuld zijn

Status
Niet open voor verdere reacties.

renew000

Gebruiker
Lid geworden
7 feb 2009
Berichten
151
Hallo allemaal,

Om mijn vraag te verduidelijken heb ik een voorbeeldbestand meegeleverd. In dit voorbeeldbestand zie je in blad1 een tabel met verschillende kolommen waarbij kolom "Veld1" geel is gemaakt.

Nu ben ik op zoek naar een manier in VBA om het volgende te controleren:

Wanneer er in het "Veld1" een waarde is ingevoerd er wordt gecontroleerd dat alle overige velden voor die rij (uiteraard enkel kolom B t/m H). In de gevallen waarbij dat niet zo is er een messagebox verschijnt.
Wel moet het mogelijk zijn om een rij over te kunnen slaan, dus wanneer rij 6 gevuld is en rij 7 niet, maar vervolgens rij 8,9 en 10 weer wel er geen melding komt.

Ik zit namelijk zelf al wel te prutsen met een formule in de kolom achter het tabel die aangeeft hoeveel zaken er gevuld zijn als kolom b is gevuld.
Vervolgens stukje vba met als uitgangspunt dat als dit lager als 7 is er een messagebox komt, maar snap niet wat ik fout doe...

alvast bedankt voor meedenken
 

Bijlagen

  • voorbeeld.xlsm
    16,3 KB · Weergaven: 122
Wat dacht je van deze mogelijke oplossing
Code:
Sub CheckInput()
Dim i As Long

    With ActiveSheet
        Do
            If Application.WorksheetFunction.CountBlank(.Range(.Range("B6").Offset(i, 1), .Range("B6").Offset(i, 6))) > 0 Then
                MsgBox "Niet alle velden van rij " & CStr(i + 6) & " zijn gevuld!" & vbCrLf & "Vul de gegevens aan en probeer het opnieuw", _
                       vbInformation, _
                       "Oeps... iets vergeten"
            End If
            
            i = i + 1
        Loop While Not (IsEmpty(.Range("B6").Offset(i, 0)))
    End With

End Sub

Deze code checkt enkel aansluitend ingevulde cellen in kolom B.
Bij het eerste gat (lege cel) stopt de code.
Ik ben niet zeker of dit de bedoeling was want de zin
Wel moet het mogelijk zijn om een rij over te kunnen slaan, dus wanneer rij 6 gevuld is en rij 7 niet, maar vervolgens rij 8,9 en 10 weer wel er geen melding komt.
is wel dubbelzinig :(
Enerzijds moet het mogelijk zijn om lege rijen over te slaan maar anderzijds moet er geen melding komen voor rijen 8,9 en 10 ?!?
Waarom zou je ze dan uberhaupt testen????

Kolom I heb je ook niet nodig hiervoor, dus die heb ik gewist.

Bekijk bijlage 2013-08-18--CheckCellenIngevuld.xlsm
 
Laatst bewerkt:
Hallo mcs51mc,

Iig bedankt voor het meedenken, maar misschien heb ik het verkeerd omschreven.

Het is namelijk wel de bedoeling dat wanneer er door een gebruiker een regel wordt overgeslagen de volgende regels waar wel iets in is ingevoerd gecontroleerd. Dit is ook de reden dat ik de formule heb gebruikt om iig voor iedere regel een waarde te laten zien. De waarde wilde ik dan laten controleren en aan de hand van die waarde middels VBA beslissen of er wel of niet iets in ingevoerd in de velden.

De formule zorgt er eigenlijk voor dat wanneer er in het tabel in kolom B niets is ingevoerd er een waarde 7 wordt gegeven en waarde 0 dat alles is ingevoerd. Kortom was mijn bedoeling om enkel de invoer voor de waardes 1 t/m 6 te controleren.

Het mooiste zou zijn om dit uiteraard zonder formules en enkel in VBA te kunnen doen.


De code zal dan ook als het ware volgende chronlogische stappen moeten volgen:
  1. Controleren of er in cel B6 is ingevoerd. Als het antwoord op die vraag "JA" is dan naar stap 2. Als het antwoord op die vraag "NEE" is dan naar stap 4.
  2. Controleren of de overige cellen in het bereik B6 t/m H6 gevuld zijn. Is het antwoord "JA" is dan naar stap 3. Als het antwoord op die vraag "NEE" is dan naar stap 4.
  3. Tonen messagebox dat er iets ontbreekt.
  4. Controleren of er in cel B7 is ingevoerd (kortom dus volgende regel controleren)

Om de code wellicht iets simpeler te houden zou ook Stap 1 kunnen vervallen zodat hij enkel controleert of er een in cel B6 t/m H6 iets is ingevoerd. Dan moet de code echter niet stoppen wanneer er hij een hele lege rij tegen komt, maar wel gewoon verder gaan naar de volgende rij.
Kom ik toch weer terug op mijn formule, want in de basis moet hij dus alle regels controleren en een messagebox tonen, behalve in onderstaande gevallen:
  • Als er helemaal niets op een regel is ingevoerd, of
  • Als alle velden in een record zijn ingevoerd


Wel moet ik zeggen dat ik het soort messagebox van jou (waarbij hij het regelnummer aangeeft waar er iets ontbreekt) echt prachtig vind. Is het ook mogelijk in dat geval (als ik een volgnummer zou toevoegen per rij) dat regel 6 als het ware record 1 wordt? Dan zou ik voor het volgnummer bijvoorbeeld kolom A kunnen gebruiken.
 
@mcs51mc

Code:
& i + 5 &

is voldoende; cstr is overbodig.
 
@mcs51mc

Code:
& i + 5 &

is voldoende; cstr is overbodig.

Effe off topic :(
In feite wel maar dan weer niet omdat ik graag data types zelf converteer dan dat over te laten aan één of ander operating systeem.
i is een long, en ik wil het in een tekst (string) schrijven, wel dan moet iemand het wel converteren hé.
Vandaar dat ik het liever zelf doe met de "CStr" instructie dan het over te laten aan een ander.
Stel dat binnen een volgende versie van VBA die conversies niet meer automatisch gedaan worden, dan heb ik hier tenminste geen probleem :)

Een beetje zoals lang geleden werd gedaan met "ByVal" en "ByRef" tussen VB6.0 en VB.net :( :(
 
Ik laat bij voorkeur anderen het werk doen, in dit geval een compiler. ;)
 
Superbedankt tot zover... hoe dit in mijn voorbeeldbestand werkt is helemaal geweldig en daar was ik precies naar op zoek, maar met het omzetten van de code naar het echte bestand lijk het niet helemaal te werken.
Misschien dat dat met het samenvoegen van cellen te maken heeft (samenvoeging van kolommen F en G in het tabel) of gewoon simpelweg omdat ik niet alle waarden juist aangepast heb.

Ik heb op blad 2 de daadwerkelijke opmaak nagemaakt, maar zoals ik de code heb aangepast geeft hij aan dat bijvoorbeeld rij 14 niet volledig gevuld is terwijl dit wel het geval is. Ongetwijfeld dat jullie zien waar ik de fout in ben gegaan, maar zouden jullie kunnen aangeven waarom ik bepaalde waarden onjuist gewijzigd heb?

Ook vroeg ik me af waarom in het eerste voorbeeldbestand B5 ipv B6 wordt gebruikt. Dit zou in blad 2 dus A12 moeten worden.

Dit gaat echt weer een leermomentje worden...




Bekijk bijlage 2013-08-18--CheckCellenIngevuld.xlsm
 
Laatst bewerkt:
Hmmmm oke... na veel geprobeer ben ik erachter dat het em wel aan de samenvoeging van de cellen in kolom F en G ligt.

Nu kan ik dat wel opvangen door ze weer te splitsen en een formule in kolom f zet waarbij ik waarde "" geef als andere kolommen leeg zijn en anders 1. Dit zodat ik deze kolom dan kan minimaliseren.
Lijkt me een beetje omslachtig en de opmaak totaal niet ten goede komend...

Is hier een vba oplossing voor?

probeer al wel wat te prutsen met nog een "and", maar kom er nog niet echt uit

eigenlijk moet het zoiets zijn met countblank met een range van A:F en G (denk ik)
 
Laatst bewerkt:
hmmm volgens mij werkt niet op ide manier, want ook als ik kolombereik 7 gebruik doet ie niet wat ik wil :(
 
De eenvoudigste oplossing; les 2 van VBA: gebruik nooit samengevoegde cellen in combinatie met VBA.
 
is er echt geen workaround voor dit probleem... het zou de opmaak van het originele bestand volledig verwoesten.. :(
 
ipv cellen samen te voegen gebruik ik nog wel eens "Center across selection" om een bepaalde tekst over een aantal cellen heen te schrijven.
Wanneer je de cellen goed indeeld kan je hiermee dezelfde layout krijgen als door samenvoegen en heb je alle VBA problemen buiten gehouden.

Post misschien eens de juiste versie van je lay out, dan zien we wel wat het best past.
Want met VBA zou je de samengevoegde cellen ook wel kunnen verwerken maar dan iets moeilijker en wanneer iemand het ooit in zijn hoofd haalt om aan de layout te wijzigen draait het weer in de pataten :) of beter :mad:
 
Het probleem is dat het een document van mijn werk is dat ik helaas niet kan delen... het op tabblad 2 weergegeven tabel is een mooie weergave van de zaken die gecontroleerd moeten worden.
De opmaak van het bestand is met name voor de cellen erboven van toepassing..

Kan je met die center across selection ook ervoor zorgen dat tekst binnen de 2 kolommen blijft?
 
Het probleem is dat op Blad2 enkel kolommen E&F samengevoegd zijn van rij 12 tem rij 42.
Is dat ook zo in het finaal document of gaat het ook om de andere kolommen?
Waarom enkel die rijen?
Stel dat je aan het einde van de tabel komt (rij 42) wordt dan van rij 43 kolommen E&F samen gevoegd of wat?
Er zijn te veel onbekenden om een 100% sluitend systeem te garanderen :eek:

Je kan dat bestand toch kopiëren, alle inhoud wissen uit de sheet behalve de hoofdingen en de layout ? :mad: ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan