Klasa TextBox - tworzenie pola tekstowego VBA. Tworzenie formularza w Excel VBA

Leki przeciwgorączkowe dla dzieci są przepisywane przez pediatrę. Ale zdarzają się sytuacje awaryjne dla gorączki, kiedy dziecko musi natychmiast otrzymać lekarstwo. Wtedy rodzice biorą na siebie odpowiedzialność i stosują leki przeciwgorączkowe. Co wolno dawać niemowlętom? Jak obniżyć temperaturę u starszych dzieci? Jakie leki są najbezpieczniejsze?

Przyjrzyjmy się klasie VBA TextBox, która umożliwia umieszczenie pola tekstowego na formularzu. Klasa vba TextBox umożliwia tworzenie zarówno wielowierszowych, jak i jednowierszowych obszarów wprowadzania tekstu, chociaż w tym drugim przypadku wygodniej jest skorzystać z funkcji MsgBox. Możesz także dodać paski przewijania i zdefiniować maksymalną długość wprowadzanych znaków. TextBox może być również używany jako składnik wprowadzania hasła.

Przyjrzyjmy się najpierw głównym właściwościom klasy TextBox i jej zdarzeniu bazowemu, a następnie napiszmy przykład.

Zdarzenia klasy języka TextBox VBA

wartość lub Tekst- tekst wprowadzony w polu tekstowym

widoczny– umożliwia ukrycie (fałsz) lub ponowne pokazanie (prawda) elementu.

wielowierszowy– ta właściwość pozwala określić, czy pole tekstowe będzie jednowierszowe (fałsz) czy wielowierszowe (prawda).

zawijanie tekstu– właściwość ma zastosowanie, jeśli MultiLine zawiera wartość true, w tym przypadku, jeśli WordWrap jest ustawiony na true, tekst zostanie automatycznie zawinięty do nowej linii po osiągnięciu granicy pola tekstowego TextBox.

paski przewijania– pozwala określić, czy będą wyświetlane paski przewijania. Właściwość może przyjmować następujące wartości:

  • 0 – fmScrollBarsBrak(brakuje pasków przewijania)
  • 1– fmScrollBarsPoziomy(poziomy pasek przewijania)
  • 2 – fmScrollBarsPionowe(pionowy pasek przewijania)
  • 3 – fmScrollBarsOba(przewijanie w poziomie i pionie)

HasłoChar- pozwala ustawić znak, który będzie wyświetlany zamiast danych wejściowych. Właściwość ma znaczenie przy wprowadzaniu hasła.

Maksymalna długość- pozwala określić maksymalną liczbę znaków, które można wprowadzić w polu tekstowym. Wartość domyślna to 0, co oznacza, że ​​nie ma limitu.

Podobnie jak inne kontrolki, klasa TextBox zawiera zdarzenia, głównym zdarzeniem TextBox jest zmiana- występuje za każdym razem, gdy w polu tekstowym zostanie wprowadzony znak. Być może widziałeś to zdjęcie: podczas wprowadzania kodu weryfikacyjnego, dopóki jego długość nie osiągnie określonej długości (na przykład 12 znaków), przycisk „Sprawdź” nie będzie dostępny. Można to również zrobić tutaj.


Dobra, teraz czas na ćwiczenia. Nie będę zagłębiał się ponownie we wszystkie szczegóły, jak w poprzednich artykułach, więc powiem wprost: dodaj nowy moduł i nowy formularz do projektu. Wybierz kontrolkę Caption () z okna ToolBox, dodaj ją do formularza, niech będzie na górze, umieść pod nią pole tekstowe (TextBox), a na samym dole - niech będzie przycisk ( oznaczony „Sprawdź” ). Otóż ​​tak jak poprzednio w edytorze kodu modułu piszemy procedurę:

Tutaj przetwarzamy pojedyncze kliknięcie na przycisk, po jego kliknięciu do właściwości Caption obiektu Label1 (Napis) zostanie przypisana zawartość pola tekstowego TextBox1 (właściwość Text).

Private Sub TextBox1_Change() Dim LenText As Byte LenText = Len(TextBox1.Text) If LenText = 12 Then bCheck.Enabled = True Else bCheck.Enabled = False End If End Sub

W tym miejscu zdarzenie Change jest przetwarzane dla pola tekstowego obiektu TextBox1 klasy vba TextBox. Zmienna LenText będzie przechowywać długość wprowadzonego tekstu, za każdym razem, gdy wprowadzisz dane, długość będzie sprawdzana, jeśli jest równa 12, to przycisk zostanie aktywowany, w przeciwnym razie przycisk 0 będzie nieaktywny.

W tej procedurze ustawiane są wartości początkowe, niektóre z nich można również ustawić w oknie Właściwości, ale dla jasności postanowiłem napisać wszystko w kodzie programu. Nie ma się czym martwić, jak tylko formularz zostanie załadowany do pamięci, przycisk „Sprawdź” będzie nieaktywny, rozmiar czcionki dla pola tekstowego i etykiety jest ustawiony na 20, ustawiamy też maksymalną długość tekstu dla TextBox klasa VBA języka i jego pojedynczy wiersz.

Opcja 5
Utwórz niestandardowy formularz widoku:


Utwórz prywatną procedurę podprogramu w module formularza, która jest uruchamiana po kliknięciu przycisku „Obliczanie”. Procedura powinna obliczyć maksymalną kwotę naliczoną za codzienną pracę któregokolwiek z pracowników stanowiska, którego nazwisko jest wpisane w polu tekstowym Pole1 w dniu tygodnia, którego numer jest wpisany w polu2. Naliczona kwota jest obliczana jako iloczyn wydobycia i stawki. Procedura powinna umieścić wynik obliczeń w polu 3.
Aby utworzyć formularz użytkownika, przejdź do Edytora kodu Visual Basic (Alt+F11) i wybierz z menu Wstaw->Formularz użytkownika. Następnie należy dodać niezbędne komponenty i skonfigurować wszystkie parametry formularza i komponentów – rozmiar, czcionkę, tytuły.
W tym przypadku potrzebne są trzy elementy TextBox (TextDolgn - pozycja, TextDen - dzień tygodnia, TextMaks - maksymalna naliczona kwota), dwa przyciski (Calculate i Exit) oraz 4 etykiety. Wszystkie właściwości można ustawić w panelu Właściwości.
Po dwukrotnym kliknięciu przycisku Obliczenia edytor utworzy szablon procedury. Dodajmy do tego tekst:

Subskrypcja prywatna btnCalc_Click()
Dim r As Integer "numer wiersza
Dim c As Integer "numer kolumny
Dim maxSum As Integer „maksymalna naliczona kwota
Dim rng As Range „zakres niestandardowy
textMaks.Text = "" "czyszczenie pola z poprzedniego wyszukiwania
"jeżeli tytuł stanowiska nie jest wpisany, to komunikat i wyjście z procedury"
Jeśli textDolgn.Text = Pusty Wtedy
MsgBox "Wpisz stanowisko!"
textDolgn.SetFocus "skup się na polu wprowadzania
wyjdź z sub
Zakończ, jeśli
"jeżeli nie wpisano numeru dnia to komunikat i wyjście z procedury"
Jeśli textDen.Text = Pusty Wtedy
MsgBox "Wprowadź numer dnia tygodnia (1 do 7)!"
textDen.SetFocus
wyjdź z sub
Zakończ, jeśli
„Wprowadzono nienumeryczną wartość dnia
Jeśli nie (IsNumeric(textDen.Text)) Wtedy
MsgBox "Nienumeryczny dzień tygodnia (wymagane od 1 do 7)!"
textDen.SetFocus
wyjdź z sub
„Wprowadzono nieprawidłowy numer dnia tygodnia
ElseIf(CInt(textDen.Text)< 1) Or (CInt(textDen.Text) >7) Wtedy
MsgBox "Nieprawidłowy dzień tygodnia (wymagany od 1 do 7)!"
textDen.SetFocus
textDen.Text = "" "wyczyść pole
wyjdź z sub
Zakończ, jeśli
"rozpocznij pętlę od linii 3
r=3
"numer dnia z pola wejściowego
c = CInt(tekstDen.Tekst)
Ustaw rng = Arkusze(1).UsedRange
maksymalna Suma = -1
Dla r = 3 To rng.Rows.Count
„jeśli w komórce znajduje się określony tytuł zawodowy
Jeśli InStr(1, Cells(r, 2), textDolgn.Text, vbTextCompare) > 0 Wtedy
"jeśli suma jest większa niż maksimum, zmień wartość maksimum na nową
If CInt(Cells(r, 3)) * CInt(Cells(r, c + 3)) > maxSum Then maxSum = CInt(Cells(r, 3)) * CInt(Cells(r, c + 3))
Zakończ, jeśli
Następny r
Jeśli maxSum = -1 Wtedy
MsgBox "Podana pozycja nie została znaleziona"
textMax.Text = "-"
W przeciwnym razie
textMaks.Text = CStr(maxSum)
Zakończ, jeśli
Ustaw rng = Nic „zwalniając pamięć
napis końcowy
Tutaj jest dużo kontroli. Najpierw sprawdź, czy zostały wprowadzone wszystkie dane. Jeśli nie, poinformujemy o tym użytkownika, ustawimy fokus wejściowy na puste pole (dla wygody użytkownika, aby nie szturchnął ponownie myszy) i wyjdź z procedury.
Następnie sprawdzamy, czy numer dnia jest wpisany poprawnie. Po pierwsze musi to być liczba, a po drugie liczba od 1 do 7. Jeśli coś jest nie tak, czyścimy pole wejściowe, ustawiamy na nim fokus i wychodzimy z procedury, ponownie informując użytkownika o nieudanej próbie.
Jeśli wszystko jest w porządku, zaczynamy szukać pożądanych wartości. Zdefiniujmy zakres niestandardowy, który będzie niezależny od liczby wierszy. Następnie musisz znaleźć maksymalną kwotę w pętli. Wartości komórek należy z czymś porównać. Tutaj nie możemy po prostu podstawić pierwszej komórki w wierszu lub kolumnie, a następnie to, co należy wybrać parametrem - pozycja. Widzimy jednak, że naliczona kwota nie może być mniejsza od zera - stawka nie może być ujemna, a także liczba godzin pracy. Otóż ​​w tym przypadku nie bierzemy pod uwagę możliwości „odwrócenia na czerwono” – czyli korekt za poprzednie okresy. Przyjmijmy więc początkową maksymalną kwotę równą -1 (minus jeden).
Zaczynamy pętlę przez komórki kolumny z podanym numerem dnia (jest to wartość pola wejściowego plus 3).
Sprawdź, czy komórka zawiera określony tytuł stanowiska. Możesz po prostu porównać dwa ciągi, ale jest to niewygodne, ponieważ będziesz musiał wprowadzić pozycję w całości i poprawnie. Dlatego używamy funkcji InStr, która zwraca wartość większą niż 0, jeśli określony podciąg zostanie znaleziony w ciągu. Możesz użyć funkcji Like, która również porównuje dwa ciągi. To zależy od dewelopera.
Jeśli pozycja w komórce zostanie znaleziona, mnożymy stawkę przez liczbę przepracowanych godzin i porównujemy wynik z kwotą maksymalną. Jeśli wynik jest większy, zmień go na nową wartość.
Nie zapomnij przekonwertować wartości ciągu na liczby i odwrotnie, jeśli to konieczne. Nawet jeśli sam program Excel rozumie, co zawiera, lepiej to zrobić, aby uzyskać niezawodność.
Po przejściu przez cykl patrzymy, czy maksymalna kwota wynosi -1 (wartość początkowa), to takiej pozycji nie ma. Wyświetlamy komunikat i umieszczamy myślnik w polu dla jasności.
Jeżeli suma nie jest równa -1, to znalezioną wartość umieszczamy w polu textMaks.
Na końcu programu zwalniamy pamięć obiektu.
Istnieje również tekst przycisku Wyjdź:
Subskrypcja prywatna btnExit_Click()
"prześlij formularz
Rozładuj mnie
napis końcowy
Aby uruchomić formularz należy umieścić przycisk na arkuszu danych (zakładka "Deweloper", sekcja "Kontrolki", lista "Wstaw" - wybierz przycisk z kontrolek formularza) i przypisz do niego makro Button1_Click. Następnie w edytorze napisz kod tego przycisku:
Przycisk podrzędny1_kliknięcie()
UserForm1.Pokaż
napis końcowy
Wszystko, możesz sprawdzić pracę formularza.
Podałem tutaj tylko 5 opcji. Jeśli potrzebujesz innego, możesz zapytać w grupie VK (patrz strona kontaktowa). Ale ogólnie wszystkie opcje są podobne. Istnieją tylko niewielkie różnice, zwłaszcza jeśli musisz wyprowadzić ciąg z wieloma wartościami tekstowymi. Następnie możesz użyć właściwości textbox — Multiline, aby wyświetlić wiele wierszy i użyć znaków podziału wiersza do oddzielenia.

Pola tekstowe przeznaczone są do wprowadzania i edycji tekstu - element TextBox. Podobnie jak w przypadku elementu Label, tekst elementu TextBox można ustawić lub pobrać za pomocą właściwości Text.

Domyślnie przeciąganie elementu z paska narzędzi tworzy jednowierszowe pole tekstowe. Aby wyświetlić duże ilości informacji w polu tekstowym, musisz użyć jego właściwości Multiline i ScrollBars. Po ustawieniu właściwości Multiline na true wszelkie nadmiarowe znaki, które wykraczają poza margines, zostaną zawinięte do nowego wiersza.

Możesz także przewijać pole tekstowe, ustawiając jego właściwość ScrollBars na jedną z następujących wartości:

    Brak : bez przewijania (domyślnie)

    Poziomo : Tworzy przewijanie poziome, gdy długość linii jest większa niż szerokość pola tekstowego

    Pionowo : tworzy przewijanie w pionie, jeśli linie nie mieszczą się w polu tekstowym

    Oba: tworzy przewijanie w pionie i poziomie

Element TextBox ma wystarczającą moc, aby utworzyć pole autouzupełniania. Aby to zrobić, musimy powiązać właściwość AutouzupełnianieNiestandardowe źródło elementu TextBox do pewnej kolekcji, z której pobierane są dane w celu wypełnienia pola.

Dodajmy więc pole tekstowe do formularza i wpiszmy następujące wiersze w kodzie zdarzenia ładowania:

Publiczna klasa częściowa Form1: Form ( public Form1() ( InitializeComponent()); AutoCompleteStringCollection source = new AutoCompleteStringCollection() ( "Kuznetsov", "Ivanov", "Petrov", "Kustov" ); textBox1.AutoCompleteCustomSource = source; textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; ) )

Tryb autouzupełniania, reprezentowany przez właściwość AutoCompleteMode, ma kilka możliwych wartości:

    Brak: brak autouzupełniania

    Sugeruj : sugeruje sugestie dotyczące danych wejściowych, ale nie kończy

    append : dołącza wprowadzoną wartość do ciągu z listy, ale nie oferuje opcji wyboru

    SuggestAppend : zarówno sugeruje sugestie autouzupełniania, jak i uzupełnia wartość wprowadzoną przez użytkownika

Zawijanie tekstu

Aby tekst w elemencie TextBox zawijał słowa, musisz ustawić właściwość zawijanie tekstu ustaw na true . Oznacza to, że jeśli jedno słowo nie mieści się w linii, jest przenoszone do następnego. Ta właściwość działa tylko w przypadku wielowierszowych pól tekstowych.

Wprowadzanie hasła

Ponadto ten element ma właściwości, które pozwalają uczynić go polem do wpisania hasła. W tym celu musisz użyć PasswordChar i UseSystemPasswordChar .

Właściwość PasswordChar domyślnie nie ma wartości, jeśli ustawimy ją na dowolny znak, to ten znak będzie wyświetlany przy wprowadzaniu dowolnych znaków w polu tekstowym.

Właściwość UseSystemPasswordChar ma podobny efekt. Jeżeli ustawimy jego wartość na true , to zamiast wprowadzonych znaków w polu tekstowym wyświetli się przyjęty w systemie znak hasła, np. kropka.

Ze wszystkich zdarzeń elementu TextBox należy odnotować zdarzenie TextChanged, które jest wyzwalane, gdy tekst w elemencie się zmienia. Na przykład umieśćmy etykietę na formularzu oprócz pola tekstowego i zróbmy to tak, że gdy zmieni się tekst w polu tekstowym, zmieni się również tekst na etykiecie:

Publiczna klasa częściowa Form1: Form ( public Form1() ( InitializeComponent (); textBox1.TextChanged += textBox1_TextChanged; ) private void textBox1_TextChanged(object sender, EventArgs e) ( label1.Text = textBox1.Text; ) )

W tym przykładzie użyto Okno dialogowe- UserForm1 oraz kontrolki Pole tekstowe- TextBox1, TextBox2, TextBox3, dla którego tworzone jest menu kontekstowe. Zwróć uwagę, że nazwa menu kontekstowego, która jest taka sama jak nazwa formularza (opcjonalnie) musi być unikalna. jeśli pasek narzędzi o tej samej nazwie już istnieje, pojawi się błąd podczas próby utworzenia nowego paska narzędzi. Tego błędu można uniknąć, sprawdzając, czy istnieje panel o tej nazwie przed utworzeniem panelu, lub nie używając opcjonalnego argumentu Name metody.Add (patrz podobny przykład2)

Wariant II. Jeśli poprzednio pobierz kontrolkę iemenu.ocx (IE Popup Menu) i dodaj ją do listy dostępnych linków, a następnie za pomocą tej kontrolki możesz utworzyć menu kontekstowe (patrz przykład 3)

  • Odpowiadać:

    Opcja I

    Uwaga:
  • Wartości właściwości MultiLine i ScrollBars można ustawić ręcznie
  • Odpowiadać:
    Aby wypełnić komórki danymi pola tekstowego, które ma właściwość MultiLine ustawioną na True , możesz użyć czytania wiersz po wierszu. Jeśli komórki są już wypełnione, usuń zawartość i formaty tych komórek (kolumny), po sprawdzeniu, czy są chronione

    Opcja I(czytanie linia po linii)

    Notatka:
  • Aby wprowadzić liczby z wiodącym zerem, musisz dodać odpowiedni czek.
  • Przy dużej liczbie wierszy w polu tekstowym sensowne jest wyłączenie odświeżania ekranu [FAQ43 ]

    Wariant II.(bez czytania wiersz po wierszu)

  • Odpowiadać:

    Jeśli istnieje potrzeba wpisania w polu tekstowym tylko unikalnych (wcześniej niepowtarzających się) znaków. Innymi słowy, musisz zabronić wprowadzania znaków, które są już obecne w tekście, a następnie użyć opcji poniżej, gdzie zdarzenie TextBox1_KeyPress służy do zabronienia wprowadzania duplikatów (powtórzeń), a zdarzenie TextBox1_KeyDown do zabronienia wstawiania skopiowanych danych, które mogą zawierać duplikaty (powtórzenia)

    Opcja I

  • Odpowiadać:

    Możesz użyć następującej opcji, aby zapobiec wprowadzaniu zbędnych znaków, takich jak znaki, których nie można użyć w nazwie pliku. Gdzie zdarzenie TextBox1_KeyPress jest używane, aby zapobiec wprowadzaniu niepotrzebnych znaków, a zdarzenie TextBox1_KeyDown jest używane, aby zapobiec wstawianiu skopiowanych danych, które mogą zawierać zabronione znaki.

  • Odpowiadać:

    Aby określić, który z klawiszy SHIFT, CTRL, ALT został naciśnięty podczas pracy z nazwą tekstową TextBox1, możesz użyć następującej opcji. Wyświetlanie informacji w nagłówku formularza użytkownika, na którym znajduje się pole tekstowe, służy jedynie przejrzystości i oczywiście nie jest obowiązkowe.

    Notatka: W podobny sposób możesz zmienić czcionkę dla innych kontrolek, w tym. RefEdit, Label, ComboBox, ListBox...
  • Odpowiadać:

    Jeśli w trakcie pracy musisz mieć możliwość wyboru niezbędnych skoroszytów, na przykład za pomocą standardowego okna dialogowego, a także uzyskać ścieżkę (lub tylko nazwę pliku) wybranego skoroszytu i bez jego otwierania, następnie po prostu utwórz pole tekstowe o nazwie TextBox1 i użyj przycisku po prawej stronie w razie potrzeby (przycisk pojawi się bez Twojego udziału)



  • Wesprzyj projekt - udostępnij link, dzięki!
    Przeczytaj także
    zasady gry walki kogutów zasady gry walki kogutów Mod dla Minecraft 1.7 10 receptur zegarków.  Przepisy na tworzenie przedmiotów w Minecrafcie.  Broń w Minecraft Mod dla Minecraft 1.7 10 receptur zegarków. Przepisy na tworzenie przedmiotów w Minecrafcie. Broń w Minecraft Szyling i funt szterling - pochodzenie słów Szyling i funt szterling - pochodzenie słów