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

Vereiste velden

Status
Niet open voor verdere reacties.

ExcelNoob

Gebruiker
Lid geworden
20 apr 2007
Berichten
227
Ja hoor weer een vraag van mij!

Kun je met excel ook vereiste velden (zoals bij Access) maken ? Dus dat het bestandje niet kan worden opgeslagen of afgesloten zonder dat de cel is ingevuld?

Mvg,
 
Laatst bewerkt:
Sleutelwoorden: VBA (alt + f11 in Excel) en Workbook events

vb:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Hier komt de code welke controleerd wat jij wil voordat er afgesloten wordt
End Sub
 
Bedankt voor je reactie! Maar,

Ik ben echt een noob op gebied van excel (vandaar de naam), als ik bijvoorbeeld wil dat in cel E23 gecontroleerd wordt of er uberhaupt wat in staat. Wat vul ik dan in?

Mvg,

ExcelNoob
 
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox Sheets("Sheet1").Range("E23") <> ""
End Sub

Bij False staat er niets in.

Wigi
 
Excelnoob,

Zet de volgende code op het blad workbook in de VBA.
- alt + f11
- dubbelklik op thisworkbook aan de linkerkant van je scherm.
- plak in het witte venster de volgende code:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'controleer of cel E23 leeg is
    If Range("E23") = "" Then
        'als deze leeg is geef dan een message box met een melding
        MsgBox "Cel E23 is leeg! Vul deze eerst juist in a.u.b.!!!"
        'Cancel het commando
        Cancel = True
        'sluit de macro af
        Exit Sub
    End If
    
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    If Range("E23") = "" Then
        MsgBox "Cel E23 is leeg! Vul deze eerst juist in a.u.b.!!!"
        Cancel = True
        Exit Sub
    End If
    
End Sub

- eerste deel controleert cel E23 bij het afsluiten;
- tweede deel controleert cel E23 bij het saven.

Kijk ook eens op deze site: http://www.ozgrid.com/VBA/ voor meer info over VBA en natuurlijk de MS helpfile en de Helpmij forum zoekfunctie :)
 
De

Code:
Cancel = True

was ik idd in mijn code vergeten. Bedankt Ferenc.

Bij jou mogen

Code:
'sluit de macro af
        Exit Sub

en

Code:
Exit Sub

wel weg, want je zit toch al aan het einde van de macro. ;)

Wigi
 
Oke bedankt beide, maar als ik voor meerdere cellen dit wil toepassen moet ik deze code gewoon voor elke cel plakken en aanpassen? Of kan dit ook korter?
 
Oke bedankt beide, maar als ik voor meerdere cellen dit wil toepassen moet ik deze code gewoon voor elke cel plakken en aanpassen? Of kan dit ook korter?

Probeer maar iets in mekaar te steken en we zullen er dan wel naar kijken of het korter kan.
 
Hij werkt niet....:( Krijg geen melding en er staat toch echt niets in
 
Code:
Sub Savefile()
ActiveWorkbook.SaveAs Filename:="H:\Mijn Documenten\PMF" & Range("D8").Value & ".xls"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'controleer of cel D54 leeg is
    If Range("D54") = "" Then
        'als deze leeg is geef dan een message box met een melding
        MsgBox "Vul het percentage voor iTBF in, of vul een 0 in!!!"
        'Cancel het commando
        Cancel = True
        'sluit de macro af
        Exit Sub
    End If
    
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    If Range("d54") = "" Then
        MsgBox "Vul het percentage voor iTBF in, of vul een 0 in!!!!!!"
        Cancel = True
        Exit Sub
    End If
    
End Sub
 
Waar heb jij deze code staan?

De code welke ik heb gegeven moet wel achter thisworkbook en niet achter een sheet of in een module.
 
Hehe:o My Bad!

Maar als ik voor meerdere velden een invulcontrole wil invoeren doe ik dat dan ongeveer zo:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'controleer of cel D9-D13 leeg is
    If Range("D8")("D9")("D10")("D11")("D12")("D13") = "" Then
        'als deze leeg is geef dan een message box met een melding
        MsgBox "Vul de persoonsgegevens in!!!"
        'Cancel het commando
        Cancel = True
        'sluit de macro af
        Exit Sub
    End If
    
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    If Range("D8")("D9")("D10")("D11")("D12")("D13") = "" Then
        MsgBox "Vul de persoonsgegevens in!!!"
        Cancel = True
        Exit Sub
    End If
    
End Sub
N.B. Ik wil ook vereiste velden in kolommen E en F maken
 
Een voorbeeld Range:
Range("D8 : D13", "E8:E13")
D8 tm D13 en E8 tm E13 (spaties tussen D8 en D13 kunnen weg, forum maakt van dubbelepunt + D een smilie _> :D)
 
Als ik deze code invoer,

Code:
 If Range("D8:D13", "D15", "H53", "D54")

Geeft hij een compileefout

Onjuist aantal argumenten of ongeldige eigenschappentoewijzing

:confused: :confused: :confused:
 
Mijn fout.
Je gehel Range moet tussen "" tekens niet ieder deel:
Code:
Range("D8:D13, D15, H53, D54")
 
oke het deel voor het afsluiten werkt! Daarvoor bedankt, maar voor het deel van het opslaan heb ik exact dezelfde range ingevuld, maar die doet het niet.... mis ik daar nog iets?
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    If Range("D8:D13,D15,H53,D54") = "" Then
        MsgBox "Vul de persoonsgegevens"
        Cancel = True
        Exit Sub
    End If
    
End Sub
 
Code:
If Range("D8:D13,D15,H53,D54") = ""

Blijkbaar kun je niet zomaar if range met meerdere cellen gelijkstellen aan iets...:confused:

probeer anders dit eens;

Code:
If Range("D8") = "" And Range("D9") = "" And Range("D10") = "" And Range("D11") = "" _
         And Range("D12") = "" And Range("D13") = "" And Range("D15") = "" And Range("H53") = "" _
         And Range("D54") = "" Then

niet echt de ideale oplossing maarja, :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan