/ / Excel VBA interactivă

Formatul de interacțiune Excel VBA interactiv

Mai jos ne vom uita la un program în Excel VBA care creează un formular interactiv. Formularul de utilizator pe care îl vom crea arată după cum urmează:

Formatul de interacțiune Excel VBA interactiv

Explicaţie: ori de câte ori introduceți o valoare în caseta de text ID, Excel VBA încarcă înregistrarea corespunzătoare. Când faceți clic pe butonul Editați / Adăugați, Excel VBA editează înregistrarea pe foaie sau adaugă înregistrarea atunci când ID-ul nu există încă. Butonul Șterge șterge toate casetele de text. Butonul Închidere închide formularul User.

Pentru a crea această formă de utilizator, executați următorii pași.

1. Deschideți Editorul Visual Basic. Dacă Project Explorer nu este vizibil, faceți clic pe Vizualizare, Project Explorer.

2. Faceți clic pe Inserare, Formă utilizator. Dacă Toolbox-ul nu apare automat, faceți clic pe View (Vizualizare), Toolbox (Instrumente). Ecranul dvs. trebuie să fie configurat ca mai jos.

Setarea ecranului utilizatorului în Excel VBA

3. Adăugați etichetele, casetele de text (mai întâi în partea de sus, a doua sub prima și așa mai departe) și butoanele de comandă. Odată terminată, rezultatul ar trebui să fie în concordanță cu imaginea formularului de utilizator afișat mai devreme. De exemplu, creați un control al casetei de text făcând clic pe TextBox din caseta de instrumente. Apoi, puteți glisa o casetă de text pe Userform.

4. Puteți modifica numele și subtitrarea comenzilor. Numele sunt utilizate în codul Excel VBA. Titlurile sunt cele care apar pe ecran. Este o practică bună schimbarea numelor comenzilor, dar nu este necesară aici, deoarece avem doar câteva controale în acest exemplu. Pentru a modifica legenda etichetelor, casetelor de text și butoanelor de comandă, faceți clic pe Vizualizare, pe fereastra de proprietăți și faceți clic pe fiecare comandă.

5. Pentru a afișa Userform, plasați un buton de comandă pe foaia de lucru și adăugați următoarea linie de cod:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Acum vom crea Sub UserForm_Initialize. Când utilizați metoda de afișare pentru formularul de utilizator, această secțiune va fi executată automat.

6. Deschideți Editorul Visual Basic.

7. În Project Explorer, faceți clic dreapta pe UserForm1 și apoi faceți clic pe View Code (Vizualizare cod).

8. Selectați Format utilizator din lista verticală stânga. Selectați Inițializare din lista derulantă din dreapta.

9. Adăugați următoarea linie de cod:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Explicație: această linie de coduri setează focalizarea pe prima casetă de text, deoarece acesta este locul în care dorim să începem când este încărcat Userform.

Am creat acum prima parte a Userform. Deși arată deja bine, nu se va întâmpla nimic încă atunci când introduceți o valoare în caseta de text ID sau când faceți clic pe unul dintre butoanele de comandă.

10. În Project Explorer, faceți clic dreapta pe UserForm1 și apoi faceți clic pe View Code (Vizualizare cod).

11. Alegeți TextBox1 din lista derulantă din stânga. Alegeți Schimbare din lista derulantă din dreapta.

12. Adăugați următoarea linie de cod:

Private Sub TextBox1_Change()

GetData

End Sub

13. În Project Explorer, faceți dublu clic pe UserForm1.

14. Faceți dublu clic pe butonul Editare / Adăugare comandă.

15. Adăugați următoarea linie de cod:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Faceți dublu clic pe butonul Ștergere comandă.

17. Adăugați următoarea linie de cod:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Explicație: aceste subsuri numesc alte subsoluri pe care le vom crea într-o secundă.

18. Faceți dublu clic pe butonul Închidere comandă.

19. Adăugați următoarea linie de cod:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Explicație: această linie de cod închide Formatul de utilizator.

Timpul pentru a crea subs. Puteți trece prin capitolul Funcții și capitole pentru a afla mai multe despre subs. Dacă vă grăbiți, plasați pur și simplu următoarele subansambluri într-un modul (în Editorul Visual Basic, faceți clic pe Inserare, Modul).

20. Mai întâi, declarați trei variabile de tip Integer și o variabilă de tip Boolean. Declarați variabilele în secțiunea Declarații generale (în partea de sus a modulului). În acest fel trebuie doar să declarați variabilele o singură dată și le puteți folosi în mai multe subs.

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

21. Adăugați GetData sub.

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

Explicaţie: Dacă caseta text ID conține o valoare numerică, Excel VBA caută ID-ul și încarcă înregistrarea corespunzătoare. Folosim Colecția de Controale pentru a accesa cu ușurință casetele de text. Dacă Excel VBA nu poate găsi ID-ul (pavilionul este încă neclar), acesta va goli a doua și a treia casetă de text. Dacă caseta text ID nu conține o valoare numerică, Excel VBA apelează submeniul ClearForm.

22. Adăugați submeniul ClearForm.

Sub ClearForm()

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

End Sub

Explicație: Excel VBA șterge toate casetele de text.

23. Adăugați subdița 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

Explicaţie: Dacă caseta text ID nu este goală, Excel VBA editează înregistrarea de pe foaie (opusul încărcării unei înregistrări așa cum am văzut mai devreme). Dacă Excel VBA nu poate găsi ID-ul (pavilionul este încă neatins), acesta adaugă înregistrarea la următorul rând gol. Variabila emptyRow este primul rând gol și crește de fiecare dată când este adăugată o înregistrare.

24. Ieșiți din Editorul Visual Basic, introduceți etichetele de mai jos în rândul 1 și testați Userform.

Formatul de interacțiune Excel VBA interactiv

De asemenea, citiți: