07. oktober 2002 - 10:49Der 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.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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.
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
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.
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.