/ / Excel VBA Interactive Userform

Excel VBA Interactive Userform

Poniżej przyjrzymy się programowi w Excel VBA który tworzy interaktywna Userform. Forma użytkownika, którą utworzymy, wygląda następująco:

Excel VBA Interactive Userform

Wyjaśnienie: po wprowadzeniu wartości w polu tekstowym ID program Excel VBA ładuje odpowiedni rekord. Po kliknięciu przycisku Edycja / Dodaj program Excel VBA edytuje rekord na arkuszu lub dodaje rekord, gdy identyfikator jeszcze nie istnieje. Przycisk Wyczyść usuwa wszystkie pola tekstowe. Przycisk Zamknij zamyka formularz użytkownika.

Aby utworzyć tę Userform, wykonaj następujące kroki.

1. Otwórz Edytor Visual Basic. Jeśli Eksplorator projektu nie jest widoczny, kliknij opcję Widok, Eksplorator projektu.

2. Kliknij Wstaw, Formularz użytkownika. Jeśli Zestaw narzędzi nie pojawi się automatycznie, kliknij opcję Widok, Przybornik. Twój ekran powinien być ustawiony jak poniżej.

Konfiguracja ekranu Userform w programie Excel VBA

3. Dodaj etykiety, pola tekstowe (najpierw u góry, drugi pod pierwszym itd.) I przyciski poleceń. Po zakończeniu, wynik powinien być zgodny z obrazem formularza użytkownika pokazanym wcześniej. Na przykład utwórz formant pola tekstowego, klikając pole tekstowe z Przybornika. Następnie możesz przeciągnąć pole tekstowe do formularza użytkownika.

4. Możesz zmienić nazwy i podpisy kontrolek. Nazwy są używane w kodzie Excel VBA. Napisy są wyświetlane na ekranie. Dobrą praktyką jest zmiana nazw kontrolek, ale nie jest to konieczne, ponieważ w tym przykładzie mamy tylko kilka elementów sterujących. Aby zmienić podpis etykiet, pól tekstowych i przycisków poleceń, kliknij opcję Widok, okno Właściwości i kliknij każdy z elementów sterujących.

5. Aby wyświetlić Formularz użytkownika, umieść przycisk polecenia w arkuszu i dodaj następującą linię kodu:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Teraz utworzymy Sub UserForm_Initialize. Gdy użyjesz metody Show dla Userform, to subwoło zostanie automatycznie wykonane.

6. Otwórz Edytor Visual Basic.

7. W eksploratorze projektów kliknij prawym przyciskiem myszy UserForm1, a następnie kliknij opcję Wyświetl kod.

8. Wybierz opcję Userform z lewej listy rozwijanej. Wybierz Initialize z prawej listy rozwijanej.

9. Dodaj następującą linię kodu:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Objaśnienie: ta linia kodu ustawia fokus na pierwszym polu tekstowym, ponieważ jest to miejsce, od którego chcemy rozpocząć ładowanie formularza użytkownika.

Stworzyliśmy teraz pierwszą część Userform. Mimo że już teraz wygląda całkiem zgrabnie, nic nie stanie się, gdy wprowadzimy wartość w polu tekstowym ID lub gdy klikniemy jeden z przycisków poleceń.

10. W eksploratorze projektu kliknij prawym przyciskiem myszy UserForm1, a następnie kliknij View Code.

11. Wybierz TextBox1 z lewej listy rozwijanej. Wybierz Zmień z prawej listy rozwijanej.

12. Dodaj następującą linię kodu:

Private Sub TextBox1_Change()

GetData

End Sub

13. W Project Explorerze kliknij dwukrotnie UserForm1.

14. Kliknij dwukrotnie przycisk Edytuj / Dodaj.

15. Dodaj następującą linię kodu:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Kliknij dwukrotnie przycisk Wyczyść polecenie.

17. Dodaj następującą linię kodu:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Objaśnienie: te subwoofery wywołują inne podsystemy, które utworzymy w ciągu sekundy.

18. Kliknij dwukrotnie przycisk polecenia Zamknij.

19. Dodaj następującą linię kodu:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Objaśnienie: ta linia kodu zamyka formularz użytkownika.

Czas na utworzenie subs. Możesz przejść do rozdziału "Funkcja i podrzędny", aby dowiedzieć się więcej o subsach. Jeśli się spieszysz, po prostu umieść następujące subwoofery w module (w Edytorze Visual Basic kliknij Wstaw, Moduł).

20. Najpierw zadeklaruj trzy zmienne typu Integer i jedną zmienną typu Boolean. Deklaracja zmiennych w sekcji Deklaracje ogólne (u góry modułu). W ten sposób wystarczy zadeklarować zmienne tylko raz i można ich używać w wielu subsach.

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

21. Dodaj subadres 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

Wyjaśnienie: Jeśli pole tekstowe ID zawiera wartość liczbową, Excel VBA wyszukuje identyfikator i ładuje odpowiedni rekord. Używamy kolekcji Controls, aby łatwo przeglądać pola tekstowe. Jeśli program Excel VBA nie może znaleźć identyfikatora (flaga nadal jest fałszywa), opróżnia drugie i trzecie pole tekstowe. Jeśli pole tekstowe ID nie zawiera wartości liczbowej, program Excel VBA wywołuje subakcję ClearForm.

22. Dodaj subadruk ClearForm.

Sub ClearForm()

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

End Sub

Objaśnienie: Program Excel VBA czyści wszystkie pola tekstowe.

23. Dodaj podkatalog 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

Wyjaśnienie: Jeśli pole tekstowe ID nie jest puste, Excel VBA edytuje rekord na arkuszu (przeciwieństwo ładowania rekordu, jak widzieliśmy wcześniej). Jeśli Excel VBA nie może znaleźć identyfikatora (flaga nadal jest fałszywa), dodaje rekord do następnego pustego wiersza. Zmienna emptyRow jest pierwszym pustym wierszem i rośnie za każdym razem, gdy dodawany jest rekord.

24. Wyjdź z Edytora Visual Basic, wprowadź etykiety pokazane poniżej w rzędzie 1 i przetestuj formularz użytkownika.

Excel VBA Interactive Userform

Przeczytaj również: