Come inserire un indicatore di progresso in una macro

Le macro vengono spesso create per elaborare i dati e l’elaborazione dei dati spesso può richiedere molto tempo. Per questo motivo, alcuni utenti potrebbero pensare che il proprio computer abbia smesso di rispondere, anche se la macro è impegnata a svolgere l’attività assegnata.

La soluzione per la maggior parte degli sviluppatori di macro è avvisare in qualche modo gli utenti dello stato di avanzamento della macro. Esistono due modi per farlo in Excel. L’approccio più semplice e comune consiste nell’utilizzare la barra di stato per indicare cosa sta facendo la macro. Tutto quello che devi fare è mettere insieme una stringa che contiene il messaggio di stato e quindi assegnare quella stringa alla proprietà StatusBar dell’oggetto Application, come mostrato qui:

 

sStatus = "Elaborazione del file di input: sii paziente"
Application.StatusBar = sStatus

 

Il messaggio rimane sulla barra di stato finché non lo sovrascrivi con qualche altro messaggio. Potresti anche indicare l’avanzamento in un ciclo fornendo la percentuale di completamento:

 

For x = 1 to y
    Application.StatusBar = Format(x/y,"0.0%") & " di completamento"
    ' Altre istruzioni qui
Next

 

Al termine della routine, riporta la barra di stato alla normalità con la seguente istruzione:

 

Application.StatusBar = False

 

Se preferisci sviluppare un indicatore di avanzamento effettivo per la macro, puoi farlo creando un Form utente e quindi aggiornando il form per visualizzare una “barra percentuale” o qualche altro indicatore visivo. Puoi continuare a leggere, se l’argomento ti interessa.

Di seguito esamineremo un programma in Excel VBA che crea un indicatore di avanzamento. Abbiamo mantenuto l’indicatore di avanzamento il più semplice possibile, ma comunque professionale. Sei pronto?

La Userform che creeremo si presenta come segue:

 

Come inserire un indicatore di progresso in una macro 1

 

Per creare questo UserForm, esegui i seguenti passaggi:

  1. Apri l’editor di Visual Basic. Se Gestione progetti non è visibile, fai clic su Visualizza > Gestione progetti.
  2. Fai clic su Inserisci > UserForm. Se la Casella degli strumenti non viene visualizzata automaticamente, fai clic su Visualizza > Casella degli strumenti. Questo Userform è composto solo da tre controlli. Un controllo Cornice e due controlli Etichetta.
  3. Aggiungi il controllo Cornice. Puoi farlo facendo clic su Cornice dalla casella degli strumenti per poi trascinarlo sul Form utente. È necessario modificare alcune proprietà di questo controllo. Fai clic con il tasto destro del mouse sul controllo Cornice, quindi fai clic su Proprietà. Svuota il campo Caption, imposta Height su 24 e Width su 204.
  4. Aggiungi il primo controllo Etichetta e posizionalo nel controllo Cornice. Fai clic con il pulsante destro del mouse sul controllo etichetta, quindi fai clic su Proprietà. Cambia il nome in Barra, BackColor in Evidenziazione, svuota il campo Caption, imposta Height su 20 e Width su 10.
  5. Aggiungi il secondo controllo Etichetta e posizionalo sopra il controllo Cornice. Fai clic con il pulsante destro del mouse sul controllo etichetta, quindi fai clic su Proprietà. Cambia il nome in Testo e cambia la Caption in “Elaborazione completa allo 0%”.
  6. Cambia la Caption del Form utente in “Indicatore di progresso”. Una volta completata questa operazione, il risultato dovrebbe essere coerente con l’immagine dello Userform mostrata in precedenza.
  7. Inserisci un pulsante di comando nel tuo foglio di lavoro e aggiungi la seguente riga di codice per mostrare il Form utente:

 

Private Sub CommandButton1_Click()
    UserForm1.Show
End Sub

 

  1. E’ ora il momento di creare la Sub UserForm_Activate. Utilizzando questa Sub, VBA di Excel può aggiornare il Form utente per mostrare l’avanzamento della macro. In Gestione progetti, fai clic con il pulsante destro del mouse su UserForm1 e quindi fai clic su Visualizza codice.
  2. Scegli Userform dall’elenco a discesa a sinistra. Scegli Activate dall’elenco a discesa a destra.
  3. Aggiungi la seguente riga di codice:

 

Private Sub UserForm_Activate()
    codice
End Sub

 

Spiegazione: questa Sub richiama un altra Sub con nome “codice” che creeremo tra un minuto. Confuso? Il nostro corso a dispense “Excel VBA Masterclass” contiene diversi capitoli che trattano dei Form utenti: dai più semplici ai più complessi. Se hai fretta, esegui semplicemente i seguenti passaggi.

  1. Inserisci la Sub denominata “codice” in un modulo (nell’editor di Visual Basic, fai clic su Inserisci > Modulo). Questo è solo un esempio. Questo è IL posto in cui aggiungere il tuo codice quando desideri utilizzare questo indicatore di avanzamento per la tua macro. Il codice è il seguente:

 

Sub codice()

Dim i As Integer, j As Integer, pctCompl As Single

Foglio1.Cells.Clear

For i = 1 To 100
    For j = 1 To 1000
        Cells(i, 1).Value = j
    Next j
    pctCompl = i
    progresso pctCompl
Next i

End Sub

 

 

Spiegazione: innanzitutto inizializziamo alcune variabili. Successivamente, ripuliano Foglio1. Usiamo un doppio loop per mostrare i valori da 1 a 1000 nelle prime 100 righe del foglio di lavoro. Ciò manterrà occupato VBA di Excel per un po’ e ci darà l’opportunità di vedere lo stato di avanzamento della macro. La variabile pctCompl (abbreviazione di percentCompleted) misura l’avanzamento della macro. Infine, chiamiamo un altra Sub denominata “progresso” e passiamo il valore della variabile pctCompl per aggiornare la Userform. In questo modo possiamo vedere l’avanzamento della macro!

  1. Aggiungi un altra Sub denominata “progresso”. Il codice è il seguente:

 

Sub progresso(pctCompl As Single)

    UserForm1.Testo.Caption = "Elaborazione completa al " & pctCompl & "%"
    UserForm1.Barra.Width = pctCompl * 2

    DoEvents

End Sub

 

Spiegazione: la prima riga di codice modifica la didascalia del primo controllo etichetta. La seconda riga di codice modifica la larghezza del secondo controllo etichetta. Aggiungi DoEvents per aggiornare il Form utente.

  1. Esci dal Visual Basic Editor e fai clic sul pulsante di comando nel foglio.

Risultato:

 

Come inserire un indicatore di progresso in una macro 2

 

Nota: per questa macro abbiamo utilizzato la variabile i per misurare l’avanzamento. Ad esempio, alla riga 11, è stato completato il 10%. Questo potrebbe essere diverso per la tua macro. La tecnica di passare il valore della variabile pctCompl alla sub “progresso” per aggiornare la Userform rimane la stessa.

 

DOWNLOAD DEL FILE UTILIZZATO NELL’ARTICOLO

 

 

Tags: , , , , , , , , , , ,

Ti è stato utile?