Avatar billede lineriber Praktikant
07. oktober 2010 - 10:03 Der er 10 kommentarer og
1 løsning

Dårlig performance på VBA kode til at skjule rækker og kolonner

Hej eksperter

Jeg har en VBA kode der skjuler rækker og kolonner med værdien 0 eller blank i, i et excel regneark (Excel 2007):

Sub test()

Dim intRække As Integer, intKol As Integer

For Række = 77 To 89
If Range("C" & Række) = "" Or Range("C" & Række) = 0 Then Rows(Række).EntireRow.Hidden = True
Next
For kol = 4 To 33
If Cells(8, kol) = "" Or Cells(8, kol) = 0 Then Cells(8, kol).EntireColumn.Hidden = True
Next
End Sub

Men jeg syntes at denn VBA er ret lang tid om at køre/udføres (ca 30 sekunder)!
Er er nogen der kan give optimeringsforlag til den?
Den er en del af en noget længere VBA kode, og derfor er udførelsestiden lidt kritisk i dette tilfælde.

Jeg er stadig rimelig nybegynder i VBA, så venligst skriv noget forklaring til jeres forslag.

mvh
Line
Avatar billede supertekst Ekspert
07. oktober 2010 - 10:15 #1
Er ScreenUpdating sat til False inden testen?
Avatar billede neoman Novice
07. oktober 2010 - 10:17 #2
taget fra: http://www.automateexcel.com/2004/08/14/excel_vba_turn_off_screen_updating/

As cool as it looks watching your macro manipulate the screen, you can help it run faster if you turn off Screen Updating.

1. At the beginning of your code put this line:

Application.ScreenUpdating = False

2. At the end of your code put this line:

Application.ScreenUpdating = True
Avatar billede lineriber Praktikant
07. oktober 2010 - 10:24 #3
Jeg har faktisk sat Application.ScreenUpdating = False på. Det hjælper lidt på tiden, men jeg syntes stadig den er lidt langsom.
Men det kan godt være at der ikke er noget at gøre ved det, alt det simpelthen bare er en tidskrævende opgave....
Avatar billede lineriber Praktikant
07. oktober 2010 - 10:25 #4
Men der er også som om at den bliver langsommere og langsommere, jo flere gange jeg kører makroen (jeg kører den ca 20 gange).
Avatar billede supertekst Ekspert
07. oktober 2010 - 10:30 #5
Var der mulighed for at få en kopi?
Avatar billede lineriber Praktikant
07. oktober 2010 - 10:44 #6
Jeg sender den lige til dig supertekst
Avatar billede finb Ekspert
07. oktober 2010 - 10:44 #7
Det er desværre en Excel 2007-ting.
Den beregner en række og lægger resultatet op i rygsækken,
beregner så næste række og lægger resultatet op i rygsækken, osv. osv.

Rygsækken bliver tungere og tungere.

Vi har droppet Excel 2007, overvej det samme.

Mvh finb
Avatar billede tjp Mester
07. oktober 2010 - 14:34 #8
En petit optimering:

Sub test()

  For Each myCell In Range("C77:C89")
      If myCell = "" Or myCell = 0 Then
        myCell.EntireRow.Hidden = True
      End If
  Next
 
  For Each myCell In Range(Cells(8, 4), Cells(8, 33))
      If myCell = "" Or myCell = 0 Then
        myCell.EntireColumn.Hidden = True
      End If
  Next
 
End Sub

Autofilter ku måske også være en mulighed..
Avatar billede excelent Ekspert
07. oktober 2010 - 15:41 #9
Sub Skjul()
Application.ScreenUpdating = False
Application.Calculation = xlManual
Dim rng As Range
For Each c In Range("C77:C89")
If c = 0 Or c = "" Then
  If rng Is Nothing Then
    Set rng = c
    Else
    Set rng = Application.Union(rng, c)
  End If
End If
Next
rng.EntireRow.Hidden = True

Set rng = Nothing

For Each c In Range("D8:AG8")
If c = 0 Or c = "" Then
  If rng Is Nothing Then
    Set rng = c
    Else
    Set rng = Application.Union(rng, c)
  End If
End If
Next
rng.EntireColumn.Hidden = True
Set rng = Nothing
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
Avatar billede lineriber Praktikant
07. oktober 2010 - 16:04 #10
NÅ, jeg bliver vist nød til at konkludere at min dårlige performance på makroen, ikke er et kodningsspørgsmål, men problemer med min computer!!

Så jeg beklager at have forstyrret jer alle, når det nu viser sig at det ikke er VBA'en der er problemet.

Vil dem der vil have del i point, må smide et svar - jeg deler dem imellem jer imorgen.
Avatar billede supertekst Ekspert
07. oktober 2010 - 16:15 #11
Fik tilsendt filen direkte og konkluderede at der ikke var noget i vejen med hastigheden på min Pc - med den bestående kode.
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
Kurser inden for grundlæggende programmering

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