Avatar billede TheresaD Juniormester
13. juni 2018 - 10:20 Der er 4 kommentarer og
1 løsning

Slet rækker hurtigere

Hej jeg har en makro som sletter rækker i et ark og den virker sådan set som den skal. Jeg har dog et problem, jeg synes den er for langsom. Den bruger ca. 2 min  på at køre makroen igennem på arket. Problemet opstår da den skal køre denne makro på 106 ark (2*106=212min) Det vil sige man min computer er ude af brug i 3,5 time

Koden ser sådan her ud for at slette rækkerne:

Sub DelRow()

Sheets("enhed 6").Select

For Each c In Range("Q1:Q6054")
If Not IsEmpty(c) And c.Value = 0 Then c.Value = True
Next
Range("Q1:Q6054").SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete

Columns("Q:Q").Select
    Selection.Delete shift:=xlToLeft
    Range("A1").Select
   
   
End Sub

Håber der er nogen som har et forslag til hvordan jeg gør denne proces hurtigere :)
Avatar billede finb Ekspert
13. juni 2018 - 11:05 #1
utestet:
For Each c In Range("Q1:Q6054")
  If Not IsEmpty(c) And c.Value = 0 Then 
  Range("Q1:Q6054").SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
  endif
Next c
Avatar billede acore Ekspert
13. juni 2018 - 11:19 #2
Ret koden til:

Sub DelRow()
  With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
  End With

  ...din kode

  With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
  End With
End Sub

Det plejer at hjælpe en del. Det kan sagtens kombineres med forslaget i #1
Avatar billede TheresaD Juniormester
13. juni 2018 - 11:48 #3
Jeg har udskiftet din kode del

For Each c In Range("Q1:Q6054")
  If Not IsEmpty(c) And c.Value = 0 Then 
  Range("Q1:Q6054").SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
  end if
Next c

Med min:
For Each c In Range("Q1:Q6054")
If Not IsEmpty(c) And c.Value = 0 Then c.Value = True
Next
Range("Q1:Q6054").SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete

Men den bliver ved med at melde fejl ved

  Range("Q1:Q6054").SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
Avatar billede TheresaD Juniormester
13. juni 2018 - 11:52 #4
Tak acoce
Nu tager den 1 sek at køre :)
Avatar billede acore Ekspert
13. juni 2018 - 11:56 #5
Det var godt - det koden gør, er,at den slår genberegning og skærmopdatering fra mens du sletter. Det er ret almindeligt, at langt den størte tid i eksekveringen af en makro går med de to ting. 

Så tricket virker 9 ud af 10 gange, du synes en makro tager for lang tid.
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

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