TextBox-Klasse – Erstellen von VBA-Textfeldern. Erstellen eines Formulars in Excel VBA

Antipyretika für Kinder werden von einem Kinderarzt verschrieben. Aber es gibt Notfallsituationen für Fieber, wenn das Kind sofort Medikamente erhalten muss. Dann übernehmen die Eltern die Verantwortung und nehmen fiebersenkende Medikamente. Was darf Säuglingen gegeben werden? Wie kann man bei älteren Kindern die Temperatur senken? Welche Medikamente sind am sichersten?

Schauen wir uns die VBA-TextBox-Klasse an, mit der Sie ein Textfeld in einem Formular platzieren können. Die vba TextBox-Klasse ermöglicht es Ihnen, sowohl mehrzeilige als auch einzeilige Texteingabebereiche zu erstellen, obwohl es im letzteren Fall bequemer ist, die MsgBox-Funktion zu verwenden. Sie können auch Bildlaufleisten hinzufügen und die maximale Länge der Eingabezeichen festlegen. Die TextBox kann auch als Kennworteingabekomponente verwendet werden.

Schauen wir uns zunächst die Haupteigenschaften der TextBox-Klasse und ihres Basisereignisses an und schreiben dann ein Beispiel.

TextBox-VBA-Sprachklassenereignisse

Wert oder Text- der Text, der in die TextBox eingegeben wird

sichtbar– ermöglicht es Ihnen, das Element auszublenden (false) oder wieder anzuzeigen (true).

mehrzeilig– Mit dieser Eigenschaft können Sie angeben, ob das Textfeld einzeilig (false) oder mehrzeilig (true) sein soll.

Zeilenumbruch– Die Eigenschaft ist für die Verwendung relevant, wenn MultiLine den Wert true enthält. Wenn in diesem Fall WordWrap auf true gesetzt ist, wird der Text automatisch in eine neue Zeile umgebrochen, wenn der Rand des Textfelds TextBox erreicht ist.

Bildlaufleisten– ermöglicht Ihnen festzulegen, ob Bildlaufleisten angezeigt werden oder nicht. Die Eigenschaft kann die folgenden Werte annehmen:

  • 0 – fmScrollBarsNone(Scrollbalken fehlen)
  • 1– fmScrollBarsHorizontal(horizontale Bildlaufleiste)
  • 2 – fmScrollBarsVertical(vertikaler Scrollbalken)
  • 3 – fmScrollBarsBoth(horizontales und vertikales Scrollen)

PasswortChar- ermöglicht es Ihnen, das Zeichen festzulegen, das anstelle der Eingabedaten angezeigt wird. Die Eigenschaft ist bei der Eingabe eines Passworts relevant.

Maximale Länge- Ermöglicht die Angabe der maximalen Anzahl von Zeichen, die in das Textfeld eingegeben werden können. Der Standardwert ist 0, was bedeutet, dass es keine Begrenzung gibt.

Wie andere Steuerelemente hat die TextBox-Klasse Ereignisse, das Hauptereignis für eine TextBox ist Rückgeld- tritt jedes Mal auf, wenn ein Zeichen in das Textfeld eingegeben wird. Möglicherweise haben Sie dieses Bild gesehen: Wenn Sie einen Bestätigungscode eingeben, ist die Schaltfläche „Prüfen“ nicht verfügbar, bis seine Länge die angegebene Länge erreicht (z. B. 12 Zeichen). Dies ist auch hier möglich.


Okay, jetzt ist es Zeit zu üben. Ich werde nicht noch einmal auf alle Details eingehen, wie in früheren Artikeln, also sage ich es direkt: Fügen Sie dem Projekt ein neues Modul und ein neues Formular hinzu. Wählen Sie das Caption ()-Steuerelement aus dem ToolBox-Fenster aus, fügen Sie es dem Formular hinzu, lassen Sie es oben sein, platzieren Sie ein Textfeld (TextBox) darunter und lassen Sie ganz unten eine Schaltfläche (mit der Bezeichnung „Check“) ). Nun, wie zuvor schreiben wir im Code-Editor für das Modul die Prozedur:

Hier verarbeiten wir einen einzelnen Klick auf die Schaltfläche, wenn die Schaltfläche angeklickt wird, wird der Caption-Eigenschaft des Label1-Objekts (Inscription) der Inhalt des Textfelds TextBox1 (Text-Eigenschaft) zugewiesen.

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

Hier wird das Change-Ereignis für das Textfeld des TextBox1-Objekts der vba-TextBox-Klasse verarbeitet. Die LenText-Variable speichert die Länge des eingegebenen Textes, jedes Mal, wenn Sie Daten eingeben, wird die Länge überprüft, wenn sie gleich 12 ist, dann wird die Schaltfläche aktiviert, andernfalls ist die 0-Schaltfläche inaktiv.

Bei dieser Prozedur werden die Anfangswerte gesetzt, einige davon können auch im Eigenschaftenfenster gesetzt werden, aber der Übersichtlichkeit halber habe ich mich entschieden, alles in den Programmcode zu schreiben. Hier gibt es nichts zu befürchten, sobald das Formular in den Speicher geladen ist, ist die Schaltfläche „Prüfen“ inaktiv, die Schriftgröße für das Textfeld und die Beschriftung ist auf 20 eingestellt, außerdem legen wir die maximale Textlänge für die fest TextBox VBA-Klasse der Sprache und ihrer einzelnen Zeile.

Möglichkeit 5
Benutzerdefiniertes Ansichtsformular erstellen:


Erstellen Sie im Formularmodul eine private Subroutinenprozedur, die gestartet wird, wenn auf die Schaltfläche „Berechnung“ geklickt wird. Das Verfahren sollte den Höchstbetrag berechnen, der für die tägliche Arbeit eines beliebigen Mitarbeiters der Planstelle, dessen Name in das Textfeld Feld1 eingetragen ist, an dem Wochentag anfällt, dessen Nummer in Feld2 eingetragen ist. Der aufgelaufene Betrag errechnet sich als Produkt aus Mining und Rate. Die Prozedur sollte das Ergebnis der Berechnung in Field3 platzieren.
Um ein Benutzerformular zu erstellen, gehen Sie zum Visual Basic-Code-Editor (Alt+F11) und wählen Sie im Menü Einfügen->Benutzerformular aus. Dann müssen Sie die erforderlichen Komponenten hinzufügen und alle Parameter des Formulars und der Komponenten konfigurieren - Größe, Schriftart, Titel.
In diesem Fall werden drei TextBox-Elemente benötigt (TextDolgn - Position, TextDen - Wochentag, TextMaks - maximal aufgelaufener Betrag), zwei Schaltflächen (Berechnen und Beenden) und 4 Beschriftungen. Alle Eigenschaften können im Bedienfeld Eigenschaften festgelegt werden.
Wenn Sie auf die Schaltfläche Berechnung doppelklicken, erstellt der Editor eine Verfahrensvorlage. Lassen Sie uns Text hinzufügen:

Privat Sub btnCalc_Click()
Dim r As Integer "Zeilennummer
Dim c As Integer "Spaltennummer
Dim maxSum As Integer "der maximal aufgelaufene Betrag
Dim rng As Range "benutzerdefinierter Bereich
textMaks.Text = "" "Löschen des Felds aus der vorherigen Suche
"Wenn der Titel der Position nicht eingegeben wird, dann die Nachricht und das Verfahren verlassen
Wenn textDolgn.Text = Leer Dann
MsgBox "Berufsbezeichnung eingeben!"
textDolgn.SetFocus "Fokus auf das Eingabefeld
Ausgang sub
Ende wenn
"Wenn die Tagesnummer nicht eingegeben wird, dann die Nachricht und das Verfahren verlassen
Wenn textDen.Text = leer ist, dann
MsgBox "Geben Sie die Nummer des Wochentags ein (1 bis 7)!"
textDen.SetFocus
Ausgang sub
Ende wenn
"Nicht numerischer Tageswert eingegeben
Wenn nicht (IsNumeric(textDen.Text)) Dann
MsgBox "Nicht numerischer Wochentag (erforderlich 1 bis 7)!"
textDen.SetFocus
Ausgang sub
"Ungültige Zahl für Wochentag eingegeben
ElseIf(CInt(textDen.Text)< 1) Or (CInt(textDen.Text) >7) Dann
MsgBox "Ungültiger Wochentag (erforderlich von 1 bis 7)!"
textDen.SetFocus
textDen.Text = "" "Feld löschen
Ausgang sub
Ende wenn
"Schleife ab Zeile 3 starten
r=3
"Tagesnummer aus Eingabefeld
c = CInt(textDen.Text)
Legen Sie rng = Sheets(1).UsedRange fest
maxSum = -1
Für r = 3 bis rng.Rows.Count
"wenn die angegebene Berufsbezeichnung in der Zelle gefunden wird
Wenn InStr(1, Cells(r, 2), textDolgn.Text, vbTextCompare) > 0 Then
„Wenn die Summe größer als das Maximum ist, dann ändere den Wert des Maximums auf einen neuen
If CInt(Cells(r, 3)) * CInt(Cells(r, c + 3)) > maxSum Then maxSum = CInt(Cells(r, 3)) * CInt(Cells(r, c + 3))
Ende wenn
Nächster
Wenn maxSum = -1 Dann
MsgBox "Die angegebene Position wurde nicht gefunden"
textMax.Text = "-"
Anders
textMaks.Text = CStr(maxSum)
Ende wenn
Set rng = Nothing "Freigeben von Speicher
End Sub
Hier gibt es viele Kontrollen. Prüfen Sie zunächst, ob alle Daten eingetragen sind. Wenn nicht, werden wir den Benutzer darüber informieren, den Eingabefokus auf ein leeres Feld setzen (zur Bequemlichkeit des Benutzers, damit er die Maus nicht noch einmal anstupst) und die Prozedur beenden.
Dann prüfen wir, ob die Tagesnummer korrekt eingegeben wurde. Erstens muss es eine Zahl sein und zweitens eine Zahl von 1 bis 7. Wenn etwas nicht stimmt, löschen wir das Eingabefeld, setzen den Fokus darauf und beenden die Prozedur, wobei wir den Benutzer erneut über einen erfolglosen Versuch informieren.
Wenn alles in Ordnung ist, beginnen wir mit der Suche nach den gewünschten Werten. Lassen Sie uns einen benutzerdefinierten Bereich definieren, der unabhängig von der Anzahl der Zeilen ist. Dann müssen Sie die maximale Menge in der Schleife finden. Zellwerte müssen mit etwas verglichen werden. Hier können wir nicht einfach die erste Zelle in einer Zeile oder Spalte ersetzen, was dann durch den Parameter ausgewählt werden muss - Position. Aber wir sehen, dass der aufgelaufene Betrag nicht kleiner als Null sein kann - der Satz kann nicht negativ sein, und die Anzahl der Arbeitsstunden auch. Nun, in diesem Fall ziehen wir die Möglichkeit einer "roten Umkehrung" - dh Korrekturen für frühere Perioden - nicht in Betracht. Nehmen wir also den anfänglichen Höchstbetrag gleich -1 (minus eins).
Wir starten eine Schleife durch die Zellen der Spalte mit der angegebenen Tageszahl (das ist der Wert des Eingabefeldes plus 3).
Überprüfen Sie, ob die Zelle die angegebene Berufsbezeichnung enthält. Sie können einfach zwei Zeichenfolgen vergleichen, aber das ist umständlich, da Sie die Position vollständig und korrekt eingeben müssen. Daher verwenden wir die InStr-Funktion, die einen Wert größer als 0 zurückgibt, wenn der angegebene Teilstring im String gefunden wird. Sie könnten die Like-Funktion verwenden, die auch zwei Zeichenfolgen vergleicht. Es liegt am Entwickler.
Wenn die Position in der Zelle gefunden wird, multiplizieren wir den Satz mit der Anzahl der geleisteten Arbeitsstunden und vergleichen das Ergebnis mit dem Höchstbetrag. Wenn das Ergebnis größer ist, ändern Sie es auf einen neuen Wert.
Vergessen Sie nicht, String-Werte bei Bedarf in Zahlen umzuwandeln und umgekehrt. Auch wenn Excel selbst versteht, wo was enthalten ist, ist es aus Gründen der Zuverlässigkeit besser, dies zu tun.
Nachdem wir den Zyklus durchlaufen haben, schauen wir, wenn der maximale Betrag -1 (Anfangswert) ist, dann gibt es keine solche Position. Wir zeigen eine Nachricht an und setzen zur Verdeutlichung einen Bindestrich in das Feld.
Wenn die Summe nicht gleich -1 ist, platzieren wir den gefundenen Wert im TextMaks-Feld.
Wir geben den Speicher des Objekts am Ende des Programms frei.
Es gibt auch Text für die Exit-Schaltfläche:
Privat Sub btnExit_Click()
"Formular hochladen
Entlade mich
End Sub
Um das Formular auszuführen, platzieren Sie eine Schaltfläche auf dem Datenblatt (Registerkarte „Entwickler“, Abschnitt „Steuerelemente“, Liste „Einfügen“ – wählen Sie die Schaltfläche aus den Formularsteuerelementen aus) und weisen Sie ihr das Makro Button1_Click zu. Schreiben Sie dann im Editor den Code für diese Schaltfläche:
Unter Button1_Click()
UserForm1.Show
End Sub
Alles, Sie können die Arbeit des Formulars überprüfen.
Ich habe hier nur 5 Optionen angegeben. Wenn Sie eine andere benötigen, können Sie in der VK-Gruppe nachfragen (siehe Kontaktseite). Aber im Allgemeinen sind alle Optionen ähnlich. Es gibt nur geringfügige Unterschiede, insbesondere wenn Sie eine Zeichenfolge mit mehreren Textwerten ausgeben müssen. Dann können Sie die Textbox-Eigenschaft - Multiline verwenden, um mehrere Zeilen anzuzeigen, und Zeilenumbruchzeichen zum Trennen verwenden.

Textfelder sind für die Eingabe und Bearbeitung von Text vorgesehen – das TextBox-Element. Genau wie beim Label-Element kann der Text des TextBox-Elements mithilfe der Text-Eigenschaft festgelegt oder abgerufen werden.

Standardmäßig wird beim Ziehen eines Elements aus einer Symbolleiste ein einzeiliges Textfeld erstellt. Um große Informationsmengen in einem Textfeld anzuzeigen, müssen Sie die Eigenschaften Multiline und ScrollBars verwenden. Wenn Sie die Multiline-Eigenschaft auf true setzen, werden alle überzähligen Zeichen, die außerhalb des Rands liegen, in eine neue Zeile umgebrochen.

Sie können ein Textfeld auch scrollen lassen, indem Sie seine ScrollBars-Eigenschaft auf einen der folgenden Werte setzen:

    None : kein Scrollen (Standard)

    Horizontal : Erstellt einen horizontalen Bildlauf, wenn die Zeilenlänge größer als die Breite des Textfelds ist

    Vertikal : Erstellt einen vertikalen Bildlauf, wenn die Zeilen nicht in das Textfeld passen

    Both : erstellt vertikales und horizontales Scrollen

Das TextBox-Element hat genug Leistung, um ein Autocomplete-Feld zu erstellen. Dazu müssen wir die Eigenschaft binden AutoCompleteCustomSource des TextBox-Elements zu einer Sammlung, aus der die Daten genommen werden, um das Feld zu füllen.

Also fügen wir dem Formular ein Textfeld hinzu und schreiben die folgenden Zeilen in den Ladeereigniscode:

Öffentliche partielle Klasse Form1: Form ( public Form1() ( InitializeComponent(); AutoCompleteStringCollection source = new AutoCompleteStringCollection() ( "Kuznetsov", "Ivanov", "Petrov", "Kustov" ); textBox1.AutoCompleteCustomSource = source; textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; ) )

Der Autocomplete-Modus, dargestellt durch die AutoCompleteMode-Eigenschaft, hat mehrere mögliche Werte:

    None : keine automatische Vervollständigung

    Suggest : Schlägt Vorschläge für die Eingabe vor, wird jedoch nicht abgeschlossen

    append : Hängt den eingegebenen Wert an einen String aus der Liste an, bietet aber keine Auswahlmöglichkeiten

    SuggestAppend : Beide schlagen Vorschläge für die automatische Vervollständigung vor und vervollständigen den vom Benutzer eingegebenen Wert

Zeilenumbruch

Damit der Text im TextBox-Element Wörter umbricht, müssen Sie die Eigenschaft festlegen Zeilenumbruch auf wahr setzen. Das heißt, wenn ein Wort nicht in die Zeile passt, wird es zum nächsten übertragen. Diese Eigenschaft funktioniert nur für mehrzeilige Textfelder.

Passworteingabe

Außerdem hat dieses Element Eigenschaften, die es Ihnen ermöglichen, es zu einem Feld für die Eingabe eines Passworts zu machen. Dazu müssen Sie also PasswordChar und UseSystemPasswordChar verwenden.

Die Eigenschaft PasswordChar hat standardmäßig keinen Wert. Wenn wir sie auf ein beliebiges Zeichen setzen, wird dieses Zeichen angezeigt, wenn Sie Zeichen in das Textfeld eingeben.

Die UseSystemPasswordChar-Eigenschaft hat einen ähnlichen Effekt. Wenn wir seinen Wert auf true setzen, wird im Textfeld anstelle der eingegebenen Zeichen das im System akzeptierte Passwortzeichen angezeigt, beispielsweise ein Punkt.

Von allen Ereignissen des TextBox-Elements sollte das TextChanged-Ereignis beachtet werden, das ausgelöst wird, wenn sich der Text im Element ändert. Lassen Sie uns zum Beispiel zusätzlich zum Textfeld ein Etikett auf dem Formular platzieren und es so gestalten, dass sich der Text auf dem Etikett ändert, wenn sich der Text im Textfeld ändert:

Öffentliche Teilklasse Form1: Form ( public Form1() ( InitializeComponent(); textBox1.TextChanged += textBox1_TextChanged; ) private void textBox1_TextChanged(object sender, EventArgs e) ( label1.Text = textBox1.Text; ) )

Dieses Beispiel verwendet Dialogfenster- UserForm1 sowie Steuerelemente Textfeld- TextBox1, TextBox2, TextBox3, für die das Kontextmenü erstellt wird. Beachten Sie, dass der Name des Kontextmenüs, der mit dem Namen des Formulars identisch ist (optional), eindeutig sein muss. Wenn bereits eine Symbolleiste mit demselben Namen vorhanden ist, erhalten Sie eine Fehlermeldung, wenn Sie versuchen, eine neue Symbolleiste zu erstellen. Dieser Fehler kann vermieden werden, indem überprüft wird, ob ein Panel mit diesem Namen vorhanden ist, bevor das Panel erstellt wird, oder indem das optionale Name-Argument der.Add-Methode nicht verwendet wird (siehe ähnliches Beispiel2).

Variante II. Wenn ein bisher Laden Sie das Steuerelement iemenu.ocx (IE Popup Menu) herunter und fügen Sie es der Liste der verfügbaren Links hinzu. Anschließend können Sie mit diesem Steuerelement ein Kontextmenü erstellen (siehe Beispiel 3).

  • Antworten:

    Möglichkeit I

    Aufmerksamkeit:
  • MultiLine- und ScrollBars-Eigenschaftswerte können manuell festgelegt werden
  • Antworten:
    Um Zellen mit den Daten eines Textfelds zu füllen, dessen MultiLine-Eigenschaft auf True gesetzt ist, können Sie das zeilenweise Lesen verwenden. Wenn die Zellen bereits gefüllt sind, löschen Sie den Inhalt und die Formate dieser Zellen (Spalte), nachdem Sie geprüft haben, ob sie geschützt sind

    Möglichkeit I(zeilenweise lesen)

    Notiz:
  • Um Zahlen mit führender Null einzugeben, müssen Sie ein entsprechendes Häkchen hinzufügen.
  • Bei sehr vielen Zeilen im Textfeld ist es sinnvoll, die Bildschirmaktualisierung zu deaktivieren [FAQ43 ]

    Variante II.(kein zeilenweises Lesen)

  • Antworten:

    Wenn es erforderlich ist, nur eindeutige (zuvor sich nicht wiederholende) Zeichen in das Textfeld einzugeben. Mit anderen Worten, Sie müssen die Eingabe von Zeichen verbieten, die bereits im Text vorhanden sind, und dann die Option unten verwenden, wobei das Ereignis TextBox1_KeyPress verwendet wird, um die Eingabe von Duplikaten (Wiederholungen) zu verbieten, und das Ereignis TextBox1_KeyDown, um das Einfügen zu verbieten von kopierten Daten, die Duplikate enthalten können (Wiederholungen)

    Möglichkeit I

  • Antworten:

    Sie können die folgende Option verwenden, um die Eingabe unnötiger Zeichen zu verhindern, z. B. Zeichen, die in einem Dateinamen nicht verwendet werden können. Dabei wird das TextBox1_KeyPress-Ereignis verwendet, um die Eingabe unnötiger Zeichen zu verhindern, und das TextBox1_KeyDown-Ereignis wird verwendet, um das Einfügen kopierter Daten zu verhindern, die möglicherweise unzulässige Zeichen enthalten.

  • Antworten:

    Um festzustellen, welche der Tasten UMSCHALT, STRG, ALT beim Arbeiten mit einem Textnamen namens TextBox1 gedrückt wurde, können Sie die folgende Option verwenden. Die Anzeige von Informationen in der Kopfzeile des Benutzerformulars, auf dem das Textfeld platziert ist, dient nur der Übersichtlichkeit und ist selbstverständlich nicht zwingend.

    Notiz: Auf ähnliche Weise können Sie die Schriftart für andere Steuerelemente ändern, inkl. RefEdit, Label, ComboBox, ListBox ...
  • Antworten:

    Wenn Sie im Laufe der Arbeit beispielsweise über einen Standarddialog die benötigten Arbeitsmappen auswählen können und auch den Pfad (oder nur den Dateinamen) der ausgewählten Arbeitsmappe erhalten möchten, ohne sie zu öffnen, Erstellen Sie dann einfach ein Textfeld mit dem Namen TextBox1 und verwenden Sie bei Bedarf die Schaltfläche auf der rechten Seite (die Schaltfläche wird ohne Ihre Teilnahme angezeigt).



  • Unterstützen Sie das Projekt - teilen Sie den Link, danke!
    Lesen Sie auch
    Spielregeln für Hahnenkämpfe Spielregeln für Hahnenkämpfe Mod für Minecraft 1.7 10 Uhr Rezepte.  Rezepte zum Herstellen von Gegenständen in Minecraft.  Waffen in Minecraft Mod für Minecraft 1.7 10 Uhr Rezepte. Rezepte zum Herstellen von Gegenständen in Minecraft. Waffen in Minecraft Schilling und Pfund Sterling - der Ursprung der Wörter Schilling und Pfund Sterling - der Ursprung der Wörter