Avatar billede mercu Nybegynder
17. november 2009 - 13:51 Der er 17 kommentarer og
1 løsning

2 hurtige spørgsmål.

Jeg skal tjekke om en indtastet dato er korrekt.

Jeg har fundet ud af isdate kan gøre det, men jeg vil gerne have datoen skal indtastes således:

DDMMYY

Men det kan isdate vist ikke finde ud af, den siger nemlig datoen = false når jeg indtaster således.

Kan jeg vælge, hvilket format datoen skal indtastes i og isdate skal godkende?


Jeg skal også have lavet en tæller, som tæller 0001, 0002, 0003 osv optil 9999.

Er det bare en almindelig tæller også format("####") ?
Avatar billede mercu Nybegynder
17. november 2009 - 14:02 #1
Ideen i datoen skal indtastes i formatet er jeg senere skal bruge det til beregninger og hvis formatet er således gør det det væsentligt lettere for mig.

Jeg vil også have den til at loope indtil datoen bliver indtastet som

DDMMYY.
Avatar billede mercu Nybegynder
17. november 2009 - 15:59 #2
Jeg har fixet problemet med tælleren.

Så nu mangler jeg bare at fixe mit problem med om den indtastede dato er gyldig i det format jeg indtaster.
Avatar billede mercu Nybegynder
17. november 2009 - 16:32 #3
Jeg har lavet følgende kode, men den virker ikke efter hensigten. Datoen bliver indtastet som en streng i en input box, udfra den streng tester jeg så nogle if betingelser, og hvis de er opfyldt skulle datoen gerne godkendes, således jeg kan bruge den "videre".

loFodseldag = InputBox("indtast fødselsdagen du ønsker at finde CPR numre for", "Fødselsdato boks")


If Len(loFodseldag) <> 6 Then check_dato = False
If Mid(loFodseldag, 1, 2) < 0 Then check_dato = False
If Mid(loFodseldag, 1, 2) > 31 Then check_dato = False
If Mid(loFodseldag, 4, 2) < 0 Then check_dato = False
If Mid(loFodseldag, 4, 2) > 12 Then check_dato = False
If Mid(loFodseldag, 6, 2) < 1858 Then check_dato = False
If Mid(loFodseldag, 6, 2) < 2057 Then check_dato = False

Else
check_dato = True

End If
Avatar billede excelent Ekspert
17. november 2009 - 17:19 #4
Hvad er legal input format ? dd-mm-åååå eller hvad ?
Avatar billede mercu Nybegynder
17. november 2009 - 17:27 #5
DDMMÅÅ
Avatar billede excelent Ekspert
17. november 2009 - 17:40 #6
Du er nok nødt til at have årstal i formatet ÅÅÅÅ
Koden kan jo ikke vide hvilket århundrede der menes
Senere i forløbet kan formatet vel ændres til DDMMÅÅ

Sub test()

check_dato = True

x = InputBox("indtast fødselsdagen du ønsker at finde CPR numre for DDMMÅÅÅÅ", "Fødselsdato boks")
dag = Left(x, 2)
md = Mid(x, 3, 2)
år = Right(x, 4)

If dag < 1 Or dag > 31 Or md < 1 Or md > 12 Or år < 1858 Or år > 2057 Then check_dato = False

MsgBox check_dato

End Sub
Avatar billede tjacob Juniormester
17. november 2009 - 18:05 #7
Lige en sidebemærkning:

Det vil være klogt at indlæse tallene i et talformat. F.eks.
Dim Dag as long
Dag = CLng(Mid(loFodseldag, 1, 2))

INDEN du tester. Ellers vil du få sammenligninger af tekststrenge, hvilket er uhensigtsmæssigt når det er tal:

Som tekststreng vil f.eks. "2" være større end "13".
Avatar billede mercu Nybegynder
17. november 2009 - 18:05 #8
Ok.

Det virker ganske udmærket.

Hvis jeg ska fjerne de to første af ÅÅÅÅ så jeg har ÅÅ kan jeg så ikke benytte replace?
Avatar billede mercu Nybegynder
17. november 2009 - 18:06 #9
Ska jeg så ikke også deklarer min inputbox til fødselsdag som "long" ?
Avatar billede tjacob Juniormester
17. november 2009 - 18:16 #10
Til den sidste:

Nej, det kan du ikke. Inputboxen holder pr definition en streng.
Du bruger streng-metoder (MID) til at separere de forskellige dage/måneder/år -det er helt OK.
Men når du derefter tester dem i forhold til "rigtige" tal som 0 og 31 bør du konvertere dem til talformater.
Avatar billede excelent Ekspert
17. november 2009 - 18:17 #11
jakob har en pointe der :-)
Avatar billede mercu Nybegynder
17. november 2009 - 18:19 #12
Så det er nok at jeg deklarerer
dag, md og år som long / tal?
Avatar billede excelent Ekspert
17. november 2009 - 18:27 #13
Jeg er lidt doven, så jeg dimmer ikke med mindre det er strengt nødvendigt
Du kan også gøre sådan (bevare variablerne som string
du kan ændre dem efter behov

Sub test()

check_dato = True

x = InputBox("indtast fødselsdagen du ønsker at finde CPR numre for DDMMÅÅÅÅ", "Fødselsdato boks")
dag = Left(x, 2)
md = Mid(x, 3, 2)
år = Right(x, 4)

If dag * 1 < 1 Or dag * 1 > 31 Then check_dato = False
If md * 1 < 1 Or md * 1 > 12 Then check_dato = False
If år * 1 < 1858 Or år * 1 > 2057 Then check_dato = False

MsgBox check_dato

End Sub
Avatar billede tjacob Juniormester
17. november 2009 - 18:36 #14
For i øvrigt mercu:

Du skal ikke lave dine indlæg som "svar". Svar er forbeholdt dem der har løsningen. Du skal lægge kommentarer.

Normal procedure er: Alle lægger sine indlæg som kommentarer, indtil spørger er tilfreds.
Så beder spørger den eller de brugere der har bidraget til løsningen om at lægge et svar (excelent).

Derefter kan spørger give point til dem der har svaret (i dette tilfælde også dig selv), som han mener skal have point .
Avatar billede mercu Nybegynder
17. november 2009 - 18:41 #15
Okay takker for svaret.

Jeg vil dog godt have den til at lave en msgbox hvis den laver fejl i tjekket i stedet for bare "false"

Også loope tilbage til min inputbox hvor jeg skal indtaste den. Jeg har dog lidt problemer med det:

Sub test()

check_dato = True

x = InputBox("indtast fødselsdagen du ønsker at finde CPR numre for DDMMÅÅÅÅ", "Fødselsdato boks")
dag = Left(x, 2)
md = Mid(x, 3, 2)
år = Right(x, 4)

If dag * 1 < 1 Or dag * 1 > 31 Then check_dato = False
If md * 1 < 1 Or md * 1 > 12 Then check_dato = False
If år * 1 < 1858 Or år * 1 > 2057 Then check_dato = False

if check dato = false then

MsgBox("den indtatede dato er forkert")

loop until check_dato = true

End Sub
Avatar billede mercu Nybegynder
17. november 2009 - 18:49 #16
Nu har jeg fixet det - tror jeg.

Så skal jeg bare ha fundet ud af at fjerne de to første cifre af året når jeg skal regne videre.
Avatar billede excelent Ekspert
17. november 2009 - 19:20 #17
Læg dem i en ny variabel, for du kan få brug for at skulle teste for århundrede senere fx.

år2=right(år,2)
skal du bruge år2 som tal så : år2*1, eller som jakob viste
Avatar billede excelent Ekspert
30. november 2009 - 17:02 #18
?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester