/ / Excel VBA Interactive Userform

Excel VBA Interactive Userform

Nedenfor ser vi på et program i Excel VBA som skaper en Interaktiv brukerform. Brukerformen vi skal lage, ser ut som følger:

Excel VBA Interactive Userform

Forklaring: Når du oppgir en verdi i ID-tekstboksen, laster Excel VBA den tilhørende posten. Når du klikker på Edit / Add-knappen, endrer Excel VBA oppføringen på arket eller legger til posten når IDen ikke eksisterer. Klar-knappen sletter alle tekstbokser. Lukk-knappen lukker Userform.

For å opprette denne brukerformen, utfør følgende trinn.

1. Åpne Visual Basic Editor. Hvis Project Explorer ikke er synlig, klikker du på Vis, Project Explorer.

2. Klikk på Sett inn, Brukerform. Hvis Verktøykassen ikke vises automatisk, klikker du på Vis, Verktøykasse. Skjermen din bør settes opp som nedenfor.

Userform Screen Setup i Excel VBA

3. Legg til etikettene, tekstbokser (først øverst, den andre under den første og så videre) og kommandoknappene. Når dette er fullført, bør resultatet være i tråd med bildet av brukerformen som ble vist tidligere. For eksempel, opprett en tekstbokskontroll ved å klikke på Tekstboks fra Verktøykassen. Deretter kan du dra en tekstboks på brukerformularen.

4. Du kan endre navnene og bildeteksten til kontrollene. Navnene brukes i Excel VBA-koden. Undertekster er de som vises på skjermen. Det er god praksis å endre navnene på kontrollene, men det er ikke nødvendig her fordi vi bare har noen få kontroller i dette eksemplet. Hvis du vil endre bildeteksten på etikettene, tekstfeltene og kommandoknappene, klikker du Vis, Egenskaper Vindu og klikker på hver kontroll.

5. For å vise brukerformatet, legg en kommandoknapp på regnearket og legg til følgende kodelinje:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Vi skal nå lage Sub UserForm_Initialize. Når du bruker Show-metoden for brukerformularen, blir denne delen automatisk utført.

6. Åpne Visual Basic Editor.

7. I Project Explorer, høyreklikk på UserForm1 og klikk deretter Vis kode.

8. Velg Brukerform fra den venstre rullegardinlisten. Velg Initialize fra den høyre rullegardinlisten.

9. Legg til følgende kodelinje:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Forklaring: Denne kodelinjen setter fokus på den første tekstboksen, da det er her vi ønsker å starte når brukerformatet er lastet inn.

Vi har nå opprettet den første delen av brukerformen. Selv om det ser pent ut, vil ingenting skje ennå når vi legger inn en verdi i ID-tekstboksen eller når vi klikker på en av kommandoknappene.

10. I Project Explorer, høyreklikk på UserForm1 og klikk deretter Vis kode.

11. Velg TextBox1 fra den venstre rullegardinlisten. Velg Endre fra den høyre rullegardinlisten.

12. Legg til følgende kodelinje:

Private Sub TextBox1_Change()

GetData

End Sub

13. Dobbeltklikk på UserForm1 i Project Explorer.

14. Dobbeltklikk på Edit / Add kommandoknappen.

15. Legg til følgende kodelinje:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Dobbeltklikk på kommandoen Slett.

17. Legg til følgende kode linje:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Forklaring: Disse abonnementene kalles andre subs vi skal lage om et sekund.

18. Dobbeltklikk på kommandoen Lukk.

19. Legg til følgende kodelinje:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Forklaring: Denne kodelinjen lukker Userform.

Tid til å lage subs. Du kan gå gjennom vårt funksjons- og underkapittel for å lære mer om subs. Hvis du har det travelt, må du bare plassere følgende subs i en modul (I Visual Basic Editor klikker du Insert Insert, Module).

20. Først erklæres tre variabler av typen Integer og en variabel av typen Boolean. Erklære variablene i delen Generelle deklarasjoner (øverst på modulen). På denne måten må du kun deklarere variablene en gang, og du kan bruke dem i flere subs.

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

21. Legg til GetData-delen.

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 inneholder en numerisk verdi, søker Excel VBA etter ID-en og laster tilsvarende plate. Vi bruker Controls Collection til å enkelt gå gjennom tekstbokser. Hvis Excel VBA ikke finner IDen (flagg er fremdeles falsk), tømmer den andre og tredje tekstboksen. Hvis ID-tekstboksen ikke inneholder en numerisk verdi, kalles Excel VBA i feltet ClearForm.

22. Legg til ClearForm-suben.

Sub ClearForm()

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

End Sub

Forklaring: Excel VBA sletter alle tekstbokser.

23. Legg til EditAdd-undermenyen.

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, endrer Excel VBA oppføringen på arket (det motsatte av å legge inn en plate som vi tidligere har sett). Hvis Excel VBA ikke finner IDen (flagg er fremdeles falsk), legger den til posten til neste tomme rad. Varianten emptyRow er den første tomme raden og øker hver gang en plate legges til.

24. Avslutt Visual Basic Editor, skriv inn etikettene som er vist nedenfor i rad 1 og test brukerformen.

Excel VBA Interactive Userform

Les også: