Avatar billede EmilPS2114 Nybegynder
24. maj 2009 - 12:45 Der er 10 kommentarer og
1 løsning

Makro til at skjule rækker arbejder langsomt

Hej,

Jeg har en forholdsvis simpel stump kode der skjuler rækker, hvis cellen er blank. Problemet er at det kører enormt langsomt, da den arbejder direkte i regnearket.

---
For Each R In Range("a10:a505").Rows
        If R.Cells(1, 1).Font.Bold = False And R.Cells(1,1).Value = "" Then
        R.Hidden = True
        End If
Next
---

Jeg har forsøgt at sætte mig lidt ind i arrays samt læst artiklen herinde grundigt, men jeg er i tvivl om hvorvidt jeg får "samme kode" til at virke i et array? Hver gang jeg forsøger mig sker der lettere uhensigtsmæssige ting, eller koden kører i hak.

På forhånd tak.
Avatar billede EmilPS2114 Nybegynder
24. maj 2009 - 12:47 #1
Rettelse: koden indeholder ikke "And", men "Or".
Avatar billede stry Nybegynder
24. maj 2009 - 13:31 #2
Prøv:

application.screenupdate = false

For Each R In Range("a10:a505").Rows
        If R.Cells(1, 1).Font.Bold = False And R.Cells(1,1).Value = "" Then
        R.Hidden = True
        End If
Next

application.screenupdate = true
Avatar billede stry Nybegynder
24. maj 2009 - 13:34 #3
rettelse, det skal være "Application.ScreenUpdating = False" hhv. "True"
Avatar billede stry Nybegynder
24. maj 2009 - 13:37 #4
rettelse, det skal være "Application.ScreenUpdating = False" hhv. "True"
Avatar billede stry Nybegynder
24. maj 2009 - 13:38 #5
Nå der foretog Firefox lige en 'resend' da jeg navigerede tilbage.
Avatar billede EmilPS2114 Nybegynder
24. maj 2009 - 14:32 #6
Jeg kopierede ikke ScreenUpdating delen med, men den bruger jeg allerede (gør jeg generelt med de fleste koder).

Jeg søger mere noget i stil med det der bliver lavet her:

http://www.eksperten.dk/guide/522
Avatar billede excelent Ekspert
24. maj 2009 - 15:20 #7
Sub Skjul()
For t = 10 To 505
If Cells(t, 1).Font.Bold = True Or Cells(t, 1) <> "" Then Cells(t, 100) = 1
Next
Range("CV10:CV505").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
Range("CV10:CV505") = ""
End Sub
Avatar billede EmilPS2114 Nybegynder
24. maj 2009 - 15:38 #8
excelent:

Koden fungerer fint, men den kører i samme tempo som den anden. Det tager ca. 1-1,5 minut at køre den (med screenupdating slået fra). Er det ikke muligt at smide hele arket ind i et array, lave et gennemløb, og så smide det hele tilbage i brugerfladen? Det må gå noget hurtigere hvis det arbejder i hukommelsen.
Avatar billede excelent Ekspert
24. maj 2009 - 15:51 #9
Koden tager under 1 sekund at køre selv om den evt. skulle skjule alle rækkerne i det område
Så prøv med denne som slår beregning fra under kørsel, - det kunne tyde på du har mange formler
(tvivler iøvrigt på en array løsning hjælper i dette tilfælde heller ikke med hastigheden)

Sub Skjul()
Application.Calculation = xlManual
For t = 10 To 505
If Cells(t, 1).Font.Bold = True Or Cells(t, 1) <> "" Then Cells(t, 100) = 1
Next
Range("CV10:CV505").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
Range("CV10:CV505") = ""
Application.Calculation = xlAutomatic
End Sub
Avatar billede EmilPS2114 Nybegynder
24. maj 2009 - 16:01 #10
Det tager kun ca. 1 sekund nu mod 1 minut før. Der er mange formler i det område ja.

Tak for hjælpen, smid et svar. :-)
Avatar billede excelent Ekspert
24. maj 2009 - 16:06 #11
velbekom
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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