/ / Excel VBA Interactive Userform

Excel VBA Interactive Userform

Nedan ser vi på ett program i Excel VBA som skapar en interaktivt användarformulär. Användarformen vi ska skapa ser ut som följer:

Excel VBA Interactive Userform

Förklaring: när du anger ett värde i textrutan ID fyller Excel VBA motsvarande post. När du klickar på Edit / Add-knappen, ändrar Excel VBA posten på arket eller lägger till posten när ID-en ännu inte existerar. Rensa-knappen raderar alla textrutor. Knappen Stäng stänger Userform.

För att skapa detta användarformulär, utför följande steg.

1. Öppna Visual Basic Editor. Om Project Explorer inte är synligt klickar du på Visa, Project Explorer.

2. Klicka på Insert, Userform. Om Verktygslådan inte visas automatiskt klickar du på Visa, Verktygslåda. Din skärm bör ställas in enligt nedan.

Userform Screen Setup i Excel VBA

3. Lägg till etiketterna, textrutorna (först överst, den andra under den första och så vidare) och kommandoknappar. När detta har slutförts ska resultatet överensstämma med bilden av användarformen som visats tidigare. Skapa till exempel en textruta kontroll genom att klicka på Textbox från Verktygslådan. Därefter kan du dra en textruta i användarformuläret.

4. Du kan ändra namn och bildtexter på kontrollerna. Namnen används i Excel VBA-koden. Bildtext är de som visas på din skärm. Det är bra att ändra namnen på kontrollerna, men det är inte nödvändigt här eftersom vi bara har några kontroller i det här exemplet. Om du vill ändra bildtexten på etiketterna, textrutorna och kommandoknapparna klickar du på Visa, Egenskaper fönstret och klickar på varje kontroll.

5. För att visa användarformen, placera en kommandoknapp på ditt arbetsblad och lägg till följande kodrad:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Vi ska nu skapa Sub UserForm_Initialize. När du använder Visa-metoden för användarformuläret utförs denna del automatiskt.

6. Öppna Visual Basic Editor.

7. I Project Explorer högerklickar du på UserForm1 och klickar sedan på Visa kod.

8. Välj Användarformulär i den nedrullningsbara listrutan. Välj Initialize från den högra rullgardinsmenyn.

9. Lägg till följande kodlinje:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Förklaring: Denna kodlinje sätter fokus på den första textrutan eftersom det är här vi vill starta när Userform är laddad.

Vi har nu skapat den första delen av Userform. Även om det ser snyggt ut, kommer ingenting att hända ännu när vi anger ett värde i textrutan ID eller när vi klickar på en av kommandoknapparna.

10. I Project Explorer högerklickar du på UserForm1 och klickar sedan på Visa kod.

11. Välj TextBox1 från den nedrullningsbara listrutan. Välj Ändra från den högra rullgardinsmenyn.

12. Lägg till följande kodrad:

Private Sub TextBox1_Change()

GetData

End Sub

13. Dubbelklicka på UserForm1 i Project Explorer.

14. Dubbelklicka på Edit / Add kommandoknappen.

15. Lägg till följande kodrad:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Dubbelklicka på kommandot Radera.

17. Lägg till följande kodrad:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Förklaring: Dessa subs kallar andra subs vi ska skapa på en sekund.

18. Dubbelklicka på kommandot Stäng.

19. Lägg till följande kodrad:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Förklaring: Denna kodrad stänger Userform.

Tid för att skapa subs. Du kan gå igenom vårt kapitel Funktion och kapitel för att lära dig mer om subs. Om du har bråttom, sätt bara följande subs i en modul (Klicka på Infoga, modul i Visual Basic Editor).

20. Förklara först tre variabler av typen Integer och en variabel av typen Boolean. Förklara variablerna i avsnittet Allmänna förklaringar (högst upp på modulen). På så sätt behöver du bara deklarera variablerna en gång och du kan använda dem i flera subs.

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

21. Lägg till 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

Förklaring: Om ID-textrutan innehåller ett numeriskt värde söker Excel VBA efter ID-en och laddar motsvarande post. Vi använder Controls Collection för att enkelt gå igenom textrutor. Om Excel VBA inte kan hitta ID-en (flaggan är fortfarande falsk) tömmer den andra och tredje textrutan. Om ID-textrutan inte innehåller ett numeriskt värde, kallas Excel VBA i ClearForm-delen.

22. Lägg till ClearForm-suben.

Sub ClearForm()

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

End Sub

Förklaring: Excel VBA rensar alla textrutorna.

23. Lägg till EditAdd-undermenyn.

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

Förklaring: Om ID-textrutan inte är tom, ändrar Excel VBA posten på arket (motsatsen till att du laddar in en post som vi tidigare sett). Om Excel VBA inte kan hitta ID-en (flaggan är fortfarande falsk) lägger den till posten till nästa tomma rad. Variabeln emptyRow är den första tomma raden och ökar varje gång en post läggs till.

24. Avsluta Visual Basic Editor, skriv in etiketterna nedan till rad 1 och testa användarformuläret.

Excel VBA Interactive Userform

Läs också: