Avatar billede fly__one Nybegynder
14. januar 2006 - 11:22 Der er 10 kommentarer og
1 løsning

Stoppe afspilning af funktion

Jeg har skrevet 5 funktioner i VBA. Funktion1 er ret tidskrævende pga. mange data og beregninger(og sikkert dårlig programmering).

Det irriterer mig derfor, at når jeg anvender en af de 4 andre funktioner, afspilles Funktion1 også, hvilket er meget tungt og tidskrævende.

Er der en metode, hvorpå man kan adskille eller styre, hvornår funktioner - skrevet i VBA - skal afspilles/gennemberegnes? Jeg vil ikke slå ”automatisk beregning fra” som ellers kunne være en løsningsmulighed.
Avatar billede kabbak Professor
14. januar 2006 - 11:24 #1
prøv at sætte den tunge kode herind, så er der nok nogen der kikker
Avatar billede fly__one Nybegynder
14. januar 2006 - 13:33 #2
Den "tunge" kode skal søge på en række- og kolonneoverskrift for at kunne returnere en værdi i en matrix.

Hvordan skrives det mest effektivt og optimalt??
Avatar billede kabbak Professor
14. januar 2006 - 14:38 #3
Læs området ind i et array, og find den via vba
Avatar billede bak Seniormester
14. januar 2006 - 16:18 #4
Som kabbak skriver så smid koden herind, så vi kan optimere den.

Hvis der står Application.Volatile
i koden kunne du måske slette det, så genberegnes funktionen ikke for hver ændring.

Et alternativ kunne være at slå Automatisk beregning fra i begyndelsen af de andre makroer og sætte den til igen i slutningen.

der er måske flere andre alternativer, men det afhænger af hvad du allerede har.
Avatar billede fly__one Nybegynder
14. januar 2006 - 17:04 #5
Her den del der skaber problemer rent tidsmæssigt:

Public Function Funktion1(Område As Range, Måned As Byte, År, ISO As String)
Dim n, m, i, j As Integer
Dim Dato_Var As String
Dim Mdr
Application.ScreenUpdating = False

n = Område.Rows.Count
Mdr = Format(Måned, "00")
Dato_Var = År & "-M" & Mdr

For i = n To 2 Step -1
If Not Område(i, 1) = Dato_Var Then
Else
Exit For
End If
Next i
...
Avatar billede kabbak Professor
14. januar 2006 - 19:22 #6
Public Function Funktion1(Område As Range, Måned As Byte, År, ISO As String)
Dim n, m, i, j As Integer
Dim Dato_Var As String
Dim Mdr
Application.ScreenUpdating = False
Område1 = Område ' NY
n = Område.Rows.Count
Mdr = Format(Måned, "00")
Dato_Var = År & "-M" & Mdr

For i = n To 2 Step -1
If Not Område1(i, 1) = Dato_Var Then'RETTET
Else
Exit For
End If
Next i


For 3922 rækker tog det
'3min og 10sek for din kode
'45 sek.efter ændring
Avatar billede fly__one Nybegynder
15. januar 2006 - 09:20 #7
Kabbak det virker ok så du kan få pointene.
Er det muligt at erklære variablen "område1" så den ikke er en variant-type??
Avatar billede kabbak Professor
15. januar 2006 - 09:59 #8
hvad har du imod en variant,?

Jå vidt jeg ved, skal det være en variant, men du må gerne prøve.
Avatar billede fly__one Nybegynder
15. januar 2006 - 20:17 #9
Jeg mener bare at variant er den tungste erklæring, men har accepteret svar
Avatar billede bak Seniormester
16. januar 2006 - 20:43 #10
Det skal være en variant som kabbak skriver.
Det skyldes bla. at den skal være klar til at modtage et ukendt antal data.
Kabbak læser jo alle celler i området ind i et array af variabel størrelse.
Avatar billede bak Seniormester
16. januar 2006 - 20:55 #11
apropros varianter:
Dim n, m, i, j As Integer

Denne linie fra din kode dim'mer IKKE n, m og i som integer, men som variant. Kun j bliver dim'met som integer.
I VBA kan man ikke gøre sådan, men derimod skal alle dim'mes hver for sig.
Dim n As Integer, m As Integer, i As Integer, j As Integer
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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