de juiste VBA code gezocht

Status
Niet open voor verdere reacties.

ernofisko

Gebruiker
Lid geworden
25 jun 2004
Berichten
21
beste mensen, ik ben sinds een week op zoek naar een juiste VBA code voor een document dat ik wil aanmaken. tot vorige week had ik nog nooit gehoord over VBA maar moet zeggen dat ik ondertussen al veel geleerd heb en al ver gekomen ben met de zelfstudie. :eek:

dit is wat ik wil bereiken:
als men iets schrijft in veld "B1" is men ook verplicht om de andere velden in te vullen. de andere velden zijn: "B2""B3""B4""B5""B6""B7""D2""D3""F2" pas als alles is ingevuld kan men het document opslaan. Maar als veld "B1" niet is invult mag alles blanco blijven.

als je mijn voorbeeld bekijkt zal je merken dat ik bovenstaande velden in het groen heb gezet en drie maal dezelfde blok heb op 1 pagina. iedere blok is apart, dwz dat blok 2en3 geen invloed kan hebben op de eerste blok en omgekeerd.
ik had al een VBA code gevonden die perfect werkt maar het is net niet wat ik zoek en ik kom er niet uit.
Graag had ik iemand gehad die me die extra duw kan geven en de juiste oplossing geeft.
waarvoor eeuwige dank.

Bekijk bijlage voorbeeld .xls
 
Volgens mij kun je volstaan met:
Code:
    If Not IsEmpty(.Range("B1").Value) And Not IsEmpty(.Range("B2").Value) And Not IsEmpty(.Range("B3").Value) _
        And Not IsEmpty(.Range("B4").Value) And Not IsEmpty(.Range("B5").Value) And Not IsEmpty(.Range("B6").Value) _
        And Not IsEmpty(.Range("D2").Value) And Not IsEmpty(.Range("D3").Value) And Not IsEmpty(.Range("F2").Value) Then
        MsgBox "Alle velden zijn ingevuld"
    Else
        Cancel = True
        MsgBox "alle velden zijn verplicht in te vullen alvorens u kan opslaan"
    End If
 
Volgens mij wil de TS iets anders.

Om te toetsen of alle vakjes en blokken ingevoerd zijn:

Code:
Sub VenA()
ar = Sheets("fiche").UsedRange
For j = 1 To UBound(ar) Step 9
    t = 0
    If ar(j, 2) <> vbNullString Then
        For jj = 1 To 6
            If ar(j + jj, 2) <> vbNullString Then t = t + 1
        Next jj
        For jjj = 1 To 2
            If ar(j + jjj, 4) <> vbNullString Then t = t + 1
        Next jjj
            If ar(j + 1, 6) <> vbNullString Then t = t + 1
    End If
    MsgBox t
Next j
End Sub

Wanneer er een Waar of Onwaar moet optreden om het bestand op te slaan kan ik uit de vraagstelling niet opmaken.:confused:
 
de code van VenA is me onduidelijk: :( en als ik het goed begrijp is waar en onwaar enkel van toepassing op cijfers en niet op het invullen van tekst?

de code van Octafish lijkt niet te werken :-(

ik probeer duidelijker te zijn:

dit moet een standaard sjabloon worden, een meldingsformulier voor personeelsleden. (+-300man) het is de bedoeling dat als men een melding maakt over iemand en de melding schrijft in "B1" dan is men ook verplicht om de andere velden in te vullen. zijnde, datum, uur, oversten, plaats van incident, enzo...
1 blok is 1 melding.

de code die ik reeds erin gestoken had werkt perfect maar het probleem is dat ik nu altijd alles moet invullen alvorens ik kan opslaan, (vandaar de tekst, "test" in ieder groen vak). Ik zou dat willen veranderen naar: als er in veld "B1" niets geschreven staat dan moet er niets gebeuren met de andere velden maar als er in veld "B1" wel iets geschreven staat is men verplicht om de andere velden ook aan te vullen. (bij mijn weten dus niets met Waar of Onwaar te maken?)

ik hoop hiermee duidelijker te zijn?
 
Laatst bewerkt:
Zo dan ?


mvg
Leo
 

Bijlagen

  • voorbeeld L.xlsm
    16,2 KB · Weergaven: 31
thx,

werkt perfect nadat ik dezelfde code ook onder beforesave heb gekopieerd .

bedankt aan allen
 
de code van VenA is me onduidelijk: en als ik het goed begrijp is waar en onwaar enkel van toepassing op cijfers en niet op het invullen van tekst?

De code leest alle gegevens van jouw werkblad in een Array. In jouw voorbeeldje staan drie 'formulieren' deze nemen steeds 7 rijen en twee lege rijen in beslag vandaar de step 9.
dmv
Code:
For j = 1 To UBound(ar) Step 9
    t = 0
    If ar(j, 2) <> vbNullString Then

t = 0 zet voor elk 'formulier' de teller op 0
If ar(j, 2) <> vbNullString kijkt naar B1 , B10 en B19 en controleert of deze cellen leeg zijn. Als dit niet het geval is wordt er naar de verplichte 'cellen' gekeken. Als een 'cel' niet leeg is (<> vbNullString) dan gaat de teller met 1 omhoog.

Je hebt 9 verplichte cellen dus als t = 9 dan is het 'formulier' compleet en dus WAAR anders is het incompleet en dus ONWAAR.
 

Bijlagen

  • voorbeeldzoveel.xls
    44,5 KB · Weergaven: 28
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan