Avatar billede familienriis Nybegynder
08. marts 2008 - 10:29 Der er 6 kommentarer

Rette i kode MOD BETALING

ER DER NOGEN DER VIL HJÆLPE MIG MOD BETALING?

JEg har en eksisterende kode som I hajer løbende har hjulpet mig med. Den laver en mindre fejl pt.

Denne fejl er jeg næsten sikker på at jeg har lokaliseret. Men jeg kan ikke finde uda af rette den. Jeg har markeret de 2 steder der laver fejlen neden for og igen i selve koden.


Det den første stump gør at fange det nr. der står i "I,2" og gemmer det som "Kontonr"
Det kontonr. sætter den så ind i det lille stykke kode nedenfor.
Det er fint så længe der ikke står flere forskellige tal i (I,2)

Hvis der står forskellige tal, husker den kun den første og sætter det samme tal ind igen og igen.

"Kontonr" skal altså være forskellig for hver gang der står noget i (I,2), men det kan jeg ikke hitte ud af.

Er der nogen der kan forstå / spotte mig problem.

JEG SENDER SELVFØLGELIG GERNE MIT ARK TIL JER SÅ I KAN SE HVOR FEJLEN ER. DEN ER NEMLIG MEGET LET AT SPOTTE; NÅR FØRST I FÅR ARKET



'***OBS****OBS****OBS***OBS*********************************

                        If Tjek(I, 1) = Tjek(Y, 2) Then
                        OK = True
                            If Tjek(I, 2) <> "" Then
                            Kontonr = Data(I, 1)
                            End If

'***OBS****OBS****OBS***OBS*********************************



'***OBS****OBS****OBS***OBS*********************************

Data(NR + X, 1) = Kontonr '****** SAMLER PÅ DET KONTONR SOM STYRER

'***OBS****OBS****OBS***OBS*********************************





Sub Dan_regnskab_specifikation2()
Dim Data As Variant, I As Integer, X As Integer, SumPoster As Variant, ErDerSumposter As Boolean, RK As Integer
    Dim NR As Integer, Antal() As Variant, T As Integer, N As Integer, RækkeStart As Integer, OV As Variant, Tid As Date
    Dim MinRækker As Integer

    ActiveSheet.PageSetup.PrintArea = ""
    ErDerSumposter = False
    RK = 0
    Application.Calculation = xlCalculationManual    ' stopper automatisk udregning af formler
    Application.ScreenUpdating = False
    With Worksheets("Konto")
        MinRækker = Worksheets("stam").Range("antal_linier_for_autoskjul")    ' Minimum rækker excl overskrift og total
        ' Tjekker om der valgt overskrifter, det skal være det samme i N og O kolonnen
        Data = .Range("A5:P" & .Range("B65536").End(xlUp).Row + 50)  ' indlæser kontoplan i variablen Data + 50 tomme rækker

        Tjek = .Range("N5:O" & .Range("B65536").End(xlUp).Row)
        .Range("C200").End(xlUp).Value = WorksheetFunction.Sum(.Range("C1:C200")) * -1
        .Range("E200").End(xlUp).Value = WorksheetFunction.Sum(.Range("E1:E200")) * -1
        With Worksheets("overskrift")    'tilrettes til ark med overskrifter
            Overskrifter = .Range("A2:C" & .Range("B200").End(xlUp).Row)
        End With
        SidsteData = UBound(Data)
        For I = 1 To UBound(Tjek)
            OK = False
            For Y = 1 To UBound(Tjek)
                If Not IsEmpty(Tjek(I, 1)) Then
        '***OBS****OBS****OBS***OBS*********************************
                        If Tjek(I, 1) = Tjek(Y, 2) Then
                        OK = True
                            If Tjek(I, 2) <> "" Then
                            Kontonr = Data(I, 1)
                            End If
        '***OBS****OBS****OBS***OBS*********************************
                    Exit For
                    End If
                Else
                    OK = True
                End If
            Next
            If Not OK Then
                Application.ScreenUpdating = True
                Application.Calculation = xlCalculationManual    ' starter automatisk udregning af formler
                MsgBox "Du har glemt at angive nr i kolonne O i linien(" & .Range("O" & I + 4).Offset(0, -14) & " " & .Range("O" & I + 4).Offset(0, -13) & ")"

                Exit Sub
            End If
        Next
    End With
    With Worksheets("overskrift")    'tilrettes til ark med overskrifter
        Overskrifter = .Range("A2:C" & .Range("B200").End(xlUp).Row)
    End With

    K1 = 0    ' nulstiller antal samledata
    For I = 1 To UBound(Data)
        If IsEmpty(Data(I, 7)) And IsEmpty(Data(I, 10)) Then
            If RK = 0 Then RK = I    ' første række der er ledig i Variablen Data
            For X = 1 To UBound(Data, 2)
                Data(I, X) = Empty    ' sletter data der ikke har et specnr
            Next
        Else
            Data(I, 3) = Data(I, 3) * Data(I, 9)    ' ganger beløbet
            If IsEmpty(Data(I, 10)) Then    ' hvis faktor for sidste år er tom, bruges dette år
                Data(I, 5) = Data(I, 5) * Data(I, 9)    ' ganger beløbet Sidste år med faktor i år
            Else
                Data(I, 5) = Data(I, 5) * Data(I, 12)    ' ganger beløbet Sidste år med faktor Sidste år
            End If
        End If
    Next
   
    SidsteData = RK - 1
    NR = RK
    For I = 1 To SidsteData
        If Not IsEmpty(Data(I, 7)) And Not IsEmpty(Data(I, 10)) Then
            For X = 1 To UBound(Data, 2)
                Data(NR, X) = Data(I, X)
            Next
            Data(NR, 3) = 0
            Data(I, 5) = 0
            Data(NR, 7) = Data(I, 10) * 100
            If Not IsEmpty(Data(I, 15)) Then Data(NR, 15) = Data(I, 15) * 100    '  specnr* 100, på dem der skal adskilles, for sidste år

            Data(NR, 14) = Data(I, 14) * 100    '  specnr* 100, på dem der skal adskilles, for sidste år

            NR = NR + 1
        End If
        If Not IsEmpty(Data(I, 16)) Then Data(I, 2) = Data(I, 16) & " "
    Next
    Sheets.Add
    ActiveSheet.Name = "TEMP"    ' bruger et midlertidig ark til sortering
    Range("A1").Resize(UBound(Data, 1), UBound(Data, 2)) = Data
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Key2:=Range("A1") _
                , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                  False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
                                                                              :=xlSortNormal
    Data = Range("A1").Resize(NR + 50, UBound(Data, 2))
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    SidsteData = NR
    For I = 1 To SidsteData

        If Not IsEmpty(Data(I, 15)) Then
            K1 = K1 + 1    ' tæller antal samledata
            ReDim Preserve Antal(K1)
            Antal(K1) = Data(I, 15)
            ErDerSumposter = True
        End If
    Next
   
    If ErDerSumposter Then
        For X = 1 To UBound(Antal)
            For I = 1 To SidsteData
                If Antal(X) = Data(I, 14) Then    ' passer sammentællingskoden, så fortsæt
                    If Not IsEmpty(Data(I, 16)) Then    ' er der special overskrift
                        Data(NR + X, 2) = Data(I, 16) & " "    ' special Overskrift
                    ElseIf Not IsEmpty(Data(I, 15)) Then    ' eller er der et tal ud for en anden
                        Data(NR + X, 2) = Data(I, 2)      ' normal Overskrift
                    End If
                   
                    '***OBS****OBS****OBS***OBS*********************************
                    Data(NR + X, 1) = Kontonr '****** SAMLER PÅ DET KONTONR SOM STYRER
                    '***OBS****OBS****OBS***OBS*********************************
                   
                    Data(NR + X, 3) = Data(NR + X, 3) + Data(I, 3)    ' summere dette år
                    Data(NR + X, 5) = Data(NR + X, 5) + Data(I, 5)    ' summere sidste år
                    Data(NR + X, 7) = Data(I, 7)    ' specnr
                    For T = 1 To UBound(Data, 2)
                        Data(I, T) = Empty    ' sletter data efter summering
                    Next
                End If
            Next
        Next
    End If

    For X = 1 To UBound(Data)
        If Data(X, 7) > 100 Then Data(X, 7) = Data(X, 7) / 100        ' Retter specnr, på dem der skal adskilles, for sidste år
    Next
    Sheets.Add    ' bruger et midlertidig ark til sortering
    ActiveSheet.Name = "TEMP1"
    Range("A1").Resize(UBound(Data, 1), UBound(Data, 2)) = Data
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Key2:=Range("A1") _
                , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                  False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
                                                                              :=xlSortNormal
    Application.DisplayAlerts = False
    Data = Range("A1:G" & Range("B65536").End(xlUp).Row)
    ActiveSheet.Delete
    Application.DisplayAlerts = True

    Worksheets("spec1").Activate
    With Worksheets("spec1")
        Cells.Rows.Hidden = False
        ActiveSheet.DisplayPageBreaks = True
        For I = 2 To .Range("B1000").End(xlUp).Row
        Rows(I).PageBreak = xlPageBreakNone    ' fjerner sideskift
'          Rows(I).PageBreak = xlNone
          Next
        ActiveSheet.DisplayPageBreaks = False

        SidsteData = UBound(Data)
        RækkeStart = 4
        Application.ScreenUpdating = False

        For I = 1 To UBound(Overskrifter)    'Overskrifter løbes igennem

            For J = 1 To SidsteData    'antal poster = kriterier tælles op

                If Data(J, 7) = Overskrifter(I, 1) Then

                    If Data(J, 3) <> 0 Or Data(J, 5) <> 0 Then
                        K = K + 1
                    End If
                End If
            Next J

            If K > 0 Then
                ReDim Poster(K - 1, 7)
                K = 0

                For J = 1 To SidsteData    'Kontoplan løbes igennem
                    If Data(J, 7) > Overskrifter(I, 1) Then Exit For
                    If Data(J, 7) = Overskrifter(I, 1) Then

                        If Data(J, 3) <> 0 Or Data(J, 5) <> 0 Then
                            Poster(K, 1) = Data(J, 2)    'tekst/kontonavn
                            Poster(K, 3) = Data(J, 3)    'beløb i år
                            Poster(K, 5) = Data(J, 5)    'beløb sidste år
                            Poster(K, 7) = Data(J, 1)    'kontonr.
                            K = K + 1
                            totaliår = totaliår + Data(J, 3)
                            totalsidsteår = totalsidsteår + Data(J, 5)

                        End If
                    End If
                Next J
           
            End If
            OV = Worksheets("spec1").Range("B6:B" & Worksheets("spec1").Range("B1000").End(xlUp).Row)
            For Y = UBound(OV) To 1 Step -1
                If OV(Y, 1) = Overskrifter(I, 2) And .Cells(Y + 5, "I") = Overskrifter(I, 1) Then
                    RækkeStart = Y + 5    '<<<< Finder rækkenr. for overskrift >>>>
                    Exit For
                End If
                If OV(Y, 1) = Overskrifter(I, 2) & " i alt " And .Cells(Y + 5, "I") = Overskrifter(I, 1) Then Rækkeslut = Y + 5  '<<<< Finder rækkenr. for overskrift i alt >>>>
            Next

            If Rækkeslut - RækkeStart > 1 Then
                .Rows(RækkeStart + 1 & ":" & Rækkeslut - 1).Delete
            End If

            '<<<< indsætter rækker og data og totaler mellem overskrift og i alt >>>>
            If K > 0 Then

                .Rows(RækkeStart + 1 & ":" & RækkeStart + K).Insert Shift:=xlShiftDown
                .Range("A" & RækkeStart + 1).Resize(K, 6) = Poster
                .Range("A" & RækkeStart + 1).Resize(K, 6).Font.Bold = False
                With Range("B" & RækkeStart + 1).Resize(K + 1, 1)
                    .NumberFormat = "@*."
                    .HorizontalAlignment = xlDistributed
                End With
                .Cells(RækkeStart + 1 + K, 4) = totaliår
                .Cells(RækkeStart + 1 + K, 6) = totalsidsteår
                If UCase(Overskrifter(I, 3)) = "NEJ" Then
                    .Rows(RækkeStart - 1 & ":" & RækkeStart + K + 2).Hidden = True

                End If
                'Den må altså ikke skjule grupperne 1-13 og 69-74, da
                Select Case Overskrifter(I, 1)
                Case 1 To 13, 69 To 74
                Case Else
                    If K + 2 <= MinRækker + 2 Then
                        .Rows(RækkeStart - 1 & ":" & RækkeStart + K + 2).Hidden = True
                    End If
                End Select

            Else
                .Cells(RækkeStart + 1 + K, 4) = 0
                .Cells(RækkeStart + 1 + K, 6) = 0
                .Rows(RækkeStart - 1 & ":" & RækkeStart + 2).Hidden = True
            End If

            '<<<< Nulstiller totaler og tæller inden næste overskrift hentes ind >>>>
            K = 0: totaliår = 0: totalsidsteår = 0
            Application.StatusBar = "Danner SPECIFIKATION  " & I & " af " & UBound(Overskrifter)

        Next I
       
Application.Calculation = xlCalculationManual    ' stopper automatisk udregning af formler
Calculate
        ActiveSheet.DisplayPageBreaks = True
        Application.ScreenUpdating = True    ' slår opdatering af skærmen til igen
    End With
End Sub
Avatar billede be_nice Juniormester
08. marts 2008 - 10:43 #1
Tillader mig at henviser til http://expfaq.dk/:
Må man udlove noget ud over points på Eksperten?
Det er tilladt at udlodde andre præmier end point for svar. Det kan være penge. I så fald må man ikke udlodde point.
Det er brugernes eget ansvar at afgøre, om svarene er korrekte og betalingen gennemføres. Eksperten kan ikke drages til ansvar for hverken løsning eller betaling. Eksperten vil kun blande sig i spørgsmål, der handler om point.
Går du dog direkte efter penge som betaling, kan du alternativt bruge Sharksforum.com, som Ekspertens Admin også står bag.
/Be_Nice
Avatar billede familienriis Nybegynder
08. marts 2008 - 10:55 #2
Hej Be_nice

Tak for info.
Havde ikke lige tænkt over kombinationen af points og penge.

Mit problem er ikke en helt ny kode, men kun en rettelse og jeg håbede derfor at jeg kunne få hjælp inde på experten. Der er jo temmelig mange der er sindsygt meget styr på vba.

Jeg vil skyde på mit problem er løst af en af "hajerne" rimelig hurtigt.
Håber at jeg selv kan høste pointene selv bagefter og nøjes med at betale for rettelserne. På den måde håber jeg at jeg ikke har overtrådt reglerne for meget herinde.
Avatar billede be_nice Juniormester
08. marts 2008 - 11:01 #3
Hej
Som udgangspunkt mener jeg at man altid bør forsøge at få løst et givent problem ved at udlodde point - skulle det vise sig at være umuligt ad den vej, så kan man evt. forsøge sig med at betale sig fra det.
Så spørgsmålet er om du burde have startet med flere point - husk max. 200 point for et og samme spørgsmål - og skulle dette ikke virke, kan du gå efter en betalingsløsning iht. vejledningen fra eksperten.
/Be_Nice
Avatar billede familienriis Nybegynder
08. marts 2008 - 11:14 #4
Jeg har prøvet om jeg kunne få lavet rettelsen med point.
Min pointkonto var helt i bund da jeg forsøgte så det var et noget "fesen" antal point jeg udlovede. :-(

Men der var desværre ikke nogen der kunne hjælpe, dengang.

http://www.eksperten.dk/spm/820884

JEg er udemærket klar over at koden ser noget vild ud, men så vidt jeg selv kan gennemskue, så er det en mindre rettelse jeg går efter, og derfor forsøgte jeg igen mod betaling.

Det er vist næsten det eneste spørgsmål jeg ikke har kunnet få hjælp til herinde på denne side.

Det vildt hvad I kan finde udaf i vba på denne side :-)
Avatar billede bak Forsker
08. marts 2008 - 12:01 #5
Jeg har endnu ikke set nogen spørgsmål, der er blevet fravalgt pga. lille pointantal.
Generelt er folk herinde ligeglade med antallet af point, men går mere efter om opgaven er godt/klart defineret eller om der noget udfordring i det.
Jo bedre og  klarere opgaven er stillet, jo hurtige får man generelt hjælp.

du må gerne sende arket til mig, men jeg vil ikke love at jeg fikser det idag :-)
tommybak snabela gmail.com
Avatar billede familienriis Nybegynder
18. marts 2008 - 20:41 #6
Hej Bak

Tak for indsatsen.
Har du et svar så vi kan lukke spørgsmålet. :-)
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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