Avatar billede janospetro Nybegynder
07. oktober 2002 - 10:49 Der er 5 kommentarer og
1 løsning

Kontrol af CPR-nr i brugerform (VBA) til Excel 2000 +aldersberegn

Kontrol af CPR-nummer i brugerform (VBA) til Excel 2000, samt aldersberegning.

Jeg er begynder i VBA og har akut brug for hjælp. I en brugerform (userform) har jeg et tekstfelt ”txtRegistrantCPR”, hvor jeg gerne vil have en modulus 11 kontrol når personnummeret er tastet ind. Jeg har følgende kode fra Access, men jeg kan ikke få den til at virke.

Private Sub txtRegistrantCPR_Change()
   
    Function cprtest(txtRegistrantCPR As String) As Boolean
    Dim Xvar As Long
    Dim SlutCiffer As Long
    Dim Resultat As Long
    If Not IsNull(txtRegistrantCPR) Then
    Xvar = Val(Mid(txtRegistrantCPR, 1, 1)) * 4
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 2, 1)) * 3
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 3, 1)) * 2
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 4, 1)) * 7
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 5, 1)) * 6
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 6, 1)) * 5
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 7, 1)) * 4
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 8, 1)) * 3
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 9, 1)) * 2
    SlutCiffer = Val(Mid(txtRegistrantCPR, 10, 1))
    Resultat = 11 - (Xvar Mod 11)
    If Resultat = 11 Then
    esultat = 0
    End If

    If Resultat = SlutCiffer Then
    cprtest = True
    Else
    cprtest = False
        MsgBox "Forkert CPR-nummer"
    End If
    Else
    cprtest = Null
    End If
    End Function

End Sub

Dernæst har et andet tekstfelt ”txtRegistrantAlder”, hvor jeg gerne ville have at alderen vises ud fra det indtastede CPR-nummer i txtRegistrantCPR. Hvordan får jeg hentet data fra feltet txtRe-gistrantCPR til txtRegistrantAlder. Jeg er klar over at jeg skal bruge en tekst-streng.

Håber på hurtig hjælp

JanosPetro
Avatar billede jkrons Professor
07. oktober 2002 - 11:22 #1
Nu ved jeg ikek hvad det er, der ikke fungerer, men prøv at state med at fjerne Function og End fucntion linjerne. Det ser ud som om du har kopieret en function ind i en sub.
Avatar billede jkrons Professor
07. oktober 2002 - 11:27 #2
En Function returnerer en variabel, og det har du ikke brug for i dette tilfælde.

Erklær i stedet en variabel til at indeholde CPR-nummer. Tildel den enværdi fra det relevante felt, fx

DIM txtRegistrantCPR as string
txtRegistrantCPR = Me!txtRegistrantCPR
Avatar billede bak Forsker
07. oktober 2002 - 11:34 #3
Enig med jkrons.
Du bør smide din funktion over i et alm. modul.

Derefter bør du oprette en kommandoknap der igangsætter valideringen.
som det er nu vin du få en validering for hvert tal du indtaster i feltet. dvs 9 fejl inden indtastning er fuldført

koden til kommandoknappen kunne se således ud

Private Sub CommandButton1_Click()
Dim temp
cprtest (txtRegistrantCPR.Value)
temp = DateSerial(Mid(txtRegistrantCPR.Value, 5, 2), Mid(txtRegistrantCPR.Value, 3, 2), Mid(txtRegistrantCPR.Value, 1, 2))
UserForm1.txtRegistrantAlder = Right(DatePart("YYYY", Date - temp), 2)
End Sub
Avatar billede jkrons Professor
07. oktober 2002 - 11:45 #4
Enig med BAK omkring knappen. Change hændelsen er ikke god her, fordi den udlses hver gang du ændrer på feltet. Brug af en kanp kræver dog at brugeren aktivt foretager sig noget.

Bedre kunne det være at bruge EXIT hændelsen, der udløses når brugeren forlader feltet.
Avatar billede bak Forsker
07. oktober 2002 - 11:51 #5
tak for det, jkrons, den havde jeg faktisk ikke set / bemærket før...
Avatar billede jkrons Professor
07. oktober 2002 - 15:23 #6
bak-> Velbekomme :-)

janospetro-> Tak for point
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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