Sviluppare funzionalita su Microsoft Office con VBA Cartella Excel lenta in apertura

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

    joanin

      Buongiorno,

      ho un file excel, con tabella pivot e alcune macro, che è lentissimo ad aprirsi.

      Per qualche minuto resta il logo di Excel con la scritta "Calcolo in corso (8 thread)..."

      Potrebbe essere che il problema sia dovuto a questa macro che serve per eliminare alcune righe in un foglio di lavoro. La macro scorre anche 5000 righe.

      ' macro per elimiare righe che iniziano per numeri
          
          Dim LR3 As Long, i3 As Long
      
      With Sheets("Import")
          LR3 = .Range("A" & .Rows.Count).End(xlUp).Row
      
          For i3 = LR3 To 2 Step -1
              If IsNumeric(.Range("A" & i3).Value) = False And _
              Len(.Range("A" & i3).Value) > 0 Then
      
              Else
                  .Rows(i3).Delete
              End If
          Next i3
      End With

      Che sia dovuto a questa macro? Come risolvere? Grazie.

      #5843 Score: 0 | Risposta

      patel
      Moderatore
        50 pts

        la macro viene lanciata automaticamente all'apertura ? se sì toglila dalla Sub Workbook_Open()

        #5844 Score: 0 | Risposta

        joanin

          Ciao patel. In pratica nel Sub Workbook_Open() richiamo alcune macro, tra cui una macro che al suo interno richiama la macro in questione. 

          Quindi  in Sub Workbook_Open() richiamo Macro 1; all'interno di Sub Macro 1() richiamo Macro 2 e all'interno del codice di Sub Macro 2 ho il pezzo di codice allegato prima.

          #5845 Score: 0 | Risposta

          joanin

            Fammi sapere come procedere!

            #5846 Score: 0 | Risposta

            Joanin

              Di sicuro è quella macro, perchè cancellandola (commentandola) il foglio Excel si apre immediatamente

              #5897 Score: 0 | Risposta

              vion
              Partecipante
                3 pts

                Per cancellare le righe più velocemente:

                  Dim LR3 As Long, i3 As Long
                  Dim data As Variant
                    Dim rangeToDelete As Range
                
                    With Sheets("Import")
                        LR3 = .Range("A" & .Rows.Count).End(xlUp).Row
                        data = .Range("A2:A" & LR3).Value
                    
                        For i3 = LBound(data) To UBound(data)
                            If Not IsNumeric(data(i3, 1)) And _
                            Len(data(i3, 1)) <> 0 Then
                    
                    
                            Else
                                If rangeToDelete Is Nothing Then
                                    Set rangeToDelete = .Range("A" & i3 + 1)
                                Else
                                    Set rangeToDelete = Union(rangeToDelete, .Range("A" & i3 + 1))
                                End If
                            End If
                        Next i3
                    End With
                    If Not rangeToDelete Is Nothing Then rangeToDelete.EntireRow.Delete
                #40452 Score: 0 | Risposta

                Antonietta

                  Salve, come si fa a capire da cosa deriva quella lentezza di "calcolo in corso (8 thread)"? Grazie

                  #40453 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    238 pts

                    vion ha scritto:

                    Per cancellare le righe più velocemente:

                    Però il codice proposto non cancella le righe che iniziano con un numero (come da commento al primo codice pubblicato dall'OP).

                    Antonietta ha scritto:

                    come si fa a capire da cosa deriva quella lentezza di "calcolo in corso (8 thread)"? Grazie

                    Il codice che hai mostrato nel primo post è terribile   
                    C'è un If che testa due condizioni che a loro volta usano due funzioni le quali vanno elaborate a parte (If IsNumeric e If Len) e per di più questo test è dentro un ramo Else che non ha codice quindi stai facendo un test al negativo (solo per ignorare il risultato se la condizione è soddisfatta).

                    Aggiungi a questo che il Delete sull'intera riga rallenta comunque l'esecuzione e poi stiamo parlando di oltre cinquemila righe.

                    Per velocizzare potresti adottare la soluzione di vion che come idea (non però per come è scritto) mi piace perchè costruisce un range separato da eliminare in blocco. 

                    A questo potresti pensare di sospendere il refresh dello schermo con ScreenUpdating (anche questo potrebbe  aiutare a velocizzare).

                    #40839 Score: 0 | Risposta

                    Antonietta

                      NB: io non ho inserito alcun codice. Ho solo chiesto: "Salve, come si fa a capire da cosa deriva quella lentezza di "calcolo in corso (8 thread)"? Grazie"

                      #40851 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        238 pts

                        Non era possibile per me sapere che non sei l'utente del primo post, perchè come utente non registrato, puoi scrivere il nome che preferisci quando posti qualcosa.

                        Ad ogni modo ribadisco le mie osservazioni, astraendole. Può darsi anche che ci sia un problema di memoria, magari ci sono altre applicazioni sotto che consumano (o nu bell'antivirus, non saprei). Gli scenari possibili, e le configurazioni utente, sono tanti e diversi.

                      Login Registrati
                      Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
                      Rispondi a: Cartella Excel lenta in apertura
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: