14. maj 2003 - 14:10Der er
8 kommentarer og 1 løsning
Excel macro: Delete rows
Jeg har i et regneark en knap som skal slette visse rækker hvis de opfylder 2 kriterier. Simpel kode, ikke noget specielt. Men.... Når jeg starter knappen i Excel 2002 (xp) køre den meget langsomt (der er ca 1500 rækker). Jeg har afprøvet samme regneark/knap på en maskine som køre Excel 2000 og på en maskine som har Excel 97. På begge af disse tog det kun få sekunder at køre færdig.
Er der andre som har oplevet samme problem? Findes der en løsning?
En generel løsning der får det til at køre meget meget hurtigere er at sætte Application.Screenupdate = False - så "viser" den ikke på skærmen at du sletter alle rækkerne, og det kan godt gøre det mange gange hurtiger, afhængigt af hvor mange rækker du slettet. Jeg ved faktisk ikke om du behøver sætte Application.Screenupdate = True bagefter, men du kan jo gøre det for en sikkerheds skyld.
Dette burde ikke have noget at gøre med om du kører 2000 / XP. Det er bare et generelt tip til at få tingene til at køre meget hurtigere. Prøv at se om det hjælper, muligvis er XP langsommere om at opdaterer skærmen (lyder i mine øre som noget vås)
Enig med martin. Alt andet lige burde XP være hurtigere på flere områder, da den har fået visse rutiner optimeret. Prøv lige at vise din kode, så vi kan se om der er noget specielt ved den...
Jeg er ikke sikker på det er min kode som har et problem, specielt da det jo virker fint på Excel 2000 og 97.
_________________________________________ startrow = 6 ix = 0
With Application .Calculation = xlCalculationManual
Do Until Range("A" & ix + startrow).Value = "SLUT" varenr = Range("A" & ix + startrow).Value & Range("B" & ix + startrow).Value
If Left(Range("K" & ix + startrow).Value, 1) = "0" Then
Range("A" & (ix + startrow)).Select Selection.EntireRow.Delete ix = ix - 1 GoTo ny End If
If Trim(Range("A" & ix + startrow).Value) = "" Then GoTo ny End If
If varenr = oldvarenr Then
Range("A" & (ix + startrow)).Select Selection.EntireRow.Delete ix = ix - 1 GoTo ny End If ny: oldvarenr = varenr ix = ix + 1 Loop
.Calculation = xlCalculationAutomatic End With _____________________________________________
Jeg har prøvet at lave en For-to løkke istedet for en Do until, da den jo er hurtigere, men ingen forbedring. Jeg har også prøvet Application.Screenupdate= false, men ingen forbedring. Har prøvet at ændre på data formatet (pt har alt format tekst), men det hjalp heller ikke. Har Excel xp en bug siden det virker på de ældre versioner ?
Det er ikke således, at Excel XP er installeret på en 300 MHz 486'er, mens Excel2000 er på en 2 GHz Pentium IIII? Med andre ord, de er samme hardware du tester på?
Hmmm - så fatter jeg slet ingenting. Geninstaller hele dynen, og se om det hjælper. Eller lav en anden testmacro, der looper over et eller andet, og se om også den tager længere tid på XP - det er det eneste jeg kan finde på. PS: Hedder du "med-usa" eller "Medusa" ;o)
Det er Medusa - hende med de mange slanger på hovedet som kunne forstene mænd hvis de kiggede på hende. :-) Gnæk Gnæk!
Jeg forstår heller intet. Jeg har prøvet det på 3 forskellige pc'er med xp og det virker bare ikke. Har snakket med vores driftafdeling som nægter at anerkende problemet da de "nemt kan lave en knap som sletter alle rækker fra 1 til 800" - som om det er det jeg skal !
De må da erkende, at der er et problem, hvis du har en 100% funktionel macro, der kører problemfrit på 2000, men som tager laaaang tid på XP.
Dit problem har jo INTET som helst med om du sletter rækker, indsætter kollonner eller hvad du måtte lyste! Så deres 'forklaring' kan du ikke bruge til noget...
Jeg vil påstå, at problemet ikke ligger i din macro, og du ikke behøver omskrive den, jeg synes den ser fin ud (brotset fra at jeg synes GoTo-programmering er noget snavs), og jeg ville slå IT-funktionen over skinnebenene indtil de tog sig af problemet, der IKKE ligger i at omskrive din macro, men i at finde ud af hvorfor XP er så meget langsommere end 2000 - måske er der noget i vejen med PC'en, eller...?
Jeg kan desværre ikke bidrage med en løsning, andet end at medgive dig, at det er for mystisk, og at problemet ikke burde kunne forekomme. Sorry :o(
Alternativt kan du jo bare drikke lidt kaffe hver gang du kører macroen - sådanne små vente-pauser kan jo være helt tiltrængte ;o)
Tak. Måske skal jeg have fat i Microsoft det er jo deres @§%€&# produkt så de må vide hvad der skal gøres.
Du får point for din sympati. ;-)
Synes godt om
Ny brugerNybegynder
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.