1. Budowa aplikacji do wprowadzania danych – Wstawianie Etykiety – Label (Formant ActiveX)
Etykieta Label jest już nam znana i nie powinna wymagać szerszego omówienia. Jak wstawić Etykietę Label? Spośród formantów ActiveX w zakładce Developer wybieramy formant Etykieta. Następnie wstawiamy 3 etykiety obok pól kombi odpowiadających za wprowadzanie dnia, miesiąca i roku. Ich nazwę możemy zmienić we właściwościach formantu edytując pozycję Caption. Następnie wstawmy etykietę nagłówka dla naszej aplikacji. Nazwijmy ją „Wprowadzanie danych”. Wielkość czcionki etykiety możemy zmienić także we właściwościach edytując pozycję Font. Dla potrzeb aplikacji wybierzmy czcionkę 18px.
2. Programowanie pozostałych elementów aplikacji
Spośród elementów do zaprogramowania w naszej aplikacji pozostało nam jeszcze wstawianie daty dodania rekordu. Z wykorzystaniem funkcji Date() zmieniamy kod naszego programu w obiekcie Arkusz1.
Cells(sngWiersz, 11) = Date
Poza samą datą wprowadzenia chcielibyśmy, by po każdorazowym wprowadzeniu danych nasz formularz czyścił swoje pola, jak po kliknięciu przycisku „Wyczyść”. Chcielibyśmy także, by wprowadzenie pojedynczego rekordu wywoływało okno MsgBox z informacją o powodzeniu operacji.
MsgBox "Dane zostały wprowadzone" TextBox1 = "" TextBox2 = "" TextBox3 = "" TextBox4 = "" ComboBox1 = "" ComboBox2 = "" ComboBox3 = "" ComboBox4 = "" ListBox1 = "" OptionButton1 = False OptionButton2 = False CheckBox1 = False
Kod naszego programu w obiekcie Arkusz1 wygląda następująco. W dole artykułu załączony został także plik aplikacji, którą napisaliśmy.Tak, tak, to już koniec programowania naszej aplikacji:)
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) Cells(sngWiersz, 6) = ComboBox1 Cells(sngWiersz, 7) = DateSerial(ComboBox4, ComboBox3, ComboBox2) Cells(sngWiersz, 8) = ListBox1 If OptionButton1 = True Then Cells(sngWiersz, 9) = "Kobieta" ElseIf OptionButton2 = True Then Cells(sngWiersz, 9) = "Mężczyzna" Else: Cells(sngWiersz, 9) = "" End If If CheckBox1 = True Then Cells(sngWiersz, 10) = "Tak" Else: Cells(sngWiersz, 10) = "Nie" End If Cells(sngWiersz, 11) = Date MsgBox "Dane zostały wprowadzone" TextBox1 = "" TextBox2 = "" TextBox3 = "" TextBox4 = "" ComboBox1 = "" ComboBox2 = "" ComboBox3 = "" ComboBox4 = "" ListBox1 = "" OptionButton1 = False OptionButton2 = False CheckBox1 = False endlabel: End Sub Private Sub CommandButton2_Click() TextBox1 = "" TextBox2 = "" TextBox3 = "" TextBox4 = "" ComboBox1 = "" ComboBox2 = "" ComboBox3 = "" ComboBox4 = "" ListBox1 = "" OptionButton1 = False OptionButton2 = False CheckBox1 = False End Sub Private Sub SpinButton1_SpinUp() ActiveWindow.SmallScroll up:=1 End Sub Private Sub SpinButton1_SpinDown() ActiveWindow.SmallScroll down:=1 End Sub
5 komentarzy “Kontrolki ActiveX – Etykieta Label w Excel VBA”
Wreszcie napisane!
W naszej aplikacji chciałbym zablokować komórki w których znajdują sie dane, tak, aby nie można było ich zmienić „z Palca” ale można było nadal wprowadzać dane formularzem.
GreG, tutaj najlepiej pobawić się z ochroną arkusza.
Arkusz powinien mieć założoną ochornę np kodem:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Program wprowadzający dane powinien wyłączać ochronę na czas wprowadzania danych np makrem:
ActiveSheet.Unprotect
Na końcu makra znów powinien znajdować się kod włączający ponownie ochronę:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Komórki arkusza, zawierająca formularz powinny mieć wyłączoną blokadę.
Formatuj komórki > Ochorona > zablokuj (odznacz)
Komórki arkusza, zawierająca dane powinny mieć włączoną blokadę.
Daj znać, czy zadziałało, w tym momencie nie mam jak tego przetestować.
Ulepszyłam nieco kod o walidację, czy wszystkie pola zostały wprowadzone, zatem wrzucam
Budowanie formularza ikonami ActiveX w Excel tylko z tą stroną!