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

Macro voor verplichte velden voor dat opgeslagen wordt.

Status
Niet open voor verdere reacties.

wimix69

Gebruiker
Lid geworden
19 mrt 2011
Berichten
195
Hallo,

Wie kan er voor mij een macro maken.

Ik heb een formulier gemaakt. Nu wil ik graag een Macro hebben zodat bepaalden velden verplicht ingevuld moeten worden voor dat het formulier wordt opgeslagen.
Als er bij cel F212 & F215 (in voorbeeld geel) iets wordt in gevuld dan moeten cellen (in voorbeeld rood) F184 J184 M184 F186 J186 M186 Z212 AG212 Z215 AG215 F218 O218 J220 O220 J222 O222 AB221 J223 verplicht worden ingevuld voor dat het formulier opgeslagen kan worden.

Vr gr
Wim
 

Bijlagen

  • test 21-2-2020.xlsx
    164,3 KB · Weergaven: 23
Hi Wim, werkt het zo?

Code:
Sub verplichten()

If Range("f212") = "" And Range("F215") = "" Then
ThisWorkbook.SaveAs
Exit Sub

ElseIf Range("F184") = "" Or Range("J184") = "" Or Range("M184") = "" Or Range("F186") = "" Or Range("J186") = "" _
Or Range("M186") = "" Or Range("Z212") = "" Or Range("AG212") = "" _
Or Range("Z215") = "" Or Range("AG215") = "" _
Or Range("F218") = "" Or Range("O218") = "" _
Or Range("J220") = "" Or Range("O220") = "" Or Range("J222") = "" _
Or Range("O222") = "" Or Range("AB221") = "" Or Range("J223") = "" Then

MsgBox "Je hebt niet alles ingevuld. Save cancelled!"
Else
ThisWorkbook.SaveAs
End If
End Sub
 
Laatst bewerkt:
Of meteen op de juiste plek:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Range("F212") <> "" And Range("F215") <> "" Then
        Cellen = Split("F184 J184 M184 F186 J186 M186 Z212 AG212 Z215 AG215 F218 O218 J220 O220 J222 O222 AB221 J223")
        For i = 0 To UBound(Cellen)
            If Range(Cellen(i)) = "" Then
                MsgBox "Cel: " & Cellen(i) & " is niet gevuld", vbCritical, "Verplichte cel"
                Cancel = True
                Exit For
            End If
        Next i
    End If
End Sub
 
Laatst bewerkt:
Syntaxisfout. Macro voor verplichte velden voor dat opgeslagen wordt

Ik krijg bij beide macro's een foutmelding, Syntaxisfout. Wat doet ik verkeerd?
 
Dat kunnen we zonder je document waarin je die macro hebt geplaatst uiteraard niet zien.
 
Syntaxisfout. Macro voor verplichte velden voor dat opgeslagen wordt

Oops
 

Bijlagen

  • test 21-2-2020.xlsm
    168,9 KB · Weergaven: 24
JE hebt de Private sub_Workbook_BeforeSafe in een sub staan. gebruik F8 maar eens
 
Wat AD1957 zegt.
Waarom verander je aangeboden code?
Haal die regel "Sub verplicht()" eruit en plaats de code uit #3 achter het werkblad, niet in een Module.

Zie ook:
https://trumpexcel.com/vba-events/
 
Laatst bewerkt:
Macro voor verplichte velden voor dat opgeslagen wordt

Oké Macro werkt nu. Maar ik wil nog wat aanpassingen. Als ik een fout melding krijg is dit nu bijvoorbeeld “Cel: F184 is niet in gevuld” Ik wil bij eigenlijk bij iedere cel een cel gebonden tekst kunnen weer geven zonder Cel vermelding zoals Cel:F184.

Ik heb een groot document met meerdere tabbladen. Nu kan ik de foutmelding die bijvoorbeeld in Tab1 zijn omzeilen om het document vanuit tab2 op te slaan. Document mag niet worden opgeslagen als er ergens in ander tabbladen fout meldingen zitten.

Fout meldingen worden niet weer gegeven als een van de twee cellen F212 F215 (gele cellen) vergeten is in te vullen. Dit moet ook een foutmelding geven.

Alvast bedankt,
Wimix
 

Bijlagen

  • test 27-2-2020.xlsm
    470,1 KB · Weergaven: 20
Zet de code in de ThisWorkbook module, niet achter een werkblad.
Met je gewenste wijzigingen:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Sheets("Tab1").Activate
    If Range("F212") <> "" And Range("F215") <> "" Then
        cellen = Split("F184 J184 M184 F186 J186 M186 Z212 AG212 Z215 AG215 F218 O218 J220 O220 J222 O222 AB221 J223")
        For i = 0 To UBound(cellen)
            If Range(cellen(i)) = "" Then
                Select Case Range(cellen(i)).Address(0, 0)
                    Case "F184": MsgBox "Cel F184 is niet gevuld", vbCritical, "Verplichte cel"
                    Case "J184": MsgBox "Cel J184 is niet gevuld", vbCritical, "Verplichte cel"
                End Select
                
                Cancel = True
                Exit For
            End If
        Next i
    Else
        MsgBox "Cellen F212 en F215 zijn niet gevuld", vbCritical, "Verplichte cellen"
    End If
End Sub

Kan je zelf wel uitbreiden met de gewenste melding per cel.
 
Laatst bewerkt:
Macro voor verplichte velden voor dat opgeslagen wordt

Foutmeldingen per cel bij voegen gaat goed.

Alleen moet dit ook per tabblad zijn.

Als er nu niets wordt ingevuld in tabblad 1 maar wel in tabblad 2 of 3 kan het document niet opgeslagen worden. er blijft dan om input gevraagd worden in cellen F212 en F215 van tabblad 1. Het is alleen een foutmelding als een van de twee cellen F212 of F215 niet is ingevuld. Als beide niet in gevuld zijn is het geen fout melding en moet er gewoon opgeslagen kunnen worden.
 

Bijlagen

  • test 27-2-2020 2.xlsm
    470,5 KB · Weergaven: 15
Je bent niet duidelijk.
In #9 zeg je dat de controle niet wordt gedaan als je niet op Tab1 bent.
Nu wordt die controle wel gedaan en klaag je dat er niet opgeslagen kan worden.

Anderszijds zou die code nu wel zo duidelijk moeten zijn dat je het volledig naar wens kan gebruiken.
 
Macro voor verplichte velden voor dat opgeslagen wordt

Bedankt voor je hulp
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan