Come visualizzare un indicatore di stato con un modulo utente in Excel

Riepilogo

Se si dispone di una macro di Microsoft Visual Basic, Applications Edition che richiede molto tempo, è possibile fornire all'utente un'indicazione del corretto avanzamento della macro. Questo articolo descrive come creare un indicatore di stato con un modulo utente in Microsoft Excel.

Ulteriori informazioni

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. I tecnici di supporto tecnico Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessuno caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze.

Creare il modulo utente

Nell'esempio seguente una subroutine di Visual Basic popola un ampio intervallo di celle con un numero casuale. L'indicatore indica che la macro è in esecuzione correttamente.

  1. Aprire una nuova cartella di lavoro in Excel.

  2. In Microsoft Office Excel 2003 e nelle versioni precedenti di Excel fare clic su Strumenti, scegliere Macroe quindi fare clic su Visual Basic Editor.

    In Microsoft Office Excel 2007 fare clic su Visual Basic nel gruppo Codice della scheda Sviluppo .

    Nota Per visualizzare la scheda Sviluppo nella barra multifunzione, seguire questa procedura:

    1. Avviare Excel 2007, fare clic sul pulsante Microsoft Office e quindi su Opzioni di Excel.
    2. Nella finestra di dialogo Opzioni di Excel fare clic su Popolarie quindi fare clic per selezionare la scheda Mostra sviluppatore nella casella di controllo Barra multifunzione.
  3. Scegliere UserForm dal menu Inserisci.

  4. Disegnare un controllo Label nel modulo utente.

  5. Modificare le proprietà seguenti del controllo Label con i valori seguenti: | Proprietà| Valore| |---------------|-----------------------------| | Didascalia| A questo momento è possibile eseguire l'aggiornamento. Attendere...| Nota Se la finestra Proprietà non è visibile, scegliere Finestra Proprietà dal menu Visualizza .

  6. Disegnare un controllo Frame nel modulo utente.

  7. Modificare le proprietà seguenti del controllo Frame con i valori seguenti: | Proprietà | Valore| |---------|--------------------| | Nome FrameProgress|

  8. Disegnare un controllo Label nel controllo Frame.

  9. Modificare le proprietà seguenti del controllo Label con i valori seguenti: | Proprietà| Valore| |----------|---------------------------| | Nome | LabelProgress| | |& BackColor H000000FF&| | SpecialEffect |fmSpecialEffectRaised|

Digitare il codice macro

  1. Fare doppio clic sul modulo utente per aprire la finestra Codice per il modulo utente.

  2. Nel modulo digitare il codice seguente per l'evento UserForm_Activate :

    Private Sub UserForm_Activate()
        ' Set the width of the progress bar to 0.
        UserForm1.LabelProgress.Width = 0
    
    ' Call the main subroutine.
        Call Main
    End Sub
    
    
  3. Nel menu Inserisci, fare clic su Modulo.

  4. Nella finestra Codice per il modulo digitare il codice seguente:

    Sub ShowUserForm()
        UserForm1.Show
    End Sub
    
    Sub Main()
        Dim Counter As Integer
        Dim RowMax As Integer, ColMax As Integer
        Dim r As Integer, c As Integer
        Dim PctDone As Single
    
    Application.ScreenUpdating = False
        ' Initialize variables.
        Counter = 1
        RowMax = 100
        ColMax = 25
    
    ' Loop through cells.
        For r = 1 To RowMax
            For c = 1 To ColMax
                'Put a random number in a cell
                Cells(r, c) = Int(Rnd * 1000)
                Counter = Counter + 1
            Next c
    
    ' Update the percentage completed.
            PctDone = Counter / (RowMax * ColMax)
    
    ' Call subroutine that updates the progress bar.
            UpdateProgressBar PctDone
        Next r
        ' The task is finished, so unload the UserForm.
        Unload UserForm1
    End Sub
    
    Sub UpdateProgressBar(PctDone As Single)
        With UserForm1
    
    ' Update the Caption property of the Frame control.
            .FrameProgress.Caption = Format(PctDone, "0%")
    
    ' Widen the Label control.
            .LabelProgress.Width = PctDone * _
                (.FrameProgress.Width - 10)
        End With
    
    ' The DoEvents allows the UserForm to update.
        DoEvents
    End Sub
    
    
  5. Tornare a Excel.

  6. In Excel 2003 e nelle versioni precedenti di Excel scegliere Macro dal menu Strumenti e quindi fare clic su Macro.

    In Excel 2007 fare clic su Macro nel gruppo Codice della scheda Sviluppo .

  7. Nella finestra di dialogo Macro fare clic per selezionare ShowUserForm e quindi fare clic su Esegui.

Verrà visualizzata una finestra di dialogo con una barra di stato rossa. L'indicatore di stato aumenta man mano che la subroutine Main popola le celle del foglio di lavoro.

La subroutine ShowUserForm mostra il modulo utente. La routine associata all'evento Activate del modulo utente chiama la subroutine Main . La subroutine Main popola le celle con numeri casuali. Inoltre, la subroutine chiama la subroutine UpdateProgressBar che aggiorna il controllo Label nel modulo utente.

Nota Quando si usa questa tecnica, la macro impiega solo un po' più tempo per completare le attività previste.