Avatar billede hjald8 Nybegynder
17. december 2004 - 08:01 Der er 10 kommentarer og
1 løsning

Optimering af makro - der danner nye ark på grundlag af liste/ark

Hej

Jeg har tidligere fået hjælp til denne makro.

Makroen danner nye ark (kopi af indhold fra et andet ark), samt sætter indhold ind i arkene, udfra en liste.

Den tager meget lang tid at gennemføre!!!!!!!

Jeg mener det bla skyldes, at i hvert nyt ark defineres sideopsætningen, samt evt at den opdatere hver gang. Måske kan indhold til arkene - sættes smartere ind.

Håber på nogle gode ideer og input!!!

Den ser således ud:

Sub DanArk()
    Application.ScreenUpdating = False
    Sheets("Ark1").Select
    Dim c As Range
    For Each c In Range("B1", Range("B1").End(xlDown))
        Sheets("Ark2").Activate
        Cells.Copy
        Worksheets.Add(after:=Worksheets("Ark2")).Name = c.Value
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1") = c.Offset(0, 1).Value
        Range("B1") = c.Offset(0, 2).Value
        Range("C1") = c.Offset(0, 3).Value
        Range("D1") = c.Offset(0, 4).Value
        Range("E1") = c.Offset(0, 5).Value
        Range("F1") = c.Offset(0, 6).Value
        Range("G1") = c.Offset(0, 7).Value
        Range("H1") = c.Offset(0, 8).Value
        Range("I1") = c.Offset(0, 9).Value
        Range("J1") = c.Offset(0, 10).Value
        Range("K1") = c.Offset(0, 11).Value
        Range("L1") = c.Offset(0, 12).Value
        Range("M1") = c.Offset(0, 13).Value
    With ActiveSheet.PageSetup
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.59)
        .RightMargin = Application.InchesToPoints(0.59)
        .TopMargin = Application.InchesToPoints(1#)
        .BottomMargin = Application.InchesToPoints(1#)
        .PrintArea = "$A$2:$I$45"
    End With
    Range("A2").Select
    Next
    Sheets("Ark2").Activate
    Application.ScreenUpdating = True

    Range("A2").Select
    Sheets("Ark3").Select
End Sub

På forhånd tak for hjælpen.
Avatar billede kabbak Professor
17. december 2004 - 09:23 #1
Sub DanArk()
    Application.ScreenUpdating = False
    Sheets("Ark1").Select
    Dim c As Range
    For Each c In Range("B1", Range("B1").End(xlDown))
        Sheets("Ark2").Activate
        Cells.Copy
        Worksheets.Add(after:=Worksheets("Ark2")).Name = c.Value
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1:M1") = Range(c.Offset(0, 1), c.Offset(0, 13)).Value

With ActiveSheet.PageSetup
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.59)
        .RightMargin = Application.InchesToPoints(0.59)
        .TopMargin = Application.InchesToPoints(1#)
        .BottomMargin = Application.InchesToPoints(1#)
        .PrintArea = "$A$2:$I$45"
    End With

    Range("A2").Select
    Next
    Sheets("Ark2").Activate
    Application.ScreenUpdating = True
    Range("A2").Select
    Sheets("Ark3").Select
End Sub


det er din sideopsætning der tager tid
den kan jeg ikke optimere
Avatar billede kabbak Professor
17. december 2004 - 09:27 #2
Men hvis du kunne pille noget ud af koden, ville det nok hjælpe

eks. på hvad du måske behøver

With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0.59)
        .RightMargin = Application.InchesToPoints(0.59)
        .TopMargin = Application.InchesToPoints(1#)
        .BottomMargin = Application.InchesToPoints(1#)
        .PrintArea = "$A$2:$I$45"
    End With
Avatar billede kabbak Professor
17. december 2004 - 10:12 #3
Jeg har lavet om, så hvis du laver side opsætning og print område i Ark2, kopierer den her hele arket, så kommer opsætningen med automatisk

Sub DanArk()
    Application.ScreenUpdating = False
    Sheets("Ark1").Select
    Dim c As Range
    For Each c In Range("B1", Range("B1").End(xlDown))
        Sheets("Ark2").Select
        Sheets("Ark2").Copy Before:=Sheets(2)
        ActiveSheet.Name = c.Value
        Application.CutCopyMode = False
        Range("A1:M1") = Range(c.Offset(0, 1), c.Offset(0, 13)).Value
    Range("A2").Select
    Next
    Sheets("Ark2").Activate
    Application.ScreenUpdating = True
    Range("A2").Select
    Sheets("Ark3").Select
End Sub
Avatar billede hjald8 Nybegynder
17. december 2004 - 14:25 #4
Hold da op! Tusind tak for input.
Jeg kan desværre ikke nå at arbejde med det i dag.
Jeg kikker på det i morgen.
Jeg vil glæde mig til at kikke på det - det ser godt ud.
Avatar billede hjald8 Nybegynder
18. december 2004 - 11:22 #5
Jeg har testet den sidste. Den fungerer fint ved meget få rækker i Ark1-Kolonne B (under 10). Ved større antal rækker (ca 30) kommer den frem med en debug ved linien -

Sheets("Ark2").Copy Before:=Sheets(2). Fejlmeddelelse: Metoden Copy for klassen worksheet mislykkes.

Rækken/arket den stopper ved har ikke specielle oplysninger eller lign.

Den har ellers en fantastisk hastighed i forhold til før.
Avatar billede kabbak Professor
18. december 2004 - 17:48 #6
har testet med 35 ark, intet problem.
Avatar billede hjald8 Nybegynder
18. december 2004 - 18:59 #7
Læg et svar. Du har været en kanon hjælp.

Jeg kan få den til at virke til ark nr. 37, jeg kan ikke se, hvad der sker. Jeg tror, at jeg må bygge projektmappen op fra bunden igen. Der er noget, der driler.
Avatar billede kabbak Professor
18. december 2004 - 21:26 #8
et svar ;-))
Avatar billede kabbak Professor
19. december 2004 - 08:36 #9
jeg har testet denne med 200 ark, det tager 18 sek.

Sub DanArk()
Application.ScreenUpdating = False
    Sheets("Ark1").Select
    Dim c As Range
    For Each c In Range("B1", Range("B1").End(xlDown))
        Sheets("Ark2").Copy after:=Sheets(2)
        ActiveSheet.Name = c.Value
      Range("A1:M1") = Range(c.Offset(0, 1), c.Offset(0, 13)).Value
    Next
    Application.ScreenUpdating = True
    Sheets("Ark3").Select
End Sub
Avatar billede hjald8 Nybegynder
19. december 2004 - 09:22 #10
Jeg vil kikke på det i dag. Det er jo hektisk med al det julehalløj.
Endnu engang - tak.
Avatar billede kabbak Professor
19. december 2004 - 21:23 #11
tak for 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
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