Avatar billede familienriis Nybegynder
17. maj 2007 - 19:30 Der er 3 kommentarer og
1 løsning

Hjælp til forbedring af en eksisterende vba kode

Jeg har idag en kode der henter nogle tal fra et ark og sætter dem ind i et andet ark i nogle forskellige grupper som bliver defineret i det første ark.

Koden virker rigtig fin, men jeg har brug for at få koden udviddet/forbedret, men kan ikke selv finde ud af det.

Hvad det er koden præsist gør, er temmelig svær at forklare uden at have et direkte eksempel.
Jeg har derfor tænkt mig at sende en fil med koden og tallene i, så man kan se hvad det er jeg gerne vil have.

Er der nogen der har mod på at hjælpe mig med at forbedre koden?
Avatar billede supertekst Ekspert
18. maj 2007 - 09:07 #1
Du er velkommen til at sende filen til: pb@supertekst-it.dk - så kan jeg da gøre et forsøg.
Avatar billede familienriis Nybegynder
18. maj 2007 - 21:53 #2
mail sendt.
Det bliver spændende at se om det kan lade sig gøre :-)
Avatar billede supertekst Ekspert
20. maj 2007 - 14:28 #3
Sub dan_specifikationer()
    Dim sFlag As Integer, sumIår As Single, sumSår As Single, sumTekst As String
   
    Dim poster()
    Dim I, J, K, Flyt As Boolean
    Dim Rng As Range
   
    sFlag = 0
   
    Application.ScreenUpdating = False
    Worksheets("spec1").Activate
    Cells.Rows.Hidden = False
    Cells.PageBreak = xlPageBreakNone

    With Worksheets("Konto")    'tilrettes til ark med data
        data = .Range("A2:O" & .Range("B7000").End(xlUp).Row + 1)
        .Range("C7000").End(xlUp).Value = WorksheetFunction.Sum(.Range("C1:C6223")) * -1
        .Range("E7000").End(xlUp).Value = WorksheetFunction.Sum(.Range("E1:E6223")) * -1
    End With

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

    sidstedata = UBound(data)
    rækkestart = 1

    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) Or data(J, 10) = 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
               
Rem Er der værdi <> 0 i kolonne C eller E
                        If data(J, 3) <> 0 Or data(J, 5) <> 0 Then
Rem Er der Nr i kolonne N / O
EfterBrud:
                            If data(J, 14) <> "" Then
                                sFlag = data(J, 14)
                                sumIår = 0
                                sumSår = 0
                                sumTekst = "??"
                               
                                While sFlag = data(J, 14)
                                    sumIår = sumIår + (data(J, 3) * data(J, 9))
                                    sumSår = sumSår + (data(J, 5) * data(J, 9))
                                   
                                    totaliår = totaliår + (data(J, 3) * data(J, 9))
                                    totalsidsteår = totalsidsteår + (data(J, 5) * data(J, 9))
                                   
                                    If data(J, 15) <> 0 Then
                                        sumTekst = data(J, 2)
                                    End If
                                   
                                    J = J + 1
                                Wend
Rem brud på "samle-Nr"
                                poster(K, 1) = sumTekst
                                poster(K, 3) = sumIår
                                poster(K, 5) = sumSår
                                K = K + 1
                               
                                GoTo EfterBrud
                            End If

                        'poster(K, 0) = data(J, 1) 'tom
                        poster(K, 1) = data(J, 2)    'tekst/kontonavn
                        poster(K, 3) = data(J, 3) * data(J, 9)    'beløb i år
                        'poster(K, 4) = data(J, 4) 'tomt
                        '************************************* KABBAK *************************************************
                        If data(J, 10) = Empty Or data(J, 7) = data(J, 10) Then
                            poster(K, 5) = data(J, 5) * data(J, 9)    'beløb sidste år
                        Else
                            poster(K, 5) = 0
                        End If
                        '*************************************** KABBAK *************************
                        poster(K, 7) = data(J, 1)    'kontonr.
                        'poster(K, 8) = data(J, 7) 'kontrolkode til specielle beregninger
                        'poster(K, 9) = data(J, 8) 'kode
                        K = K + 1
                        totaliår = totaliår + data(J, 3) * data(J, 9)
                        If data(J, 10) = Empty Or data(J, 7) = data(J, 10) Then totalsidsteår = totalsidsteår + data(J, 5) * data(J, 9)
                    End If
                End If
                '*************************************** KABBAK ***********************************
                If data(J, 10) <> Empty And data(J, 7) <> data(J, 10) Then
                    If data(J, 10) = 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, 5) = data(J, 5) * data(J, 12)  'beløb i år
                            poster(K, 7) = data(J, 1)    'kontonr.
                            poster(K, 3) = 0
                            K = K + 1
                            ' Totaliår = Totaliår + data(J, 3) * data(J, 12)
                            totalsidsteår = totalsidsteår + data(J, 5) * data(J, 12)
                        End If
                    End If

                End If
                '**************************************** KABBAK *************************************************

            Next J
        End If

        'Range("B1").Select
        Range("B" & rækkestart).Select
        sidste = ActiveSheet.Range("B1000").End(xlUp).Row

        '<<<< Finder rækkenr. for overskrift >>>>
        Do
            ActiveCell.End(xlDown).Select
            If ActiveCell.Row > sidste Then Exit Do
        Loop Until ActiveCell.Value = Overskrifter(I, 2)
        rækkestart = ActiveCell.Row

        '<<<< Finder rækkenr. for overskrift i alt >>>>
        Do
            ActiveCell.End(xlDown).Select
            If ActiveCell.Row > sidste Then Exit Do
        Loop Until ActiveCell.Value = Overskrifter(I, 2) & " i alt "
        rækkeslut = ActiveCell.Row

        '<<<< Sletter rækker mellem overskrift og i alt >>>>
        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
        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

    Next I

    Application.ScreenUpdating = True
    Range(Range("F65536").End(xlUp).Address).Select
    Application.ScreenUpdating = False

    For Each pb In Worksheets("spec1").HPageBreaks
        I = pb.Location.Row
        If Rows(I).PageBreak = xlPageBreakAutomatic Then
            If Cells(I, "I") = "" Then
                A = Cells(I, "I").End(xlUp).Row
                Rows(A).PageBreak = xlPageBreakManual
            End If
        End If
    Next pb

    With Worksheets("spec1").HPageBreaks
        I = .Item(.Count).Location.Row
        If Rows(I).PageBreak = xlPageBreakAutomatic Then
            If Cells(I, "I") = "" Then
                A = Cells(I, "I").End(xlUp).Row
                Rows(A).PageBreak = xlPageBreakManual
            End If
        End If
    End With

    Set Rng = Nothing
    Range("A1").Select
    Application.ScreenUpdating = True
    Application.ScreenUpdating = False


 
    Worksheets("spec1").Activate
    Range("a1").Activate
    ''
    '
    '
End Sub
Avatar billede familienriis Nybegynder
20. maj 2007 - 14:41 #4
Takker for nu :-)
Håber at det kan lade sig gøre at få de sidste mangler med, senere :-)
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