Avatar billede medusa Nybegynder
14. maj 2003 - 14:10 Der 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?
Avatar billede martin_moth Mester
14. maj 2003 - 15:57 #1
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)
Avatar billede bak Forsker
14. maj 2003 - 21:44 #2
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...
Avatar billede medusa Nybegynder
15. maj 2003 - 08:12 #3
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 ?
Avatar billede martin_moth Mester
15. maj 2003 - 09:04 #4
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å?
Avatar billede medusa Nybegynder
15. maj 2003 - 09:07 #5
hæ hæ, det er faktisk omvendt. XP ligger på en 1,6 ghz pentium 4, og 2000 er på en 333 mhz oldgammel pc. Hmmmmmmm ?!
Avatar billede martin_moth Mester
15. maj 2003 - 09:12 #6
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)
Avatar billede medusa Nybegynder
15. maj 2003 - 09:18 #7
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 !
Avatar billede martin_moth Mester
15. maj 2003 - 09:27 #8
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)

Held og lykke!
Avatar billede medusa Nybegynder
15. maj 2003 - 10:13 #9
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. ;-)
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