Avatar billede PBChristensen Juniormester
14. juni 2012 - 14:15 Der er 4 kommentarer og
1 løsning

Utrolig stor fil -> Lang tid for makrokørsel

Hej eksperter...

Jeg har lavet en lille VBA-makro, som arbejder på 3 ark. På det første ark er der omkring 500 kunder. Via autofilter, har jeg et udvalg af kunder tilbage, som jeg vil have over i en udskriftsfil, dog på 2 linier pr. kunde.

VBA kopierer altså alle synlige rækker fra ark "Kundeliste" og indsætter i et ekstra ark "Liste". Her indsætter jeg en ekstra linie imellem hver kunde, da jeg ellers ikke kan få det til at fungere, da det sidste ark "Udskrift" bliver til via kæde.

Men... en makrokørsel tager 2 lange og 2 brede, og filen fylder mere end 16mb. Hvordan kan det være?

Her er min kode:

Sub Makro1()
'
' Makro1 Makro
'

'
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Sheets("Liste").Cells.ClearContents

Sheets("Kundeliste").Select


ActiveSheet.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy

Sheets("Liste").Select
Range("a1").Select: Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'Select last row in worksheet.
    Selection.End(xlDown).Select
   
    Do Until ActiveCell.Row = 1
        'Insert blank row.
        ActiveCell.EntireRow.Insert shift:=xlDown
        'Move up one row.
        ActiveCell.Offset(-1, 0).Select
    Loop

Sheets("Udskrift").Select
Range("A3:G3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents

numRows = Sheets("Kundeliste").UsedRange.Columns(1).SpecialCells(xlCellTypeVisible).Count
numRows = numRows * 2

Range("A1:G2").Select
Selection.AutoFill Destination:=Range(Cells(1, 1), Cells(numRows, 7)), Type:=xlFillValues

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
Avatar billede supertekst Ekspert
14. juni 2012 - 14:47 #1
Hvordan skal "Udskrift" se ud i forhold til Liste?
Avatar billede PBChristensen Juniormester
15. juni 2012 - 09:17 #2
Jeg tror at jeg 'går over åen efter vand' i denne makro - jeg vil i bund og grund bare have at autofilteret skal gengives på en pæn udskrift, hvor hver kunde kommer ud på 2 linier...

Kan jeg sende et eksemplar af filen?
Avatar billede supertekst Ekspert
15. juni 2012 - 10:12 #3
Det er du velkommen til - @-adresse under min profil..
Avatar billede PBChristensen Juniormester
15. juni 2012 - 14:31 #4
Her er koden blevet noget mere optimeret, men problemet med størrelsen af filen (og deraf hastigheden) må jeg indrømme, at det var supertekst der hjalp mig.... ved endnu ikke hvordan :)

Smid et svar....

Sub Makro1()
'
' Makro1 Makro
'

'
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Sheets("Liste").Cells.ClearContents

Sheets("Kundeliste").Select
ActiveSheet.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy

Sheets("Liste").Select
Range("a1").Select: Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False

'Select last row in worksheet.
    Selection.End(xlDown).Select
   
    Do Until ActiveCell.Row = 1
        'Insert blank row.
        ActiveCell.EntireRow.Insert Shift:=xlDown
        'Move up one row.
        ActiveCell.Offset(-1, 0).Select
    Loop

Sheets("Udskrift").Select

    Rows("5:5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp

Range("A3:G3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents

Dim numRows As Variant

numRows = Sheets("Kundeliste").UsedRange.Columns(1).SpecialCells(xlCellTypeVisible).Count
numRows = (numRows * 2) - 2

Range("A1:G4").Select
Selection.AutoFill Destination:=Range(Cells(1, 1), Cells(numRows, 7)), Type:=xlFillFormats

Range("A1:G2").Select
Selection.AutoFill Destination:=Range(Cells(1, 1), Cells(numRows, 7)), Type:=xlFillValues

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
Avatar billede supertekst Ekspert
15. juni 2012 - 14:32 #5
Kopierede de enkelte ark til en ny fil - derefter en kopi af VBA-koden fra det oprindelige module1, efter at have oprettet et modul i den nye fil.
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