anne_n_d Novice
23. maj 2020 - 23:00 Der er 10 kommentarer

VBA - hjælp AKUT

Hej, er igang med at teste modulus 11.
Har set andre kommentar og har prøvet at lave same same, men det lykkes ikke ved mig.

Jeg skal teste CPR nr fra celle "A6" og svaret skal indsættes i celle F5.(Forkert eller gyldig CPR nr) 

Når jeg trykker på RUN, så kommer ikke noget frem, hvad har jeg lavet forkert?

Sub ny()


    Dim CPRtest
    Dim Resultat
    Dim SlutCiffer
    Dim Xvar
   
   
    Testtest = Worksheets("Hjem").Range("F5").Value
   
    If (Worksheets("Hjem").Range("A6").Value <> "") Then
   
        Xvar = Val(Mid(Testtest, 1, 1)) * 4
        Xvar = Xvar + Val(Mid(Testtest, 2, 1)) * 3
        Xvar = Xvar + Val(Mid(Testtest, 3, 1)) * 2
        Xvar = Xvar + Val(Mid(Testtest, 4, 1)) * 7
        Xvar = Xvar + Val(Mid(Testtest, 5, 1)) * 6
        Xvar = Xvar + Val(Mid(Testtest, 6, 1)) * 5
        Xvar = Xvar + Val(Mid(Testtest, 7, 1)) * 4
        Xvar = Xvar + Val(Mid(Testtest, 8, 1)) * 3
        Xvar = Xvar + Val(Mid(Testtest, 9, 1)) * 2
        SlutCiffer = Val(Mid(Testtest, 10, 1))
        Resultat = 11 - (Xvar Mod 11)
    End If
       
    If Resultat = 11 Then
        Resultat = 0
    End If
   
    If Resultat <> SlutCiffer Then
        MsgBox "Forkert CPR-nummer"
    End If

End Sub
ebea Ekspert
23. maj 2020 - 23:23 #1
anne_n_d Novice
23. maj 2020 - 23:40 #2
Desværre, men den virker ikke :(
supertekst Ekspert
23. maj 2020 - 23:47 #3
Sub ny()
    Dim CPRtest
    Dim Resultat
    Dim SlutCiffer
    Dim Xvar
   
   
    Testtest = Worksheets("Hjem").Range("A6").Value    '<<-- rettet fra F5-->A6
   
    If (Worksheets("Hjem").Range("A6").Value <> "") Then
   
        Xvar = Val(Mid(Testtest, 1, 1)) * 4
        Xvar = Xvar + Val(Mid(Testtest, 2, 1)) * 3
        Xvar = Xvar + Val(Mid(Testtest, 3, 1)) * 2
        Xvar = Xvar + Val(Mid(Testtest, 4, 1)) * 7
        Xvar = Xvar + Val(Mid(Testtest, 5, 1)) * 6
        Xvar = Xvar + Val(Mid(Testtest, 6, 1)) * 5
        Xvar = Xvar + Val(Mid(Testtest, 7, 1)) * 4
        Xvar = Xvar + Val(Mid(Testtest, 8, 1)) * 3
        Xvar = Xvar + Val(Mid(Testtest, 9, 1)) * 2
        SlutCiffer = Val(Mid(Testtest, 10, 1))
        Resultat = 11 - (Xvar Mod 11)
    End If
       
    If Resultat = 11 Then
        Resultat = 0
    End If
   
    If Resultat <> SlutCiffer Then
        MsgBox "Forkert CPR-nummer"
    End If

End Sub
store-morten Ekspert
23. maj 2020 - 23:48 #4
Står dit cpr.nr uden mellemrum og - ?
supertekst Ekspert
23. maj 2020 - 23:49 #5
Hvis foranstillet 0 i CPR - så 'foran 0
anne_n_d Novice
24. maj 2020 - 00:05 #6
SuperTekst, tak for dit svar.

har prøvet, den kører, men resultatet kommer ikke frem. DVS Forkert eller ikke forkert.
den skal indsættes i celle F5, har skrevet nedenstående
Hvad jeg mangler så? Kan ikke finde ud af

Sub ny()
    Dim CPRtest
    Dim Resultat
    Dim SlutCiffer
    Dim Xvar
   
   
    Testtest = Worksheets("Hjem").Range("A6").Value   
    Resultat = Worksheets("Hjem").Range("F5").Value
   
    If (Worksheets("Hjem").Range("A6").Value <> "") Then
   

    Xvar = Val(Mid(Testtest, 1, 1)) * 4
        Xvar = Xvar + Val(Mid(Testtest, 2, 1)) * 3
        Xvar = Xvar + Val(Mid(Testtest, 3, 1)) * 2
        Xvar = Xvar + Val(Mid(Testtest, 4, 1)) * 7
        Xvar = Xvar + Val(Mid(Testtest, 5, 1)) * 6
        Xvar = Xvar + Val(Mid(Testtest, 6, 1)) * 5
        Xvar = Xvar + Val(Mid(Testtest, 7, 1)) * 4
        Xvar = Xvar + Val(Mid(Testtest, 8, 1)) * 3
        Xvar = Xvar + Val(Mid(Testtest, 9, 1)) * 2
        SlutCiffer = Val(Mid(Testtest, 10, 1))
        Resultat = 11 - (Xvar Mod 11)
    End If
       
    If Resultat = 11 Then
        Resultat = 0
    End If
   
    If Resultat <> SlutCiffer Then
        MsgBox "Forkert CPR-nummer"
    End If

End Sub
anne_n_d Novice
24. maj 2020 - 00:06 #7
meningen er jo, at CPR nr fra Celle "A6" skal testet, og resultatet dvs. er den forkert eller gyldigt CPRnr skal indsættes i celle F5
store-morten Ekspert
24. maj 2020 - 00:45 #8
Prøv, uden garanti:
Sub TestCPR()
Dim txtRegistrantCPR As String
Dim Xvar As Long
Dim SlutCiffer As Long
Dim Resultat As Long

txtRegistrantCPR = Worksheets("Hjem").Range("A6").Value

If 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
        Resultat = 0
    End If
    If Resultat = SlutCiffer Then
        Worksheets("Hjem").Range("F5") = "Gyldigt"
    Else
        Worksheets("Hjem").Range("F5") = "Forkert"
    End If
    Exit Sub
End If
Worksheets("Hjem").Range("F5") = ""
End Sub
store-morten Ekspert
24. maj 2020 - 01:08 #9
Denne kan teste:
xxxxxx-xxxx
xxxxxx xxxx
xxxxxxxxxx
Sub TestCPR()
Dim Cpr1 As String, Cpr2 As String, txtRegistrantCPR As String
Dim Xvar As Long
Dim SlutCiffer As Long
Dim Resultat As Long

Cpr1 = Replace(Worksheets("Hjem").Range("A6"), "-", "")
Cpr2 = Replace(Cpr1, " ", "")

txtRegistrantCPR = Cpr2

If 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
        Resultat = 0
    End If
    If Resultat = SlutCiffer Then
        Worksheets("Hjem").Range("F5") = "Gyldigt"
    Else
        Worksheets("Hjem").Range("F5") = "Forkert"
    End If
    Exit Sub
End If
Worksheets("Hjem").Range("F5") = ""
End Sub
Jan K Ekspert
24. maj 2020 - 15:50 #10
Var opmærksom på at Modulus 11 tjek ikke virker på cpr-numre udstedt efter 2007, så her kan du få en falsk negativ.
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

Opret Preview

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





Premium
Bankdata efter hård kritik af it-sikkerheden fra Finanstilsynet: Vi kan godt genkende kritikken
Interview: Bankdata kan godt nikke genkendende til den række af kritik-punkter, som Finanstilsynet retter mod selskabets it-sikkerhed. Men der er en god forklaring, mener compliance-direktør Lene Weldum.
Computerworld
Spotify på vej med kæmpe satsning: Vil være mere end blot en musikstreamingtjeneste
Svenske Spotify er klar med en række nyheder, der rækker længere end blot lyd.
CIO
Der findes ikke noget vigtigere for din virksomhedskultur end psychological safety
Klumme: Forskningen er entydig: Vidensarbejde er mere effektiv, når du tør stille spørgsmål, rejse kritik og indrømme fejl helt uden frygt for at blive straffet eller gjort til grin. Hvis du ikke har fokus på denne del af din virksomhedskultur, så lever din virksomhed og dine medarbejdere ikke op til deres fulde potentiale.
Job & Karriere
IBM Danmark trækker tilbud om frivillige fratrædelser tilbage for stort antal ansatte: "IBM har taget røven på sine ansatte"
Som led i IBM Danmarks store fyringsrunde fik 130 ansatte grønt lys til at forlade selskabet på en frivillig fratrædelsesordning. Men nu har IBM Danmark trukket det oprindelige tilbud tilbage for størstedelen af de ansatte.
White paper
Kunsten at navigere i en tilpasningsøkonomi
Evnen til at tilpasse sig en verden i konstant forandring bliver afgørende for virksomhedens mulighed for at vækste i fremtiden. Ét af de finansielle håndtag du kan skrue på, er en hel eller delvis outsourcing af it-driften. I e-bogen ”Kunsten at navigere i en tilpasningsøkonomi” får du viden om, hvordan din virksomhed kan bruge tilpasningsøkonomi til at håndtere fremtidens krav til it. Vi spørger blandt andet: - Kan din virksomhed skalere og tilpasse sin digitale kapacitet og økonomi? - Har dine kunder tillid til, at du har de skarpeste it-løsninger? - Ville I kunne styrke forretningen ved at give jeres it mere fokus? - Kan I få øget funktionalitet til samme pris? Vi fokuserer på risiko, økonomi, fokus og valg af it-partner, som er fire opmærksomhedspunkter du skal have styr på for at lykkes med at tilpasse virksomheden til at modstå forandringerne i verden.