Avatar billede gider_ikke_mere Nybegynder
16. september 2004 - 16:01 Der er 13 kommentarer og
1 løsning

Optimering af kode

Denne kode tager ca. 1 sekund (P4-2,4MHz). Kan hastigheden optimeres?


I = 1
If FlexServoErAktuel = 0 Or FlexServoErAktuel = 1 Then
    For I = I To 36
        I2 = 1
        Application.Goto reference:=("KORT" & I & "_ADR")
            If Not IsNumeric(ActiveCell.Value) Then
                ActiveCell.Offset(0, 11).Range("A1:AF1,A3:AF3").Select
                Selection.ClearContents

                    For I2 = I2 To 10
                        Application.Goto reference:=("KORT" & I & "_ADR")
                        ActiveCell.Offset(1, I2).Range("A1").Select
                       
                            If ActiveCell.Value <> "" Then
                                TextIBoks = ActiveCell.Value
                                Selection.ClearContents
                            End If
                    Next
            End If
    Next
End If
Avatar billede sjap Praktikant
16. september 2004 - 18:18 #1
Ikke et egentligt optimeringsforslag, men har du sat

Application.ScreenUpdating = False

inden du kører koden?
Avatar billede sjap Praktikant
16. september 2004 - 18:22 #2
Jeg ved ikke om det er hurtigere, men kan

ActiveCell.Offset(0, 11).Range("A1:AF1,A3:AF3").Select
Selection.ClearContents

ikke skrives som

ActiveCell.Offset(0, 11).Range("A1:AF1,A3:AF3").ClearContents
Avatar billede sjap Praktikant
16. september 2004 - 18:29 #3
Hvorfor sætter du I2 = 1? Så vidt jeg kan se, så bruges den ikke før du skriver

For I2 = I2 To 10

Og der kan der ligeså godt stå

For I2 = 1 To 10

SÅ spares der da en programlinie.
Avatar billede gider_ikke_mere Nybegynder
16. september 2004 - 18:29 #4
Jeg kører både uden beregning af ark, uden opdatering af projekt, uden opdatering af arket, og uden beregning af projektet.
Avatar billede sjap Praktikant
16. september 2004 - 18:38 #5
ActiveCell.Offset(1, I2).Range("A1").Select
If ActiveCell.Value <> "" Then
    TextIBoks = ActiveCell.Value
    Selection.ClearContents
End If

kan ændres til

If ActiveCell.Offset(1, 2).Value <> "" Then
    TextIBoks = ActiveCell.Value
    ActiveCell.Offset(1, 2).ClearContents
End If

eller

With ActiveCell.Offset(1, 2)
    If .Value <> "" Then
        TextIBoks = .Value
        .ClearContents
    End If
End With
Avatar billede sjap Praktikant
16. september 2004 - 18:44 #6
Det var vist hvad jeg kunne finde på i denne omgang. Håber du kan bruge det. Ellers må du jo bare vente til nogen af de andre vågner fra dvalen. :0)
Avatar billede bak Forsker
16. september 2004 - 20:22 #7
eller

Dim rg1 As Range, rg2 As Range
I = 1
If FlexServoErAktuel = 0 Or FlexServoErAktuel = 1 Then
    For I = I To 36
        I2 = 1
        Set rg1 = Range("KORT" & I & "_ADR")
        If Not IsNumeric(rg1.Value) Then
            rg1.Offset(0, 11).Range("A1:AF1,A3:AF3").ClearContents
            For I2 = I2 To 10
                Set rg2 = rg1.Offset(1, I2).Range("A1")
                If rg2.Value <> "" Then
                    TextIBoks = rg2.Value
                    rg2.ClearContents
                End If
            Next
        End If
    Next
End If
Avatar billede gider_ikke_mere Nybegynder
16. september 2004 - 23:06 #8
Tak for hjælpen, begge 2!
I en test med 1000 x ovenstående, tager min kode 34 sek. Sjaps tager 33 sek. og Bak's tager... 4 sek.
Imponerende *GGG*
Avatar billede sjap Praktikant
16. september 2004 - 23:12 #9
Rystende! :0)
Avatar billede bak Forsker
17. september 2004 - 09:56 #10
Skal vi så holde der eller er der behov for yderligere optimering ?? :-)
Avatar billede bak Forsker
17. september 2004 - 10:10 #11
Bemærk at koden ligner din egen en del.
Der er bare ingen Goto og select
Avatar billede gider_ikke_mere Nybegynder
17. september 2004 - 12:36 #12
Jeg forstår ikke lige grunden til at koden kører hurtigere da rg1 og rg2 stadig skal ind at berøre cellerne.
Er Goto og Select langsomme funktioner?
Et godt link til en side der beskriver noget om hastighed - fordele/ulemper ved forskellige funktioner?
Avatar billede bak Forsker
17. september 2004 - 14:21 #13
ikke specielt godt, men dog et link :-)

http://tommy.bak.homepage.dk/hastighedsoptimering_af_vba.htm
Avatar billede gider_ikke_mere Nybegynder
17. september 2004 - 14:43 #14
Pointene er fuldt fortjent! *SS*
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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