Correcte invoer testen

Status
Niet open voor verdere reacties.

NIh1IlO

Gebruiker
Lid geworden
4 feb 2003
Berichten
759
Dag specialisten

ik heb onderstaand macrootje geschreven maar als ik een verkeerde invoer doe (het moet een datum zijn in de vorm dd/mm/jjjj) dat genereert het toch een antwoord, weliswaar foutief.
Hoe moet ik de code aanpassen opdat er zou getest worden op een correcte invoer van een datum?

Met vriendelijke dank op voorhand

nIh1IlO

Sub vakantieverwijdering2()
Dim vak_datum
Dim Al_dagen

vak_datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Do While vak_datum = ""
If vak_datum = "" Then MsgBox ("Je moet een datum invoeren en wel als volgt dd/mm/jjjj")
vak_datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Loop
Al_dagen = Val(Format(vak_datum, "### ### ###")) - Val(Format(Now, "### ### ###"))
MsgBox ("Je bent nog " & Al_dagen & " dagen verwijderd van je vakantievertrek")

End Sub
 
Ik had je al een verbeterde versie gestuurd, je kunt ook een variabele testen met de functie IsDate().
Code:
if IsDate(vak_datum) then
   'do something fun
else
   msgbox "Dat is geen geldige datum!",vbexclamation
end if
 
ReneDirks

bedankt alweer, maar hoe krijg ik dit nu in een lus waarbij ik bvb 3 kansen krijg tot correcte invoer, zoniet wordt er gestopt?

Sorry hoor, maar ik ben maar een stunteling op dat vlak.

Vriendelijke groeten

nIhiLo
 
Sorry hoor, maar ik ben maar een stunteling op dat vlak.
Geeft niets, zo zijn we allemaal begonnen hoor!

Ik neem aan dat je dat in je bestaande loop wilt zetten? Zoiets als dit dan

Code:
Dim i as integer
i = 0

Do While Not IsDate(vak_datum) or i < 3
     vak_datum = InputBox("Voer de begindatum in van je vakantie: Format (mm/dd/yyyy)", "Begindatum vakantie")

     If not isdate(vak_datum) Then 
        MsgBox ("Je moet een datum invoeren en wel als volgt dd/mm/jjjj")
     end if
     i=i+1
Loop
 
Hello ReneDirks

inderdaad dat was de bedoeling. Onderstaande code wordt perfect doorlopen als de een datum correct is ingevoerd. Ik kom echter in een oneindige lus terecht bij een verkeerde of geen ingave.
Wellicht is het voor jou een kleinigheid maar ik zie het probleem niet.

Nog een aanzetje aub.

Vriendelijke groeten

nIh1IlO

Sub vakantieverwijdering2()
Dim strVak_datum As String
Dim strHuid_datum As String
Dim dtVak_Datum As Date
Dim dtHuid_Datum As Date
Dim i As Integer

i = 0
vak_datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Do While Not IsDate(vak_datum) Or i < 3
If Not IsDate(vak_datum) Then
MsgBox "Dat is geen geldige datum! Voer een correcte datum in!", vbExclamation
End If
i = i + 1
vak_datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Loop
Al_dagen = Val(Format(vak_datum, "### ### ###")) - Val(Format(Now, "### ### ###"))
MsgBox ("Je bent nog " & Al_dagen & " dagen verwijderd van je vakantievertrek")

End Sub
 
Sorry, ik had gehoopt dat je 'm zelf gezien zou hebben:
Code:
Do While Not IsDate(vak_datum) Or i < 3

moet zijn:

Code:
Do While Not IsDate(vak_datum) AND i < 3
 
Hello ReneDirks

bedankt voor je reactie.
Ik heb eens alles op een rijtje gezet volgens jouw advies. Als ik een correcte datum ingeef dat krijg ik ook een goed antwoord.
Als ik echter een verkeerde datum invoer of helemaal niets, dan retourneert de macro steeds een foutmelding. Het is precies dat wat ik wil voorkomen.
De regel waarvoor een foutmelding wordt geretourneerd is in het rood weergegeven.
Wat doe ik toch verkeerd? :confused:

Hopelijk kan je me helpen?

Beste dank op voorhand

nIh1IlO



Sub vakantieverwijdering2()
Dim strVak_datum As String
Dim strHuid_datum As String
Dim dtVak_Datum As Date
Dim dtHuid_Datum As Date
Dim i As Integer

dtHuid_Datum = Format(Now, "dd / mm / yyyy")
i = 0
dtVak_Datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Do While Not IsDate(dtVak_Datum) And i < 3
If Not IsDate(dtVak_Datum) Then
MsgBox "Dat is geen geldige datum! Voer een correcte datum in!", vbExclamation
End If
i = i + 1
dtVak_Datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Loop
Al_dagen = dtVak_Datum - dtHuid_Datum
MsgBox ("Je bent nog " & Al_dagen & " dagen verwijderd van je vakantievertrek")

End Sub
 
Welke foutmelding krijg je dan?
Als je helemaal op safe wilt spelen dan stop je er een foutafhandeling in:

Code:
Sub vakantieverwijdering2()
Dim strVak_datum As String    'je doen nu overigens niets met deze variabelen
Dim strHuid_datum As String   'dus je kunt ze net goed weggooien....
Dim dtVak_Datum As Date
Dim dtHuid_Datum As Date
Dim i As Integer

On error goto vakantieverwijdering2_Err

dtHuid_Datum = Format(Now, "dd / mm / yyyy")
i = 0
dtVak_Datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Do While Not IsDate(dtVak_Datum) And i < 3
If Not IsDate(dtVak_Datum) Then
MsgBox "Dat is geen geldige datum! Voer een correcte datum in!", vbExclamation
End If
i = i + 1
dtVak_Datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
Loop
Al_dagen = dtVak_Datum - dtHuid_Datum
MsgBox ("Je bent nog " & Al_dagen & " dagen verwijderd van je vakantievertrek")

vakantieverwijdering2_Err:
if err.number <> 0 then
   select case err.number
       case 13: msgbox "Fout: etc"
       'hier komen andere foutcodes
       case else: msgbox err.number & "  " & err.description
    end select
end if
End Sub
 
Ik heb nog even rustig doorgelezen wat er stond. Je gaat de fout in bij:
dtVak_datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
omdat dtVakdatum een datum veld is. Dit zou een string moeten zijn, daarna kun je testen of er daadwerkelijk een datum is ingevuld (middels isDate) en dan pas ga je rekenen.
 
Hier heb je een complete versie, vergelijk 'm maar eens:
Code:
Sub vakantieverwijdering2()
Dim strVak_Datum As String
Dim dtVak_Datum As Date
Dim dtHuid_Datum As Date
Dim Al_dagen As Integer
Dim i As Integer

dtHuid_Datum = Date
i = 0

Do While Not IsDate(strVak_Datum) And i < 3
   strVak_Datum = InputBox("Voer de begindatum in van je vakantie: Format(mm/dd/yyyy)", "Begindatum vakantie")
   If Not IsDate(strVak_Datum) Then
      MsgBox "Dat is geen geldige datum! Voer een correcte datum in!", vbExclamation
   End If
   i = i + 1
Loop
If IsDate(strVak_Datum) Then
    dtVak_Datum = CDate(strVak_Datum)
    Al_dagen = dtVak_Datum - dtHuid_Datum
    MsgBox ("Je bent nog " & Al_dagen & " dagen verwijderd van je vakantievertrek")
End If

End Sub
 
Hello ReneDirks

je was me voor: de foutmelding was te situeren op de rode tekstlijn, zonder dat ik mij bewust was van de reden. Jij hebt echter zelf aangegeven wat de oorzaak was: de variabele moest een stringvariabele zijn i.p.v. een datumvariabele.

Overigens is de laatste versie die je meegaf de perefecte oplossing voor mij. Waarvoor mijn beste dank.
Omdat ik vond dat bij 3 foute ingaves het welletjes is, heb ik er nog een extra waarschuwing bijgevoegd, verwerkt als een voorwaarde onmiddelijk na de Loop regel en wel als volgt:
....
Loop
If i = 3 Then
MsgBox "Sorry, je hebt 3 pogingen gekregen om een juiste datum in te voeren, nu vlieg je er uit!"
End If

....

In elk geval van harte bedankt voor het meedenken en vooral voor de correcte oplossing! :thumb:

nIh1IlO
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan