Sviluppare funzionalita su Microsoft Office con VBA Tempo di esecuzione eccessivo

Login Registrati
Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
  • Autore
    Articoli
  • #19077 Score: 0 | Risposta

    ABRAMO48
    Partecipante
      1 pt

      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 Sub
      

      per 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!

      #19078 Score: 0 | Risposta

      Marius44
      Moderatore
        58 pts

        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

        #19079 Score: 0 | Risposta

        DeletedUser
        Bloccato
          13 pts

          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 non Cells(23, "F") ma Cells(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 à.

        Login Registrati
        Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
        Rispondi a: Tempo di esecuzione eccessivo
        Gli allegati sono permessi solo ad utenti REGISTRATI
        Le tue informazioni: