Kontrolki ActiveX – Pole tekstowe TextBox w Excel VBA

1. Budowa aplikacji do wprowadzania danych – Jak wstawić pole tekstowe TextBox (Formant ActiveX)

Pole tekstowe poznaliśmy już poprzedniej części naszego kursu. Pole służy nam przede wszystkim do wprowadzania danych, a następnie ich obróbki  edytorze VB. Wstawianie pola tekstowego TextBox zaczynamy od jego wybrania w karcie Developer spośród formantów ActiveX. Wprowadźmy do naszego arkusza 4 pola tekstowe kolejno nad kolumnami login, Imię, Nazwisko i e-mail. Najlepszym sposobem, by pola miały taki sam rozmiar jest utworzenie jednego pola tekstowego, a następnie jego powielenie. Utwórzmy także w naszym arkuszu jeden przycisk polecenia CommandButton o nazwie „Wprowadź” i osadźmy go nad kolumną ID. Samą nazwę możemy wpisać w polu Caption wybierając wcześniej właściwości przycisku.

Kurs Excel VBA - Pole tekstowe TextBox
Kurs Excel VBA – Pole tekstowe TextBox

2. Budowa aplikacji do wprowadzania danych – Programowanie pola tekstowego TextBox (Formant ActiveX)

Nasza aplikacja posiada już 4 pola tekstowe. Powinniśmy je teraz zaprogramować. Naszym celem jest napisanie programu, który po wprowadzeniu danych do pól wprowadzi je w odpowiednie kolumny naszego arkusza. Co ważne, chcielibyśmy, by dane były wprowadzane w kolejne wiersze naszej tabeli nie nadpisując istniejących już danych. Chcielibyśmy także, by loginy w naszej bazie nie mogły się powtarzać, a więc po wprowadzeniu istniejącego już w kolumnie loginu wyświetlało się okno MsgBox z odpowiednim komunikatem. Dodatkowo wprowadzimy prostą funkcjonalność, by w kolumnie Id pojawiały się zawsze kolejno narastające numery naszych rekordów. Tworzymy w naszym arkuszu przycisk polecenia. W pierwszej kolejności klikamy dwukrotnie w nasz przycisk „Wprowadź” w trybie projektowania. Możemy od razu wprowadzić kod, który uruchomi się po pojedynczym kliknięciu przycisku. Zwróćmy uwagę, że nie piszemy kodu w module, a w kodzie Arkusza danych.

2.1. Tworzenie narastających ID i  wprowadzanie danych z pól tekstowych

By każdy nasz rekord przyjmował coraz to wyższy numer w polu ID, powinniśmy tą funkcjonalność odpowiednio zaprogramować. Najprostszym sposobem jest jaka jest najwyższa wartość w kolumnie A.

Private Sub CommandButton1_Click()
 
Dim sngId As Single
Dim sngWiersz As Single
 
'WYBIERANIE OSTATNIEGO NIEZAPISANEGO WIERSZA I NADAWANIE ID
sngId = 1 + Application.WorksheetFunction.Max(Range("A:A"))
sngWiersz = 6 + Application.WorksheetFunction.CountA(Range("A:A"))

'WPROWADZANIE DANYCH
Cells(sngWiersz, 1) = sngId
Cells(sngWiersz, 2) = LCase(TextBox1)
Cells(sngWiersz, 3) = UCase(Left(TextBox2, 1)) & LCase(Mid(TextBox2, 2))
Cells(sngWiersz, 4) = StrConv(TextBox3, vbProperCase)
Cells(sngWiersz, 5) = LCase(TextBox4)
End Sub

Objaśnienie powyższego kodu:

  • Stworzyliśmy 2 zmienne o typie danych Single. Zmienna sngId odpowiada za kolejne numery naszych identyfikatorów ID. Zmienna sngWiersz określać będzie wiersz, który będzie aktualnie wypełniany wartościami
  • Korzystając z funkcji arkuszowej Max() w pierwszej kolejności określamy najwyższą wartość w kolumnie A i dodajemy do niej 1
  • Korzystając z funkcji arkuszowej CountA() zliczamy wypełnione wiersze w kolumnie A i dodajemy do nich liczbę 6, by zacząć wprowadzanie danych od 7 wiersza.
  • W bloku odpowiadającym za wprowadzanie danych wprowadzamy odpowiedni nr ID w odpowiedni wiersz
  • Kolejnym komórkom przypisujemy wartości z odpowiednich pól tekstowych, stosując funkcje zgodnie zvwymaganiami naszej aplikacji. Login piszemy z małych liter. Imię i nazwisko z wielkiej litery. Dodatkowo wartość zawarta w TextBox4 zamieniana jest na litery małe.
  • Program w obecnej formie upraszcza szukanie pierwszego niewypełnionego wiersza – zakłada, że pole ID nie może być puste. Jeśli jesteście zainteresowani trudniejszą konstrukcją, w której nie wszystkie wiersze muszą być zapełnione, odsyłam do artykułu o znajdywaniu ostatniego niepustego wiersza w Excel VBA.

2.1. Wprowadzanie unikalnych wartości w polu login

Nasz kod w obecnej formie zakłada, że loginy mogą się powtarzać. Zmodyfikujmy go w następujący sposób:

Private Sub CommandButton1_Click()
 
Dim sngId As Single
Dim sngWiersz As Single
Dim sngLoginLicznik As Single

'WYBIERANIE OSTATNIEGO NIEZAPISANEGO WIERSZA I NADAWANIE ID
sngId = 1 + Application.WorksheetFunction.Max(Range("A:A"))
sngWiersz = 6 + Application.WorksheetFunction.CountA(Range("A:A"))

'SPRAWDZANIE LOGINU
sngLoginLicznik = 7
 
Do While sngLoginLicznik <= sngWiersz
 
If Cells(sngLoginLicznik, 2) = LCase(TextBox1) Then
MsgBox "Ten login znajduje się już w bazie, wprowadź inny", vbCritical
GoTo endlabel
End If
 
sngLoginLicznik = sngLoginLicznik + 1
Loop

'WPROWADZANIE DANYCH
Cells(sngWiersz, 1) = sngId
Cells(sngWiersz, 2) = LCase(TextBox1)
Cells(sngWiersz, 3) = UCase(Left(TextBox2, 1)) & LCase(Mid(TextBox2, 2))
Cells(sngWiersz, 4) = StrConv(TextBox3, vbProperCase)
Cells(sngWiersz, 5) = LCase(TextBox4)

endlabel:
End Sub

Jak widzimy w powyższym przykładzie dodaliśmy kolejną zmienną reprezentującą licznik (intLoginLicznik). Kod sprawdzający, czy login jest w bazie na początku sprawdza, czy login był już wprowadzony. Przy użyciu pętli przeszukuje wszystkie dane w kolumnie B i porównuje je z wartością wpisaną w TextBox1 zaczynając od wiersza nr 7. Jeśli login jest w bazie, za pomocą instrukcji GoTo program odsyła nas na sam koniec kodu (etykieta endlabel). Komunikat o istnieniu loginu w naszej bazie wyświetla się z atrybutem vbCritical. Jeśli loginu nie ma w bazie to nasz rekord zostaje wprowadzony. By sprawdzić działanie aplikacji wprowadźmy do pól tekstowych kilka przykładów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

2 komentarze “Kontrolki ActiveX – Pole tekstowe TextBox w Excel VBA”