Avatar billede mercu Nybegynder
27. oktober 2009 - 16:44 Der er 8 kommentarer

"overflow" ? Hvad er der i vejen?

Jeg sidder og laver en opgave, som skal teste om CPR-NR passer via modulus 11 metoden.

Jeg har følgende kode, men den melder overflow, jeg kan ikke selv finde problemet. Håber I kan hjælpe

Sub OBL_Opg2()

Dim i As Integer
Dim AR As Integer
Dim CPR As String
Dim CPR1 As String
Dim NR As Integer

Dim ark1 As Range
Dim ark2 As Range

Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim E As Integer
Dim F As Integer
Dim G As Integer
Dim H As Integer
Dim ii As Integer
Dim j As Integer

Dim TestSum As Long



Set ark1 = ThisWorkbook.Sheets("Medlemskartotek").Range("A2")
Set ark2 = ThisWorkbook.Sheets("Sheet1").Range("A2")

AR = ark1.CurrentRegion.Rows.Count

With ark1

For i = 1 To AR - 1

    CPR = .Offset(i, 0)
     
        a = Left(CPR, 1)
        b = Left(CPR, 2)
        c = Left(CPR, 3)
        d = Left(CPR, 4)
        E = Left(CPR, 5)
        F = Left(CPR, 6)
        G = Left(CPR, 8)
        H = Left(CPR, 9)
        ii = Left(CPR, 10)
        j = Left(CPR, 11)
       

TestSum = (4 * a + 3 * b + 2 * c + 7 * d + 6 * E + 5 * F + 4 * G + 3 * H + 2 * ii + j)
   
If (TestSum Mod 11) <> 0 Then NR = NR + 1
ark2.Offset(NR, 0) = CPR



Next
End With


End Sub
Avatar billede arne_v Ekspert
27. oktober 2009 - 16:49 #1
Hvorfor?

mod 11 reglen kan ikke bruges laengere !
Avatar billede supertekst Ekspert
27. oktober 2009 - 16:57 #2
Problemet vedr. dine "Left" - prøv lige at checke syntaksen for Left

        a = Left(CPR, 1)
        b = Mid(CPR, 2, 1)
        c = Mid(CPR, 3, 1)
        d = Mid(CPR, 4, 1)
        E = Mid(CPR, 5, 1)
        F = Mid(CPR, 6, 1)
        G = Mid(CPR, 8, 1)
        H = Mid(CPR, 9, 1)
        i = Mid(CPR, 10, 1)
        j = Right(CPR, 1)
Avatar billede michael_stim Ekspert
27. oktober 2009 - 17:11 #3
Men se hvad Arne skriver. Den metode fungerer ikke længere. Det gør at visse mennesker ikke kan bruge programmet.
Avatar billede michael_stim Ekspert
27. oktober 2009 - 17:13 #4
Avatar billede mercu Nybegynder
27. oktober 2009 - 17:29 #5
Det er en opgave jeg har fået stillet fra skolen, og det står i opgave formuleringen det ska være mod 11
Avatar billede mercu Nybegynder
27. oktober 2009 - 17:40 #6
Jeg rettede min kode så den er følgende, men nu står den bare og kører? Har jeg fået lavet en uendelig løkke?

Sub OBL_Opg2()

Dim i As Integer
Dim AR As Integer
Dim CPR As String
Dim CPR1 As String
Dim NR As Integer

Dim ark1 As Range
Dim ark2 As Range

Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim E As Integer
Dim F As Integer
Dim G As Integer
Dim H As Integer
Dim ii As Integer
Dim j As Integer

Dim TestSum As Long

    a = Left(CPR, 1)
        b = Mid(CPR, 2, 1)
        c = Mid(CPR, 3, 1)
        d = Mid(CPR, 4, 1)
        E = Mid(CPR, 5, 1)
        F = Mid(CPR, 6, 1)
        G = Mid(CPR, 8, 1)
        H = Mid(CPR, 9, 1)
        i = Mid(CPR, 10, 1)
        j = Right(CPR, 1)

Set ark1 = ThisWorkbook.Sheets("Medlemskartotek").Range("A2")
Set ark2 = ThisWorkbook.Sheets("Sheet1").Range("A2")

AR = ark1.CurrentRegion.Rows.Count

With ark1

For i = 1 To AR - 1

    CPR = .Offset(i, 0)
   

     

TestSum = (4 * a) + (3 * b) + (2 * c) + (7 * d) + (6 * E) + (5 * F) + (4 * G) + (3 * H) + (2 * ii) + (j)
 
If (TestSum Mod 11) <> 0 Then NR = NR + 1
ark2.Offset(NR, 0) = CPR

end if

Next
End With


End Sub
Avatar billede bak Forsker
31. oktober 2009 - 15:57 #7
Jeg har ikke testet, men kan se et par fejl
Du skal have skilt alle crpnumre ad, så sektionen med left, mid og right skal flyttes og dim if-sætning til sidst driller også.

Sub OBL_Opg2()

    Dim i As Integer
    Dim AR As Integer
    Dim CPR As String
    Dim CPR1 As String
    Dim NR As Integer

    Dim ark1 As Range
    Dim ark2 As Range

    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim E As Integer
    Dim F As Integer
    Dim G As Integer
    Dim H As Integer
    Dim ii As Integer
    Dim j As Integer

    Dim TestSum As Long



    Set ark1 = ThisWorkbook.Sheets("Medlemskartotek").Range("A2")
    Set ark2 = ThisWorkbook.Sheets("Sheet1").Range("A2")

    AR = ark1.CurrentRegion.Rows.Count

    With ark1

        For i = 1 To AR - 1

            CPR = .Offset(i, 0)
            a = Left(CPR, 1)
            b = Mid(CPR, 2, 1)
            c = Mid(CPR, 3, 1)
            d = Mid(CPR, 4, 1)
            E = Mid(CPR, 5, 1)
            F = Mid(CPR, 6, 1)
            G = Mid(CPR, 8, 1)
            H = Mid(CPR, 9, 1)
            i = Mid(CPR, 10, 1)
            j = Right(CPR, 1)

            TestSum = (4 * a) + (3 * b) + (2 * c) + (7 * d) + (6 * E) + (5 * F) + (4 * G) + (3 * H) + (2 * ii) + (j)

            If (TestSum Mod 11) <> 0 Then
                NR = NR + 1
                ark2.Offset(NR, 0) = CPR
            End If

        Next
    End With
End Sub
Avatar billede mercu Nybegynder
13. december 2009 - 19:37 #8
du må gerne skrive et svar så der kan tildeles 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
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