Avatar billede mercu Nybegynder
18. november 2009 - 19:06 Der er 5 kommentarer og
1 løsning

Problem med if sætning.

Jeg har problemer med min if-sætning. Meningen er den skal skrive et CPR nummer, hvis modulus 11 tjekket er godkendt, men den skriver ALLE CPR numrene som jeg genererer således jeg får 9999 CPR numre:

Sub test()

Dim dato As String
Dim dag As String
Dim md As String
Dim år As String
Dim CPR_OK As Boolean
Dim i As Integer
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer, g As Integer, h As Integer
Dim j As Integer
Dim løbenummer As String
Dim testsum As Long
Dim tæller As Integer
Dim CPR_samlet As String
Dim Nr_K As Integer
Dim check_dato As Boolean

Do
check_dato = True

dato = InputBox("indtast fødselsdagen du ønsker at finde CPR numre for DDMMÅÅÅÅ", "Fødselsdato boks")
dag = (Left(dato, 2))
md = (Mid(dato, 3, 2))
år = (Right(dato, 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 indtastede dato er forkert")

Loop Until check_dato = True


'hvis den indtastede dato er sand går vi videre og tjekker
If check_dato = True Then

For tæller = 0 To 9999 Step 1

løbenummer = Format(tæller, "000#")

CPR_samlet = dag & md & Mid(år, 3, 2) & "-" & løbenummer

a = Mid(CPR_samlet, 1, 1)
b = Mid(CPR_samlet, 2, 1)
c = Mid(CPR_samlet, 3, 1)
d = Mid(CPR_samlet, 4, 1)
e = Mid(CPR_samlet, 5, 1)
f = Mid(CPR_samlet, 6, 1)
g = Mid(CPR_samlet, 8, 1)
h = Mid(CPR_samlet, 9, 1)
i = Mid(CPR_samlet, 10, 1)
j = Mid(CPR_samlet, 11, 1)

testsum = (4 * a + 3 * b + 2 * c + 7 * d + 6 * e + 5 * f + 4 * g + 3 * h + 2 * i + j)

    If (testsum Mod 11) = 0 Then CPR_OK = True

'hvis CPR opfylder modulus 11 tjekket kopieres det i en ny række til excel:
    If CPR_OK = True Then Nr_K = Nr_K + 1
    Range("a1").Offset(Nr_K, 0).Value = CPR_samlet
   
   
Next tæller
   
 
End If

End Sub
Avatar billede arne_v Ekspert
18. november 2009 - 19:19 #1
Er du klar over at mod 11 checket ikke laengere kan bruges fordi man er begyndt at uddele CPR numre som ikke opfylder det?
Avatar billede oleelo Nybegynder
18. november 2009 - 20:17 #2
Hej
Du mangler en linjen efter :For tæller = 0 To 9999

CPR_OK = False

og

If CPR_OK = True Then Nr_K = Nr_K + 1
    Range("a1").Offset(Nr_K, 0).Value = CPR_samlet

skal være

If CPR_OK = True Then
Nr_K = Nr_K + 1
    Range("a1").Offset(Nr_K, 0).Value = CPR_samlet
end if
Avatar billede mercu Nybegynder
19. november 2009 - 08:59 #3
Det gav svaret på mit problem - Tak :)
Avatar billede oleelo Nybegynder
20. november 2009 - 20:56 #4
Hej
Godt det kunne bruges:-) jeg sender lige at svar som du kan godkende
mvh oleelo
Avatar billede mt_tn Nybegynder
23. november 2009 - 13:58 #5
Hej
Jeg har også samme problem som mercu, hvor den skriver alle CPR- numrene der genereres. Jeg får derimod 9995 CPR-numre.

Hvorfor skal man skrive i mercus' tilfælde skrive "CPR_OK = False" efter "For i = 0 To 9999" ?
Avatar billede oleelo Nybegynder
23. november 2009 - 19:52 #6
Hej mt_tn
CPR_Ok er et flag der sættes når et CPR-nr er OK
hvis det ikke sættes til FALSK vil det altid stå som SAND uanset om et CPR-nr er OK eller ej.
mht dine 9995 CPR-nr'erne så er jeg dig svar skyldig
mvh oleelo
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