/ / Excel VBA Interaktív felhasználói formanyomtatvány

Excel VBA interaktív felhasználói formanyomtatvány

Az alábbiakban egy programot nézünk be Excel VBA ami létrehoz egy interaktív Userform. A felhasználói forma, amelyet meg fogunk alkotni, a következőképpen néz ki:

Excel VBA interaktív felhasználói formanyomtatvány

Magyarázat: amikor megad egy értéket az azonosító szövegmezőbe, az Excel VBA betölti a megfelelő rekordot. Amikor a Szerkesztés / Hozzáadás gombra kattint, az Excel VBA módosítja a rekordot a lapon, vagy hozzáadja a rekordot, ha az azonosító még nem létezik. A Törlés gomb törli az összes szövegdobozt. A Close (Bezárás) gomb bezárja a felhasználói kódot.

A Userform létrehozásához hajtsa végre a következő lépéseket.

1. Nyissa meg a Visual Basic Editor alkalmazást. Ha a Project Explorer nem látható, kattintson a Nézet, a Project Explorer elemre.

2. Kattintson a Beszúrás, Felhasználóformátum elemre. Ha az Eszköztár nem jelenik meg automatikusan, kattintson a Nézet, Eszköztár elemre. A képernyő beállítása az alábbiak szerint történik.

Userform képernyőbeállítás az Excel VBA-ban

3. Adja hozzá a címkéket, szövegdobozokat (először a tetején, a második az első alatt, stb.) És a parancsgombokat. Miután ez befejeződött, az eredménynek összhangban kell lennie a korábban bemutatott Userform képével. Például készítsen szövegdoboz-vezérlést az Eszköztárban lévő TextBox gombra kattintva. Ezután húzza a szövegmezőt a Userformon.

4. Megváltoztathatja a vezérlők nevét és feliratait. A neveket az Excel VBA kódban használják. Feliratok azok, amelyek a képernyőn jelennek meg. Jó gyakorlat a vezérlők nevének megváltoztatása, de itt nem szükséges, mert ebben a példában csak néhány kontroll van. A címkék, szövegdobozok és parancsgombok címkéjének módosításához kattintson a Nézet, a Tulajdonságok ablakra, és kattintson az egyes vezérlőkre.

5. A Userform megjelenítéséhez helyezze a parancsgombot a munkalapra, és adja hozzá a következő kódot:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Most létrehozzuk a Sub UserForm_Initialize-t. Amikor a Userform metódust használja, ez a rész automatikusan végrehajtásra kerül.

6. Nyissa meg a Visual Basic Editor alkalmazást.

7. A Project Explorerben kattintson jobb gombbal a UserForm1-re, majd kattintson a View Code (Kód megtekintése) parancsra.

8. A bal oldali legördülő listáról válassza a Userform (Felhasználóformátum) lehetőséget. Válassza az Initialize lehetőséget a jobb legördülő listából.

9. Adja hozzá a következő kódot:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Magyarázat: ez a kódsor az első szövegmezőre helyezi a hangsúlyt, mivel itt kell elkezdeni a Userform betöltésekor.

Most létrehoztuk a Userform első részét. Bár már jól néz ki, még akkor sem történik semmi, amikor megadunk egy értéket az azonosító szövegmezőben, vagy ha az egyik parancsgombra kattintunk.

10. A Project Explorerben kattintson jobb gombbal a UserForm1-re, majd kattintson a Kód megtekintése parancsra.

11. Válassza a TextBox1 lehetőséget a bal oldali legördülő listából. Válassza a Módosítás lehetőséget a megfelelő legördülő listából.

12. Adja hozzá a következő kódot:

Private Sub TextBox1_Change()

GetData

End Sub

13. A Project Explorer programban kattintson duplán a UserForm1-re.

14. Kattintson duplán az Edit / Add parancs gombra.

15. Adja hozzá a következő kódot:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Kattintson duplán a Clear parancsra.

17. Adja hozzá a következő kódot:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Magyarázat: ezek a subs hívnak más algoritmusokat, amelyeket egy másodperc alatt létrehozunk.

18. Kattintson duplán a Close parancsra.

19. Adja hozzá a következő kódsor:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Magyarázat: ez a kódsor bezárja a Userform-ot.

A támogatás létrehozásának ideje. A Funkció és a Sub fejezeten keresztül tudhat meg többet a subsről. Ha siet, egyszerűen helyezze el a következő parancsokat egy modulba (A Visual Basic Editorban kattintson a Beszúrás, Modul lehetőségre).

20. Először három változót írjunk be az Integer és a Boolean típusú változók közül. Mondja ki a változókat az Általános deklarációk részben (a modul tetején). Így csak egyszer kell deklarálnia a változókat, és használhatja őket többszörös subs.

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

21. Adja hozzá a GetData almát.

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

Magyarázat: Ha az azonosító szöveges mezője numerikus értéket tartalmaz, az Excel VBA megkeresi az azonosítót, és betölti a megfelelő rekordot. A Controls Collection segítségével könnyedén átmegy a szövegdobozokon. Ha az Excel VBA nem találja az azonosítót (a zászló még mindig hamis), akkor kiüríti a második és a harmadik szövegmezőt. Ha az azonosító szövegmező nem tartalmaz numerikus értéket, az Excel VBA felhívja a ClearForm alrészletet.

22. Adja hozzá a ClearForm almát.

Sub ClearForm()

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

End Sub

Magyarázat: Az Excel VBA törli az összes szövegdobozt.

23. Adja hozzá a Szerkesztés hozzáadása részt.

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

Magyarázat: Ha az azonosító szövegmező nem üres, akkor az Excel VBA módosítja a rekordot a lapon (ellentétben a rekordok betöltésével, mint korábban láttuk). Ha az Excel VBA nem találja az azonosítót (a zászló még mindig hamis), akkor a rekordot a következő üres sorhoz adja. Az emptyRow változó az első üres sor, amely minden rekord hozzáadásakor növekszik.

24. Lépjen ki a Visual Basic Editor alkalmazásból, majd adja meg az alább látható címkéket az 1. sorba, és próbálja meg a Userform-ot.

Excel VBA interaktív felhasználói formanyomtatvány

Szintén olvasható: