24. maj 2009 - 12:45Der 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.
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
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.
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
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.