› Sviluppare funzionalita su Microsoft Office con VBA › Tempo di esecuzione eccessivo
-
AutoreArticoli
-
Buongiorno,
all'interno di una macro ho queste semplici istruzioni:
Call X_TIME_SET("M_RESET_1") Application.ScreenUpdating = False Application.Calculation = xlCalculationManual If UCase(Left(Cells(23, "F"), 1)) <> "NO" Then Cells(23, "F") = "SI" End If If UCase(Left(Cells(23, "C"), 1)) = "Q" Then Cells(23, "C") = "Quantità'" Else Cells(23, "C") = "" End If If Cells(42, "H") = 0 Then Cells(42, "H") = "" End If If Cells(42, "H") = "" Then Cells(44, "H") = "" End If If Cells(46, "I") = 0 Then Cells(46, "I") = "" End If Call X_TIME_SET("M_RESET_2")Questa è la sub X_TIME_SET:
Sub X_TIME_SET(ByVal MSG As String) ' Application.ScreenUpdating = False Application.Calculation = xlCalculationManual RIG = Cells(1, "EA") Cells(RIG, "EA") = Now Cells(RIG, "ED") = MSG Cells(1, "EA") = Cells(1, "EA") + 1 Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Subper eseguire le istruzioni dal punto M_RESET_1 al punto M_RESET_2 ci vogliono 7 secondi ... farei prima a mano!
Che posso fare?
Grazie!
Ciao
Mi pare che stai dicendo ad Excel di "cambiare" il contenuto di alcune celle.
Per farlo ci vuole tempo (anche se le celle interessate sembrano poche). Ma non mi spingo oltre perchè sarebbe il caso di "vedere" il file (senza dati sensibili) e capire se quelle istruzioni sono influenzate da qualcos'altro.
Ciao,
Mario
Oltre a quello che scrive Marius44, con cui concord, puoi tentare due cose:
1. Invece di usare le funzioni in versione 'variant' ovvero
UCase(), Left(), ecc.
usare quelle in versione 'string':UCase$(), Left$(), ...
Non credo che guadagnerai molto, ma sicuramente le 'variant' sono più lente perché costringono il VBA a determinare il TIPO di dato in base al contenuto della variabile e/o cella passata, mentre quell in versione 'string' non devono farlo.2. Per lo stesso motivo, indicare direttamente il numero della colonna anziché l'intestazione della colonna.
Esempio nonCells(23, "F")maCells(23, 6)perché anche in questo caso Excel è costretto ad andare a controllare a quale numero corrisponde la colonna F.
P.S. Mi pare che scrivere
"Quantità'"sia un errore dato che è presente sia l'apice che la à. -
AutoreArticoli
