Avatar billede janospetro Nybegynder
08. oktober 2002 - 09:53 Der er 11 kommentarer og
1 løsning

Hjælp teksten forsvinder igen. (VBA)

Igår fik jeg hjælp af jkron og bak med en modulus 11 kontrol af CPR numre, fungerer fint nu så tak for det. Men i et tilhørende tekstfelt ville jeg gerne have beregnet alderen ud fra CPR-nummeret. For at undgå en commandoknap har jeg valgt at beregningen sker ved Enter, men når der trykkes på tabulatortasten forsvinder teksten igen (det gør den ikke hvis der bliver klikket et andet sted med musen!). Er der nogen som har et løsningsforslag, koden (som jeg fik af bak) ser således ud:

Private Sub txtAlder_Enter()

Dim temp
temp = DateSerial(Mid(txtBarnCPR.Value, 5, 2), Mid(txtBarnCPR.Value, 3, 2), Mid(txtBarnCPR.Value, 1, 2))
HunfaAnbringelse.txtAlder = Right(DatePart("YYYY", Date - temp), 2)
   
End Sub

Hvor HunfaAnbringelse er navnet på formen ;-)
08. oktober 2002 - 10:04 #1
Indsæt txtAlder.Text fra Private Sub CPR_Exit() hændelsen - altså inden du "Enter" txtAlder.
Avatar billede janospetro Nybegynder
08. oktober 2002 - 11:43 #2
Det kan jeg ikke få til at virke. Selv om det nok ikke er flemmingdahl's skyld :-). Hvis jeg forstår dig ret skulle txtAlder.Text ind på denne måde (næsten nederst):

Private Sub txtBarnCPR_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   
    Dim txtBarnCPR As String
    txtBarnCPR = Me!txtBarnCPR
    Dim Xvar As Long
    Dim SlutCiffer As Long
    Dim Resultat As Long
    If Not IsNull(txtBarnCPR) Then
    Xvar = Val(Mid(txtBarnCPR, 1, 1)) * 4
    Xvar = Xvar + Val(Mid(txtBarnCPR, 2, 1)) * 3
    Xvar = Xvar + Val(Mid(txtBarnCPR, 3, 1)) * 2
    Xvar = Xvar + Val(Mid(txtBarnCPR, 4, 1)) * 7
    Xvar = Xvar + Val(Mid(txtBarnCPR, 5, 1)) * 6
    Xvar = Xvar + Val(Mid(txtBarnCPR, 6, 1)) * 5
    Xvar = Xvar + Val(Mid(txtBarnCPR, 7, 1)) * 4
    Xvar = Xvar + Val(Mid(txtBarnCPR, 8, 1)) * 3
    Xvar = Xvar + Val(Mid(txtBarnCPR, 9, 1)) * 2
    SlutCiffer = Val(Mid(txtBarnCPR, 10, 1))
    Resultat = 11 - (Xvar Mod 11)
   
    If Resultat = 11 Then
    Resultat = 0
    End If
    If Resultat = SlutCiffer Then
    cprtest = True
    Else
    cprtest = False
        Dim sBesked As String
        sBesked = "Dette CPR-nummer er ikke gyldigt" & vbNewLine
        sBesked = sBesked & "efter Modulus 11 testen. Så enten" & vbNewLine
        sBesked = sBesked & "er du blevet snydt, eller også" & vbNewLine
        sBesked = sBesked & "har du tastet forkert. Prøv igen :-)"
        MsgBox sBesked
    End If
    Else
    cprtest = Null
    End If
   
    txtAlder.Text = DateSerial(Mid(txtBarnCPR.Value, 5, 2), Mid(txtBarnCPR.Value, 3, 2), Mid(txtBarnCPR.Value, 1, 2))
    HunfaAnbringelse.txtAlder = Right(DatePart("YYYY", Date - temp), 2)

End Sub

Altså i "Exit" hændelsen fra txtBarnCPR før "Enter" txtAlder, men her får jeg følgende besked:

Compile error:
Invalid qualifier

Samt en markering af txtBarnCPR i linien: txtAlder.Text = DateSerial(Mid(txtBarnCPR.Value, 5, 2),
Avatar billede bak Forsker
08. oktober 2002 - 12:02 #3
lav denne ændring i din fejllinie

Temp = DateSerial(Mid(txtBarnCPR.Value, 5, 2), Mid(txtBarnCPR.Value, 3, 2), Mid(txtBarnCPR.Value, 1, 2))
Avatar billede janospetro Nybegynder
08. oktober 2002 - 12:18 #4
Jeg får desværre samme fejlmeddelelse. Er der et forslag til at bevare teksten i "Enter" proceduren som spørgsmålet startede med?
Avatar billede bak Forsker
08. oktober 2002 - 12:26 #5
JanosPetro-> har du ændret txtAlder.Text til Temp ?
Avatar billede jkrons Professor
08. oktober 2002 - 12:35 #6
En mulighed kunen være at teste for hvilken tast, der blevtrykket på. er det tab-tasten gemmes indholdet i en variabel og skrives tilbage. Jeg har ikke Excel her, så jeg kan ikke lige huske den korrekte syntax, men så vidt jeg husker er det noget med

If KeyPress = 9 Then

Det er 9-tallet jeg er usikker på.
Avatar billede janospetro Nybegynder
08. oktober 2002 - 13:15 #7
Jeg har prøvet at ændre txtAlder.Text til Temp, men fik samme besked:
Compile error:
Invalid qualifier

Samt en markering af txtBarnCPR i linien: txtAlder.Text = DateSerial(Mid(txtBarnCPR.Value, 5, 2)....

Der er nok noget om hvilken tasttype, da det kun er tab-tasten der sletter indholdet igen. Det er bare helst den der skal bruges. Jeg skal til et møde nu, men prøver når jeg kommer tilbage ca 15.00. Indtil da tak for hjælp, selvom jeg ikke har fundet løsningen endnu. :-(
Avatar billede jkrons Professor
08. oktober 2002 - 16:02 #8
Prøv med dette. Der er dog et eller andet galt, for den melder ud at mit cpr-nummer ikke er gyldigt, og det plejer det da at være :-), men det regner alderen korrekt ud.

Private Sub txtBarnCPR_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim cprtest As Boolean
    Dim txtBarnCpr As String
    Dim alder As Date
    txtBarnCpr = Me!txtBarnCpr
    Dim Xvar As Long
    Dim SlutCiffer As Long
    Dim Resultat As Long
    If Not IsNull(txtBarnCpr) Then
    Xvar = Val(Mid(txtBarnCpr, 1, 1)) * 4
    Xvar = Xvar + Val(Mid(txtBarnCpr, 2, 1)) * 3
    Xvar = Xvar + Val(Mid(txtBarnCpr, 3, 1)) * 2
    Xvar = Xvar + Val(Mid(txtBarnCpr, 4, 1)) * 7
    Xvar = Xvar + Val(Mid(txtBarnCpr, 5, 1)) * 6
    Xvar = Xvar + Val(Mid(txtBarnCpr, 6, 1)) * 5
    Xvar = Xvar + Val(Mid(txtBarnCpr, 7, 1)) * 4
    Xvar = Xvar + Val(Mid(txtBarnCpr, 8, 1)) * 3
    Xvar = Xvar + Val(Mid(txtBarnCpr, 9, 1)) * 2
    SlutCiffer = Val(Mid(txtBarnCpr, 10, 1))
    Resultat = 11 - (Xvar Mod 11)
   
    If Resultat = 11 Then
    Resultat = 0
    End If
    If Resultat = SlutCiffer Then
    cprtest = True
    Else
    cprtest = False
        Dim sBesked As String
        sBesked = "Dette CPR-nummer er ikke gyldigt" & vbNewLine
        sBesked = sBesked & "efter Modulus 11 testen. Så enten" & vbNewLine
        sBesked = sBesked & "er du blevet snydt, eller også" & vbNewLine
        sBesked = sBesked & "har du tastet forkert. Prøv igen :-)"
        MsgBox sBesked
    End If
    Else
    cprtest = Null
    End If
   
    alder = DateSerial(Mid(Me!txtBarnCpr.Value, 5, 2), Mid(Me!txtBarnCpr.Value, 3, 2), Mid(Me!txtBarnCpr.Value, 1, 2))
    Me!txtAlder = Right(DatePart("YYYY", Date - alder), 2)

End Sub
Avatar billede jkrons Professor
08. oktober 2002 - 16:08 #9
Glem det om fejl i cprnummer beregningen. Det var mig der sov i timen. JHeg indtastede cprnummer MED bindestreg og så bliver det ugyldigt. For mig at se virker det nu, hvcis du har to felter i formularen ved navn txtBarnCpr og txtAlder.
Avatar billede jkrons Professor
08. oktober 2002 - 16:09 #10
Fejlen lå i nogle manglende erklæringer af variable samt nogle forkerte referencer til objekter.
Avatar billede janospetro Nybegynder
09. oktober 2002 - 09:20 #11
Hvor er I gode. Tænk at komme på arbejde, chekke sin mail, og så få et resultat der bare virker. Tusind tak.
Avatar billede jkrons Professor
09. oktober 2002 - 09:30 #12
Velbekomme :-)  Jeg bliver altid glad når løsningsforslagene virker.
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