Avatar billede friis5 Novice
21. januar 2008 - 09:56 Der er 7 kommentarer og
1 løsning

Optimere udskrift af Array

Hej Eksperter - jeg sidder og prøver at lave noget optimering, hvad gælder udskrift fra et array. Det virker altsammen meget godt, borset fra en lille detalje - her er lige en "test" kode først!

Option Base 1

Sub testing()
Dim DataMatrix() As String

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Sheets("Ark1").Cells(1, 1) = 1
    Sheets("Ark1").Cells(1, 2) = 2

    ReDim DataMatrix(10, 10)

    For i = 1 To 10
        For j = 1 To 10
            DataMatrix(i, j) = "=A1+B1"
'            Sheets("Ark1").Cells(1 + i, 1 + j) = "=A1+B1"
        Next j
    Next i
   
    Sheets("Ark1").Cells(2, 2).Resize(10, 10).Value = DataMatrix '(.Formula og .Value er prøvet)
   
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

Som man kan se, opretter jeg et Array (DataMatrix), som indeholder en Excelark formel, som jeg derpå udskriver (i en omgang). Nu er det bare således, at det der fremkommer på skærmen i cellen er formlen (der ikke er blevet eksekveret). Hvorfor bliver den ikke det, når jeg (som er udkommenteret) kører cellerne ind i løkken, så bliver de eksekveret! I mine øjne er det samme handling.

Håber det giver mening :)

Kan sige, at ved meget store arrays er forskellen ekstremt mærkbar, og derfor interessant.
Avatar billede kabbak Professor
21. januar 2008 - 11:34 #1
heets("Ark1").Cells(1 + i, 1 + j).Formula = "=A1+B1"
Avatar billede kabbak Professor
21. januar 2008 - 11:41 #2
Nå jeg misforstod, jeg kan heller ikke få den til det
Avatar billede kabbak Professor
21. januar 2008 - 11:43 #3
Prøv at lave denne om

Dim DataMatrix() As String

til

Dim DataMatrix() As Variant


Virkede ved mig ;-))
Avatar billede friis5 Novice
21. januar 2008 - 12:18 #4
Haha, blæret - forstår ikke helt hvorfor, men det er da bare super, nu kan jeg lige optimere mit ark med 10 sek :)
Avatar billede kabbak Professor
21. januar 2008 - 12:40 #5
et svar ;-))
Avatar billede friis5 Novice
21. januar 2008 - 12:44 #6
Skal måske tilføje efter test på større ark, at variablen VARIANT er UTROLIG langsom, så jeg har måtte droppe metoden igen.

VBA delen tænker helt vildt meget over, hvad den skal gøre ved

Sheets("Ark1").Cells(2, 2).Resize(10, 10) = DataMatrix

Når vi snakker om bare 11.000 celler (tog næsten 9 sek).

Så hvis der er andre variable der duer bedre, så er jeg lutter ører, ellers får du dine point, da du løste mit problem :)
Avatar billede kabbak Professor
21. januar 2008 - 13:34 #7
Er du sikker på at det er koden, jeg tror snarer at der når den beregner.

Prøv at stoppe koden her, ved at plinge den ud
Application.Calculation = xlCalculationAutomatic
Avatar billede friis5 Novice
21. januar 2008 - 14:35 #8
Når jeg kører den trinvis, så er det præcis den linie ja. Har på fornemmelse, at VBA bruger ret meget tid, på at "gætte" hvad Variant er...

Den løkke jeg kører er en super simpel "hvis-sætning". Burde ikke tage mange msek, at gennemskue.

Tror altså problemet ligger i VARIANT deklarationen.
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