/ / Excel VBA Interactive Userform

Excel VBA Interactive Userform

Nedenfor vil vi se på et program i Excel VBA der skaber en interaktive brugerformular. Brugerformularen, vi skal oprette, ser ud som følger:

Excel VBA Interactive Userform

Forklaring: Når du indtaster en værdi i ID-tekstboksen, indlæser Excel VBA den tilsvarende post. Når du klikker på knappen Rediger / Tilføj, redigerer Excel VBA posten på arket eller tilføjer pladen, når ID'et endnu ikke eksisterer. Knappen Ryd fjerner alle tekstbokse. Luk knappen lukker brugerformularen.

For at oprette denne brugerformular, udfør følgende trin.

1. Åbn Visual Basic Editor. Hvis Project Explorer ikke er synlig, skal du klikke på Vis, Project Explorer.

2. Klik på Indsæt, Brugerformular. Hvis værktøjskassen ikke vises automatisk, skal du klikke på Vis, Værktøjskasse. Din skærm skal opsættes som nedenfor.

Brugerform Screen Setup i Excel VBA

3. Tilføj etiketterne, tekstbokse (først øverst, andet under første osv.) Og kommandoknapper. Når dette er gennemført, skal resultatet være i overensstemmelse med billedet af den tidligere viste brugerformular. For eksempel opret en tekstboks kontrol ved at klikke på TextBox fra Toolbox. Derefter kan du trække en tekstboks på Brugerformularen.

4. Du kan ændre navnene og teksten på kontrollerne. Navne bruges i Excel VBA-koden. Undertekster er dem, der vises på din skærm. Det er god praksis at ændre navnene på kontrollerne, men det er ikke nødvendigt her, fordi vi kun har få kontroller i dette eksempel. Hvis du vil ændre billedteksten på etiketterne, tekstfelterne og kommandoknapperne, skal du klikke på Vis, Egenskaber Vindue og klikke på hver kontrol.

5. For at vise brugerformularen skal du placere en kommandoknap på dit regneark og tilføje følgende kode linje:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Vi skal nu oprette Sub UserForm_Initialize. Når du bruger visningsmetoden til brugerformularen, udføres denne under automatisk.

6. Åbn Visual Basic Editor.

7. I Project Explorer skal du højreklikke på UserForm1 og derefter klikke på View Code.

8. Vælg Brugerform fra den venstre rullemenu. Vælg Initialize fra den højre rulleliste.

9. Tilføj følgende kode linje:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Forklaring: Denne kode linje sætter fokus på den første tekstboks, da det er her, vi ønsker at starte, når brugerformularen er indlæst.

Vi har nu oprettet den første del af brugerformularen. Selv om det ser pænt ud, sker der intet endnu, når vi indtaster en værdi i ID-tekstboksen eller når vi klikker på en af ​​kommandoknapperne.

10. I Project Explorer skal du højreklikke på UserForm1 og derefter klikke på View Code.

11. Vælg TextBox1 fra den venstre rullemenu. Vælg Skift fra den højre rulleliste.

12. Tilføj følgende kode linje:

Private Sub TextBox1_Change()

GetData

End Sub

13. Dobbeltklik på UserForm1 i Project Explorer.

14. Dobbeltklik på Edit / Add kommandoknappen.

15. Tilføj følgende kode linje:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Dobbeltklik på kommandoen Ryd slet.

17. Tilføj følgende kode linje:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Forklaring: Disse subs samtale andre subs vi skal oprette om et sekund.

18. Dobbeltklik på knappen Luk kommando.

19. Tilføj følgende kode linje:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Forklaring: Denne kode linje lukker brugerformularen.

Tid til at oprette subs. Du kan gennemgå vores Funktion og Under kapitel for at lære mere om subs. Hvis du har travlt, skal du blot placere følgende subs i et modul (Klik på Indsæt, modul i Visual Basic Editor).

20. Forklar først tre variabler af typen Integer og en variabel af typen Boolean. Erklære variablerne i afsnittet generelle deklarationer (øverst på modulet). På denne måde skal du kun deklarere variablerne en gang, og du kan bruge dem i flere subs.

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

21. Tilføj 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

Forklaring: Hvis ID-tekstboksen indeholder en numerisk værdi, søger Excel VBA efter id'et og indlæser den tilsvarende post. Vi bruger Controls Collection til let at løbe gennem tekstbokse. Hvis Excel VBA ikke kan finde ID'et (flag er stadig falsk) tømmer det andet og tredje tekstfelt. Hvis ID-tekstboksen ikke indeholder en numerisk værdi, kalder Excel VBA i feltet ClearForm.

22. Tilføj ClearForm sub.

Sub ClearForm()

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

End Sub

Forklaring: Excel VBA sletter alle tekstbokse.

23. Tilføj EditAdd-undermenuen.

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

Forklaring: Hvis ID-tekstboksen ikke er tom, redigerer Excel VBA posten på arket (det modsatte af at indlæse en post som vi tidligere har set). Hvis Excel VBA ikke kan finde ID'et (flag er stadig falsk), tilføjer det posten til næste tomme række. Variabel emptyRow er den første tomme række og øges hver gang en post tilføjes.

24. Afslut Visual Basic Editor, indtast etiketterne vist nedenfor i række 1 og test brugerformularen.

Excel VBA Interactive Userform

Læs også: