09. juli 2021 - 22:14Der er
4 kommentarer og 1 løsning
Validere om der er værdier indtastet i samtlige felter og derefter ....
Jeg roder lidt med at validere om der er værdier indtastet i samtlige felter og derefter , hvis samtlige felter er udfyldt eksekvere noget kode. Jeg ar bare gået helt i baglås med at få det til at fungere.. Et stykke hen ad vejen virker det., men selve processen med at få "fyret" kode af, når samtlige felter er udfyldt volder mig lidt problemer.. Er der en venlig sjæl, der kan hjælpe mig på rette vej ?
mvh martens
kode : ----------------------------------------------------------------------------------- Private Sub cmb_check_values_before_action_Click()
If IsNull(Me.Tekst0) Then MsgBox "Boks 0 er tom" Else MsgBox "Boks 0 er IKKE tom" End If
If IsNull(Me.Tekst1) Then MsgBox "Boks 1 er tom" Else MsgBox "Boks 1 er IKKE tom" End If
If IsNull(Me.Tekst2) Then MsgBox "Boks 2 er tom" Else MsgBox "Boks 2 er IKKE tom" End If
If IsNull(Me.Tekst3) Then MsgBox "Boks 3 er tom" Else MsgBox "Boks 3 er IKKE tom" End If
Exit Sub ' køres kun hvis ALLE 4 bokse er udfyldt ! MsgBox "Samtlige felter er udfyldt !" ' Kode "fyres af" her End Sub
For Index = 0 To 3 If IsNull(Me("Tekst" & CStr(Index)).Value) Then Cancel = True Exit For End If Next
If Cancel = True Then MsgBox "Boks" & Str(Index) & " er ikke tom.", vbInformation + vbOKOnly, "Validering" Else MsgBox "Samtlige felter er udfyldt.", vbInformation + vbOKOnly, "Validering" ' Kør kode. End If
Private Sub cmb_check_values_before_action_Click() 'Tæller til antal Udfyldt = 0
If IsNull(Me.Tekst0) Then MsgBox "Boks 0 er tom" Else MsgBox "Boks 0 er IKKE tom" Udfyldt = Udfyldt + 1 End If
If IsNull(Me.Tekst1) Then MsgBox "Boks 1 er tom" Else MsgBox "Boks 1 er IKKE tom" Udfyldt = Udfyldt + 1 End If
If IsNull(Me.Tekst2) Then MsgBox "Boks 2 er tom" Else MsgBox "Boks 2 er IKKE tom" Udfyldt = Udfyldt + 1 End If
If IsNull(Me.Tekst3) Then MsgBox "Boks 3 er tom" Else MsgBox "Boks 3 er IKKE tom" Udfyldt = Udfyldt + 1 End If
If Udfyldt = 4 Then ' køres kun hvis ALLE 4 bokse er udfyldt ! MsgBox "Samtlige " & Udfyldt & " felter er udfyldt !" ' Kode "fyres af" her Else MsgBox Udfyldt & " af 4 felter er udfyldt." End If End Sub
Mange muligheder. Det afhænger også af, om du skal bruge informationen videre eller bare skal have "fyret koden af". Hvis du ønsker at bevare din kode eller på anden måde kan bruge det, kan du sætte et flag, som så kun sættes til False, hvis én er tom ("Sand indtil det modsatte er bevist"):
Dim AlleErUdfyldt as boolean AlleErUdfyldt=True 'Og så dine statements: If IsNull(Me.Tekst0) Then AlleErUdfyldt=False MsgBox "Boks 0 er tom" Else MsgBox "Boks 0 er IKKE tom" End If
If IsNull(Me.Tekst1) Then AlleErUdfyldt=False MsgBox "Boks 1 er tom" Else MsgBox "Boks 1 er IKKE tom" End If osv.
Jeg ser efterfølgende, at det minder om Gustavs, hvor Cancel er false, indtil den evt. sættes til true. Jeg kan også lide Gustavs idé om at lave et loop, så den er klar til evt. at tage flere (eller færre) felter. Her får du dog ikke "MsgBox" på resten, når der er først er fundet én, som ikke er udfyldt. De er måske også kun på for at kunne teste det. Cancel bør her dog nok ikke være en overført Integer og skal vel sættes til False for god ordens skyld.
store-mortens er god, især hvis du vil vide, hvor mange, der er udfyldt. Pas på med Exit Sub. Som den står nu, vil den jo exit'te efter sidste IF.
En ucharmerende måde kunne være, at exitte helt, straks du møder én som er tom. Det minder lidt om Gustavs "Exit For", men er mere "brutal".
Til inspiration mht. - loop controls - anvende controls property 'tag' (i egenskabsark på dansk: mærke)
Ved at anvende en property for det enkelte kontrolelement opnåes: - alle typer controls kan testes (combo og check) - unbound textboxes kan undlades
Skal omskrives lidt for at fyre når alt er ok - dette chekker blot en record samlet. Hvert kontrolelement som skal chekkes for ikke at have værdi null, skal i det egenskabsark->andet->mærke have indholdet: mustBeNullChecked
'in class module of form
Private Sub Form_Current() controlsEmptyTest "" End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer) Cancel = controlsEmptyTest() End Sub
Private Function controlsEmptyTest(Optional tailMsg = "The record can not saved with these values") Dim ctrls ctrls = someControlsWithTagPropertiedIsNull(Form) If Not IsEmpty(ctrls) Then MsgBox "Following controls has null value" & vbCrLf & arr2list(ctrls, vbCrLf) & vbCrLf & tailMsg controlsEmptyTest = True: End If End Function
'in a standard module Function someControlsWithTagPropertiedIsNull(Form, Optional tagValue = "mustBeNullChecked") Dim ctrl For Each ctrl In Form.Controls If ctrl.Properties("tag") = tagValue Then If IsNull(ctrl) Then push someControlsWithTagPropertiedIsNull, ctrl.name End If: Next End Function
' homebrew library in referenced mdb Sub push(v, i, Optional rLevel = 0, Optional pushEmptyOrNull = False) 'push back on array V, value i or items of array i recursively 'V must NOT be dim'ed with fixed size or parentes 'Value can be anything - simple types, arrays or objects Dim ai If (IsNull(i) Or IsEmpty(i)) And Not pushEmptyOrNull Then Exit Sub If IsArray(i) And (rLevel <> 0) Then For Each ai In i push v, ai, rLevel - 1: Next Else If IsEmpty(v) Then v = Array() ReDim Preserve v(UBound(v) + 1) If IsObject(i) Then Set v(UBound(v)) = i Else v(UBound(v)) = i End If End Sub
Function arr2str(arr, Optional delimit = ",", Optional lower, Optional upper) Dim i If Not IsNull(arr) Then If IsMissing(lower) Then lower = LBound(arr) If IsMissing(upper) Then upper = UBound(arr) i = lower If upper > lower Then For i = lower To upper - 1 arr2str = arr2str & arr(i) & delimit: Next: End If arr2str = arr2str & arr(i) End If End Function
Private Sub cmb_check_values_before_action_Click()
'Sikre at alle felter er udfyldt If Trim(Me.Tekst0.Value & vbNullString) = vbNullString Then MsgBox "Boks 0 er tom" ElseIf Trim(Me.Tekst1.Value & vbNullString) = vbNullString Then MsgBox "Boks 1 er tom" ElseIf Trim(Me.Tekst2.Value & vbNullString) = vbNullString Then MsgBox "Boks 2 er tom" ElseIf Trim(Me.Tekst3.Value & vbNullString) = vbNullString Then MsgBox "Boks 3 er tom" Else End If
' køres kun hvis ALLE 4 bokse er udfyldt ! MsgBox "Samtlige felter er udfyldt !" ' Kode "fyres af" her End Sub
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.