/ / VBA Userform interattivo di Excel

Excel VBA Userform interattivo

Di seguito vedremo un programma in Excel VBA che crea un Userform interattivo. L'Userform che stiamo per creare appare come segue:

Excel VBA Userform interattivo

Spiegazione: ogni volta che si immette un valore nella casella di testo ID, VBA di Excel carica il record corrispondente. Quando si fa clic sul pulsante Modifica / Aggiungi, VBA di Excel modifica il record sul foglio o aggiunge il record quando l'ID non esiste ancora. Il pulsante Cancella cancella tutte le caselle di testo. Il pulsante Chiudi chiude l'Userform.

Per creare questo Userform, eseguire i seguenti passaggi.

1. Aprire il Visual Basic Editor. Se Project Explorer non è visibile, fai clic su Visualizza, Esplora progetti.

2. Fare clic su Inserisci, Userform. Se la casella degli strumenti non viene visualizzata automaticamente, fare clic su Visualizza, Casella degli strumenti. Lo schermo dovrebbe essere impostato come di seguito.

Impostazione della schermata Userform in Excel VBA

3. Aggiungi le etichette, le caselle di testo (prima nella parte superiore, la seconda sotto la prima e così via) e i pulsanti di comando. Una volta che questo è stato completato, il risultato dovrebbe essere coerente con l'immagine della forma utente mostrata in precedenza. Ad esempio, creare un controllo casella di testo facendo clic su TextBox dalla casella degli strumenti. Successivamente, puoi trascinare una casella di testo sul modulo utente.

4. È possibile modificare i nomi e le didascalie dei controlli. I nomi sono utilizzati nel codice VBA di Excel. Le didascalie sono quelle che appaiono sullo schermo. È buona norma cambiare i nomi dei controlli, ma qui non è necessario perché in questo esempio abbiamo solo alcuni controlli. Per modificare la didascalia delle etichette, caselle di testo e pulsanti di comando, fare clic su Visualizza, Finestra Proprietà e fare clic su ciascun controllo.

5. Per visualizzare Userform, posizionare un pulsante di comando nel foglio di lavoro e aggiungere la seguente riga di codice:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Ora creeremo Sub UserForm_Initialize. Quando si utilizza il metodo Show per Userform, questo sub verrà eseguito automaticamente.

6. Aprire il Visual Basic Editor.

7. Nell'Esplora progetti, fare clic con il pulsante destro su UserForm1 e quindi scegliere Visualizza codice.

8. Selezionare Userform dall'elenco a discesa a sinistra. Scegli Inizializza dall'elenco a discesa a destra.

9. Aggiungi la seguente riga di codice:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Spiegazione: questa riga di codice imposta l'attenzione sulla prima casella di testo poiché è qui che vogliamo iniziare quando viene caricato il form utente.

Ora abbiamo creato la prima parte di Userform. Anche se sembra già pulito, non accadrà ancora nulla quando inseriremo un valore nella casella di testo ID o quando clicchiamo su uno dei pulsanti di comando.

10. Nell'Esplora progetti, fare clic con il pulsante destro su UserForm1 e quindi scegliere Visualizza codice.

11. Scegli TextBox1 dall'elenco a discesa a sinistra. Scegli Cambia dall'elenco a discesa a destra.

12. Aggiungi la seguente riga di codice:

Private Sub TextBox1_Change()

GetData

End Sub

13. Nell'Esplora progetti, fare doppio clic su UserForm1.

14. Fare doppio clic sul pulsante Modifica / Aggiungi comando.

15. Aggiungere la seguente riga di codice:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Fare doppio clic sul pulsante Cancella comando.

17. Aggiungi la seguente riga di codice:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Spiegazione: questi sottotitoli chiamano altri sottotitoli che creeremo in un secondo.

18. Fare doppio clic sul pulsante di comando Chiudi.

19. Aggiungi la seguente riga di codice:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Spiegazione: questa riga di codice chiude l'Userform.

È ora di creare i sottotitoli. È possibile consultare il capitolo Funzione e Sottotitolo per ulteriori informazioni sui sottotitoli. Se si ha fretta, è sufficiente posizionare i seguenti sottotitoli in un modulo (nel Visual Basic Editor, fare clic su Inserisci, Modulo).

20. Innanzitutto, dichiarare tre variabili di tipo Integer e una variabile di tipo Boolean. Dichiarare le variabili nella sezione General Declarations (nella parte superiore del modulo). In questo modo devi solo dichiarare le variabili una volta e puoi usarle in più sottotitoli.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean

21. Aggiungi il sub GetData.

Sub GetData()

If IsNumeric(UserForm1.TextBox1.Value) Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value

    Do While Cells(i + 1, 1).Value <> ""

        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value
            Next j
        End If

        i = i + 1

    Loop

    If flag = False Then
        For j = 2 To 3
            UserForm1.Controls("TextBox" & j).Value = ""
        Next j
    End If

Else
    ClearForm
End If

End Sub

Spiegazione: Se la casella di testo ID contiene un valore numerico, Excel VBA cerca l'ID e carica il record corrispondente. Utilizziamo la collezione Controls per scorrere facilmente le caselle di testo. Se Excel VBA non riesce a trovare l'ID (flag è ancora False), svuota la seconda e terza casella di testo. Se la casella di testo ID non contiene un valore numerico, VBA di Excel chiama il sub ClearForm.

22. Aggiungi il sub ClearForm.

Sub ClearForm()

For j = 1 To 3
    UserForm1.Controls("TextBox" & j).Value = ""
Next j

End Sub

Spiegazione: Excel VBA cancella tutte le caselle di testo.

23. Aggiungi il sub EditAdd.

Sub EditAdd()

Dim emptyRow As Long

If UserForm1.TextBox1.Value <> "" Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value
    emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1

    Do While Cells(i + 1, 1).Value <> ""

        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value
            Next j
        End If

        i = i + 1

    Loop

    If flag = False Then
        For j = 1 To 3
            Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value
        Next j
    End If

End If

End Sub

Spiegazione: Se la casella di testo ID non è vuota, Excel VBA modifica il record sul foglio (l'opposto del caricamento di un record come abbiamo visto in precedenza). Se Excel VBA non riesce a trovare l'ID (il flag è ancora False), aggiunge il record alla riga vuota successiva. La variabile emptyRow è la prima riga vuota e aumenta ogni volta che viene aggiunto un record.

24. Chiudere il Visual Basic Editor, immettere le etichette mostrate di seguito nella riga 1 e verificare l'Userform.

Excel VBA Userform interattivo

Leggi anche: