Cum creezi ferestre de dialog in Microsoft Excel

Configurare noua (How To)

Situatie

Pentru a imbunatati functionalitatea unui fisier Excel se pot crea ferestre de dialog similare cu cele din Windows, de unde utilizatorul poate selecta anumite optiuni.

De exemplu, vom crea o fereastra din care sa se poata completa o foaie de calcul Excel.

  • In aceasta fereastra, ori de câte ori introduceți o valoare în caseta de text ID, Excel VBA încarcă înregistrarea corespunzătoare. Când faceți click pe butonul Edit/Add, Excel editează înregistrarea de pe foaie sau adaugă înregistrarea când ID-ul nu există încă.
  • Butonul Clear șterge toate casetele de text. Butonul Close închide fereastra de dialog.

Pentru a crea aceasta fereastra de dialog, executați pașii următori.

Solutie

Pasi de urmat
  • Deschideți Editorul Visual Basic.
  • Dacă Project Explorer nu este vizibil, faceți click pe View > Project Explorer
  • Faceți click pe Insert > Userform. Dacă Caseta de instrumente nu apare automat, faceți click pe View > Toolbox. Ecranul dvs. ar trebui să fie configurat după cum urmează.

Adăugați etichete, casete de text (prima în partea de sus, a doua sub prima și așa mai departe) și butoanele de comandă. Odată ce acest lucru a fost finalizat, rezultatul ar trebui să fie în concordanță cu imaginea ferestrei prezentată anterior. De exemplu, creați un control de casetă text făcând clic pe TextBox din Toolbox. Apoi, puteți trage o casetă de text pe formularul de utilizator.

Puteți schimba numele și subtitrările comenzilor. Numele sunt utilizate în codul VBA Excel. Subtitrările sunt cele care apar pe ecran. Este o bună practică să schimbați numele comenzilor, dar nu este necesar aici, deoarece avem doar câteva controale în acest exemplu. Pentru a modifica subtitrarea etichetelor, casetelor de text și butoanelor de comandă, faceți clic pe View > Properties și faceți click pe fiecare control.

Pentru a afișa fereastra de dialog, plasați un buton de comanda pe foaia de lucru și adăugați următoarea linie de cod:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Vom crea acum Sub UserForm_Initialize. Când utilizați metoda Show pentru fereastra de dialog, acest sub va fi executat automat.

Deschideți Editorul Visual Basic.

În Project Explorer, faceți clic dreapta pe UserForm1 și apoi faceți clic pe View Code.

Alegeți Userform din lista derulantă din stânga. Alegeți Initialize din lista verticală dreaptă.

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

Private Sub UserForm_Initialize ()

TextBox1.SetFocus

End Sub

Explicație: această linie de cod va oferi focus-ul primei casete de text, deoarece de aici dorim să începem când este încărcata fereastra de dialog.

Acum am creat prima parte a ferestrei de dialog. Deși pare deja îngrijit, nimic nu se va întâmpla încă atunci când introducem o valoare în caseta de text ID sau când facem click pe unul dintre butoanele de comandă.

În Project Explorer, faceți click dreapta pe UserForm1 și apoi faceți click pe View Code. Alegeți TextBox1 din lista derulantă din stânga. Alegeți Change din lista verticală dreaptă.

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

Private Sub TextBox1_Change ()

GetData

End Sub

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

Faceți dublu click pe butonul de comandă Edit / Add.

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

Private Sub CommandButton1_Click ()

EditAdd

End Sub

Faceți dublu click pe butonul de comandă Clear.

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

Private Sub CommandButton2_Click ()

ClearForm

End Sub

Explicație: acești subs fac apel la alți subs pe care îi vom crea într-o secundă.

Faceți dublu click pe butonul de comandă Close.

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

Private Sub CommandButton3_Click ()

Unload Me

End Sub

Explicație: această linie de cod închide fereastra de dialog.

Este timpul să creați subs. Dacă vă grăbiți, plasați pur și simplu următoarele subs într-un modul (În Editorul Visual Basic, faceți clic pe Insert > Module).

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

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

Adăugați sub-ul GetData.

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

Explicație: Dacă caseta de text ID conține o valoare numerică, Excel VBA caută ID-ul și încarcă înregistrarea corespunzătoare. Dacă Excel VBA nu poate găsi ID-ul (se returneaza False), golește a doua și a treia casetă de text. Dacă caseta de text ID nu conține o valoare numerică, Excel VBA apelează sub-ul ClearForm.

Adăugați sub-ul 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.

Adăugați sub-ul 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 de 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 (se returneaza False), adaugă înregistrarea la următorul rând gol. Variabila emptyRow este primul rând gol și crește de fiecare dată când se adaugă o înregistrare.

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

Tip solutie

Permanent

Voteaza

(6 din 16 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?