Di seguito vedremo un programma in Excel VBA che crea un Userform interattivo. Il form ci accingiamo a creare look come segue:

Excel VBA Interactive Userform

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

Per creare questo form, eseguire i seguenti passaggi.

  1. Aprire il Visual Basic Editor. Se il progetto Explorer non è visibile, fare clic su Visualizza, progetti.

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

Userform Screen Setup in Excel VBA

  1. Aggiungere le etichette, caselle di testo (prima in alto, il secondo sotto il primo, e così via) e pulsanti di comando. Una volta che questo è stato completato, il risultato deve essere coerente con l’immagine del Userform mostrato in precedenza. Ad esempio, creare un testo di controllo di dialogo facendo clic sul TextBox dalla casella degli strumenti. Successivamente, è possibile trascinare una casella di testo sopra il Form utente.

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

  3. Per mostrare il form, inserire un pulsante di comando nel foglio di lavoro e aggiungere la riga di codice seguente:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Ora stiamo andando a creare l’UserForm_Initialize Sub. Quando si utilizza il metodo Show per il form, verrà automaticamente eseguito questo sub.

  1. Aprire il Visual Basic Editor.

  2. In Esplora progetti, fare clic destro su UserForm1 e quindi fare clic su Visualizza codice.

  3. Scegliere Userform dall’elenco a discesa sinistra. Scegli inizializzazione dall’elenco a discesa a destra.

  4. Aggiungere la seguente riga di codice:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Spiegazione: questa riga di codice imposta il focus sulla prima casella di testo come questo è dove vogliamo iniziare quando il form viene caricato.

Abbiamo creato la prima parte del form utente. Anche se sembra già pulito, non succederà nulla ma quando si entra in un valore nella casella di testo ID o quando si fa clic su uno dei pulsanti di comando.

  1. In Esplora progetti, fare clic destro su UserForm1 e quindi fare clic su Visualizza codice.

  2. Scegliere TextBox1 dall’elenco a discesa sinistra. Seleziona Cambia dall’elenco a discesa a destra.

  3. Aggiungere la seguente riga di codice:

Private Sub TextBox1_Change()

GetData

End Sub
  1. In Esplora progetti, fare doppio clic su UserForm1.

  2. Fare doppio clic sul Modifica / Aggiungi pulsante di comando.

  3. Aggiungere il seguente riga di codice:

Private Sub CommandButton1_Click()

EditAdd

End Sub
  1. Fare doppio clic sul pulsante di comando Cancella.

  2. Aggiungere il seguente riga di codice:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Spiegazione: questi sottomarini chiamano altri sub che stiamo per creare in un secondo.

  1. Fare doppio clic sul pulsante di comando Chiudi.

  2. Aggiungere il seguente riga di codice:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Spiegazione: questa riga di codice chiude il form.

Tempo per creare i sottotitoli. Si può passare attraverso la nostra funzione e sub capitolo per saperne di più su Subs. Se siete di fretta, è sufficiente posizionare i seguenti sub in un modulo (in Visual Basic Editor, fare clic su Inserisci, Module).

  1. In primo luogo, dichiarare tre variabili di tipo integer e una variabile di tipo booleana. Dichiarare le variabili nella sezione dichiarazioni generali (nella parte superiore del modulo). In questo modo si hanno solo per dichiarare le variabili una volta e si possono utilizzare in più subs.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean
  1. Aggiungere 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. Usiamo il link: / VBA-esempi-controlli-raccolta [Controls Collection] facilmente scorrere le caselle di testo. Se Excel VBA non riesce a trovare l’ID (bandiera è ancora Falso), si svuota la seconda e la terza casella di testo. Se la casella di testo ID non contiene un valore numerico, Excel VBA chiama il sub ClearForm.

  1. Aggiungere 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.

  1. Aggiungere 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 di caricamento di un record, come abbiamo visto in precedenza).

Se Excel VBA non riesce a trovare l’ID (bandiera è ancora Falso), si aggiunge il record alla riga successiva vuota. L’emptyRow variabile è la prima riga vuota e aumenta ogni volta che viene aggiunto un record.

  1. Uscire Visual Basic Editor, inserire le etichette mostrate di seguito in riga 1 e testare l’Userform.

Excel VBA Interactive Userform