Rückkehr in VBA-Code-Beispiele

VBA-Benutzerformulare erstellen

dieses Tutorial behandelt VBA-Benutzerformulare.

VBA-Benutzerformulare

Das Benutzerformular ist ein sehr wichtiger Teil der Programmierung in VBA. Es ermöglicht Ihnen, eine professionell aussehende Benutzeroberfläche zu erstellen, um mit den Benutzern Ihrer VBA-Anwendung zu kommunizieren. Außerdem können Sie damit die Aktionen des Benutzers, die er in Ihrer Arbeitsmappe durchführt, vollständig kontrollieren.

Sie können natürlich auch Arbeitsblattzellen verwenden, um Parameter vom Benutzer zu akzeptieren, aber das Benutzerformular bietet eine viel bessere Benutzererfahrung.

Indem Sie die Höhe und Breite Ihres Benutzerformulars auf die Größe des Excel-Fensters erweitern, können Sie Ihre Anwendung wie eine normale Windows-Anwendung aussehen lassen, ohne dass der Benutzer merkt, dass er Excel als Host verwendet.

Alle normalen Windows-Steuerelemente, wie Dropdowns, Listenfelder und Kontrollkästchen, stehen Ihnen zur Verfügung. Außerdem können Sie eine Vielzahl von Methoden, Ereignissen und Eigenschaften verwenden, um die Benutzerfreundlichkeit zu erhöhen.

Ein wichtiger Punkt ist die Tatsache, dass Sie Ihren Code nicht im VBE bearbeiten können und keinen Zugriff auf Excel-Funktionen haben, wenn Sie ein integriertes oder modales Formular anzeigen. Erst wenn das Formular geschlossen wird, erscheint der Mauszeiger in Ihrem Code wieder.

Eingebaute VBA-Benutzerformulare

Excel VBA verfügt über mehrere integrierte Formulare, die für die Kommunikation mit dem Benutzer verwendet werden können.

Meldungsbox

Dies ist das am häufigsten verwendete Formular in VBA. Es zeigt einfach eine Textnachricht an, die den Benutzer möglicherweise darüber informiert, dass er eine ungültige Eingabe gemacht hat oder dass ein VBA-Prozess beendet wurde. In ihrer einfachsten Form zeigen sie eine Textzeichenfolge an, aber Sie können auch ein Symbol wie ein Frage- oder Ausrufezeichen hinzufügen und der Meldungsbox einen anderen Titel geben. vba einfache meldungsbox

Dies ist ein einfaches Beispiel. Es gibt nur eine Schaltfläche zum Anklicken, und die Titelleiste sagt „Microsoft Excel“.

Der Code, der dies erzeugt, ist sehr einfach:

Sub TestMeldungsBox()
MsgBox "Der Prozess ist abgeschlossen."
End Sub

Sie können verschiedene Parameter verwenden, um Schaltflächen und Symbole hinzuzufügen und die Titelleiste zu ändern

Sub TestMeldungsBox()
Dim Ret As Variant
Ret = MsgBox("Sind Sie Sicher?", vbYesNo Or vbQuestion, "My Application")
If Ret = vbYes Then
    'Ihr Prozess hier
Else
    Exit Sub
End If
End Sub

vba ja nein meldungsbox

Dieser Code fügt eine Ja- und eine Nein-Schaltfläche sowie ein Fragezeichensymbol ein und legt die Titelleiste fest. Beachten Sie, dass Sie die Stile der Meldungsbox mit dem Operator ‚Or‘ kombinieren können.

Wenn Sie einen Wert aus einer Messagebox zurückgeben, muss die Rückgabevariable als Variant oder vbMsgBoxResult definiert sein, und die Meldungsbox-Anweisung muss Klammern verwenden.

Eingabefeld

In VBA ist ein sehr einfaches Eingabefenster integriert, das allerdings recht restriktiv ist, was die Möglichkeiten angeht. Wenn Sie können, ist es besser, ein benutzerdefiniertes Benutzerformular zu entwerfen

Sub TestEingabefenster()
Dim Ret As String
Ret = InputBox("Geben Sie Ihren Namen ein", "Name eingeben")
MsgBox Ret
End Sub

vba einfaches eingabefenster

Sie können auch einen Standardwert für die Eingabe in die Parameter eingeben.

Dateinamen öffnen (Dateidialog)

So können Sie den Windows-Dateidialog in Ihrem VBA-Code nutzen. Es sieht für den Benutzer sehr beeindruckend aus, wenn es ausgeführt wird, aber es ist sehr einfach zu integrieren und Sie erhalten damit automatisch alle Funktionen des Dateidialogs.

vba datei oeffnen

Der Code schränkt den Benutzer darauf ein, nur Excel-Dateien zu sehen. Leider könnte der Benutzer auch einen anderen Dateinamen als Excel in das Feld Dateiname eingeben und auf die Schaltfläche „Öffnen“ klicken. Aus diesem Grund benötigen Sie einen Code, um sicherzustellen, dass eine Excel-Datei ausgewählt wird.

Verwenden Sie den Befehl ‚ChDir‘, um das Standardverzeichnis nach Ihren eigenen Anforderungen zu ändern, bevor Sie den Dateidialog anzeigen.

Beachten Sie die Verwendung von Platzhaltern im FileFilter-Parameter. Die anzuzeigenden Excel-Dateien könnten vor 2007 sein, Makros enthalten oder binär sein, also der Filter lautet „.xls*“.

Sub TestDateiDialog()
Dim MeineDatei As String
ChDir = "C:\temp"
MeineDatei = Application.GetOpenFilename("Excel-Dateien (*.xls*),*.xls*", , "Wählen Sie eine Datei aus")
MsgBox MeineDatei
End Sub

Bei Bedarf können Sie dem Benutzer die Möglichkeit geben, mehrere Dateien auf einmal auszuwählen, indem Sie den Parameter MultiSelect verwenden. Der Standardwert ist False (nur Einzelauswahl).

Sub TestDateiDialog()
Dim MeineDatei As Variant
ChDir "C:\temp"
MeineDatei = Application.GetOpenFilename("Excel-Dateien (*.xls*),*.xls*", , "Wählen Sie eine Datei aus", , True)
For Each f In MeineDatei
    MsgBox f
Next f
End Sub

Der Benutzer hält die Umschalttaste im Dateidialog gedrückt, um mehrere Dateien auszuwählen.

Die For-Each-Schleife zeigt den vollständigen Pfad und Namen jeder ausgewählten Datei an.

Excel-Standard-Dialogfenster

In Excel VBA gibt es eine Dialogfenstersammlung, mit der Sie jedes Excel-Standarddialogfenster anzeigen können. Der Nachteil ist, dass Sie weder auf die Parameter zugreifen können, die der Benutzer ausgewählt hat noch das Aussehen des Dialogfensters ändern können, aber diese Dialogfenster können nützlich sein, um den Benutzer zu einer Standard-Excel-Funktionen zu leiten und ihm die Möglichkeit zu geben, bestimmte Parameter innerhalb des Dialogfensters auszuwählen.

Ein gutes Beispiel hierfür ist die Anzeige des Dialogfensters „Drucken“ in VBA:

Sub TestDruckDialog()
Application.Dialogs(xlDialogPrint).Show
End Sub

Wenn Sie die Klammern in der Dialogfenstersammlung öffnen, sehen Sie eine Liste mit einer großen Anzahl von Konstanten für integrierte Dialogfenster. Es lohnt sich, mit einigen dieser Optionen in Ihrem Code zu experimentieren.vba dialogfenster drucken

Einfügen eines neuen Benutzerformulars

Sie können Ihre eigenen benutzerdefinierten Formulare entwerfen, indem Sie ein Benutzerformular in den Visual Basic Editor (VBE) einfügen.

Wählen Sie dazu im VBE-Menüband Einfügen -> UserForm. vba benutzerformular hinzufuegen

Klicken Sie auf „UserForm“ und ein neues, leeres Formular wird angezeigt, das Sie weiter bearbeiten können.

vba benutzerformular bearbeiten

Das eigentliche Formular (angezeigt als „UserForm1“) sieht recht klein aus, aber Sie können es mit den Ziehpunkten um das Formular herum vergrößern oder verkleinern, indem Sie diese mit dem Mauszeiger ziehen.

In der unteren linken Ecke des Bildschirms befindet sich ein Eigenschaftsfenster. Da der Fokus direkt auf dem Formular selbst liegt, enthält dieses Fenster alle Eigenschaften, die für dieses Formular spezifisch sind.

Wenn Sie weitere Steuerelemente wie Kombinationsfelder und Befehlsschaltflächen hinzufügen, haben diese alle ihre eigenen Eigenschaften und die Möglichkeiten, die sie bieten, können sehr unterschiedlich sein.

Die Eigenschaften, die Sie derzeit sehen, gelten nur für das Formular selbst.

Die Eigenschaft „Name“ ist der Name, der zur Definition Ihres Formularobjekts im VBA-Code verwendet wird. Vielleicht möchten Sie für den Objektnamen einen aussagekräftigeren Namen verwenden, damit bei der Überprüfung Ihres Codes klar ist, welches Formular verwendet wird.

Die Eigenschaft „Name“ wird auch im Fenster „Projekt-Explorer“ in der oberen linken Ecke des Bildschirms angezeigt.

Sie werden die Titelleiste Ihres Formulars in etwas anderes als „UserForm1“ ändern wollen, indem Sie Ihren neuen Text in die Eigenschaft „Caption“ eingeben.

Sie können eine Vielzahl von Änderungen daran vornehmen, wie Ihr Formular vom Benutzer gesehen wird. Sie können Farben ändern, Bilder hinzufügen, z. B. ein Firmenlogo, die Position mit „Left“ und „Top“ ändern, die Größe mit „Height“ und „Width“ ändern, den Mauszeiger ändern und vieles mehr.

Alle diese Eigenschaften können auch programmatisch für jedes Steuerelement geändert werden, das Sie zu Ihrem Formular hinzugefügt haben. Zum Beispiel kann ein Benutzer eine Auswahl aus einem Listenfeld treffen oder Sie möchten vielleicht andere Steuerelemente je nach Auswahl des Benutzers deaktivieren oder ausblenden

Verwendung der Toolsammlung

Wenn Sie auf das Formular selbst klicken, erscheint ein Popup-Fenster mit einer Toolsammlung. Wenn Sie auf eine andere Stelle klicken, z. B. auf das Eigenschaftsfenster, verschwindet es. Die Toolsammlung erscheint aber wieder, wenn Sie auf das Formular klicken.

Die Toolsammlung enthält die eigentliche Mechanik des Formularentwurfs. So können Sie Ihrem Formular die normalen Windows-Steuerelemente hinzufügen, mit denen die Benutzer vertraut sind.

vba steuerelement toolsammlung

Sie werden bemerkt haben, dass das Formular ein Netz von Punkten enthält. Dabei handelt es sich um ein „Snapgrid“, d. h., wenn Sie dem Formular ein Steuerelement hinzufügen, wird dessen Position automatisch an den Zeilen und Spalten der Punkte ausgerichtet. Dies hilft enorm bei der Ausrichtung Ihrer Steuerelemente, so dass diese nicht zerlumpt aussehen.

Wenn Sie auf ein Steuerelement klicken und es dann nicht verwenden möchten, können Sie den Mauszeiger durch Klicken auf das Pfeilsymbol in der oberen linken Ecke des Werkzeugkastens wieder in den Normalzustand zurücksetzen.

Sie können der Toolsammlung zusätzliche Steuerelemente hinzufügen, indem Sie im VBE-Menü Extras -> Zusätzliche Steuerelemente wählen. Es gibt eine beträchtliche Anzahl dieser Steuerelemente, aber je nach Windows- und Excel-Version funktionieren sie nicht immer, so dass oft ein wenig Experimentieren erforderlich ist.

Außerdem haben Ihre Benutzer möglicherweise keinen Zugriff auf einige dieser zusätzlichen Steuerelemente oder verwenden ältere Versionen von Windows und Excel, was zu Problemen führen kann. In großen Unternehmen, insbesondere wenn sie weltweit tätig sind, gibt es keinen Standard-PC, auf den man sich verlassen kann!

vba zusaetzliche steuerelemente

Hinzufügen einer Schaltfläche namens „Exit“ zu Ihrem Formular

Eine Befehlsschaltfläche kann dem Formular einfach hinzugefügt werden. Sie sieht genauso aus wie die Schaltflächen, die Sie in anderen Windows-Formularen sehen, üblicherweise wie die Schaltflächen „OK“ oder „Abbrechen“.

Klicken Sie auf das Symbol „Befehlsschaltfläche“ in der Toolsammlung. Dies ist das zweite Symbol von links in der unteren Reihe der Symbole (siehe das Bild oben). Es ist mit den Buchstaben ‚ab‘ beschriftet.

Sie können entweder die Maustaste gedrückt halten und das Steuerelement auf Ihr Formular ziehen, oder Sie können den Mauszeiger auf das Formular bewegen, wo er sich in einen Kreuz-Cursor verwandelt und Sie die Schaltfläche positionieren und vergrößern können.

Wenn Sie das Steuerelement auf das Formular ziehen, erhalten Sie die Standardgröße der Schaltfläche. Wenn Sie den Mauszeiger auf das Formular bewegen, können Sie die Größe der Schaltfläche ändern, indem Sie den Kreuz-Cursor über Ihr Formular ziehen.

Ihr Formular sieht nun folgendermaßen aus:

benutzerformular schaltflaeche hinzufuegen

Die Schaltfläche hat einen Standardtext als Beschriftung, den Sie jedoch nach Ihren eigenen Wünschen ändern können. Sie können auf den Text in der Schaltfläche („CommandButton1“) klicken und so die Beschriftung direkt bearbeiten.

Sie können ihn auch im Eigenschaftsfenster (unten links auf dem Bildschirm) ändern. Dort sehen Sie eine Eigenschaft mit der Bezeichnung „Caption“, deren Wert Sie bearbeiten können. Ändern Sie diesen in „Exit“.

Wie bei den Formulareigenschaften definiert die Eigenschaft „Name“ den Namen, der in Ihrem VBA-Code verwendet wird. Vielleicht möchten Sie einen Namen verwenden, der in Ihrem Code aussagekräftiger und eindeutiger ist. Diesen können Sie in die Eigenschaft „Name“ eingeben.

Sie können die Schaltfläche neu positionieren, indem Sie sie auf dem Formular verschieben, und Sie können ihre Größe ändern, indem Sie auf die Schaltflächengriffe (weiße quadratische Felder) klicken und diese ziehen, um die Schaltfläche zu vergrößern oder zu verkleinern.

Sie können auch die Größe der Schaltfläche ändern, indem Sie die Werte für Höhe und Breite im Eigenschaftsfenster ändern.

Sie können Ihr Formular in Excel anzeigen, indem Sie auf das grüne Dreieck in der VBE-Symbolleiste klicken oder F5 drücken.

vba benutzerformular anzeigen

Sie können Ihr Formular aus VBA-Code innerhalb eines Moduls aufrufen, indem Sie die Methode „Show“ verwenden

Sub FormularEinblenden()
UserForm1.Show
End Sub

Ihr Benutzerformular ist praktisch ein globales Objekt und kann von überall in Ihrem Code aufgerufen werden.

Im Moment tut Ihre Befehlsschaltfläche nichts, weil kein VBA-Code dahinter steht. Das müssen Sie selbst schreiben! Das Einzige, was im Moment passieren kann, ist es, dass Sie auf den „X“ zum Schließen in der oberen rechten Ecke Ihres Formulars klicken.

Um VBA-Code hinzuzufügen, doppelklicken Sie auf die Schaltfläche im Formular.

Dadurch gelangen Sie in das normale VBA-Code-Fenster, in dem das Standardereignis „Click“ angezeigt wird.

Sie verwenden die Methode „Hide“, um das Formular zu schließen, und Sie können auch anderen Code hinzufügen, z. B. eine Meldungsbox anzeigen, um dem Benutzer zu bestätigen, was passiert ist. vba benutzerformular ausblenden

Beachten Sie, dass das Codefenster oben zwei Dropdown-Listen hat. Mit der ersten können Sie Ihre Formularsteuerelemente auswählen, und die zweite zeigt alle Ereignisse an, die Ihnen für das Hinzufügen von Code zur Verfügung stehen. Das offensichtliche Ereignis für eine Schaltfläche ist das „Klicken“, aber es gibt auch andere wie „Doppelklicken“ oder „Mausbewegung“.

Wenn Sie Ihr Formular jetzt ausführen, führt die Schaltfläche tatsächlich etwas aus. Das Formular verschwindet und es wird eine Meldung angezeigt, die bestätigt, dass das Formular geschlossen ist.

Sie können den Schließcode natürlich erweitern. Vielleicht möchten Sie ein anderes Formular anzeigen oder eine Aktion nach Parametern ausführen, die der Benutzer in Ihr Formular eingegeben hat

Hinzufügen eines Beschriftungssteuerelements zu einem Formular

Beschriftungssteuerelemente dienen dazu, den Benutzer darauf hinzuweisen, welche Art von Daten er in ein Steuerelement des Formulars eingeben muss, z. B. ein Textfeld, ein Dropdown-Feld usw. Ein Beschriftungsfeld hat standardmäßig keine Ränder, diese können aber bei Bedarf über das Eigenschaftsfenster hinzugefügt werden.

Als Steuerelement sind sie für den Benutzer nur lesbar und stellen einfach eine Möglichkeit dar, Text in das Formular einzufügen. Dies kann eine fettgedruckte Überschrift oder eine Anweisung sein, was eingegeben oder ausgewählt werden soll.

Um eine Beschriftung hinzuzufügen, klicken Sie auf das Symbol „A“ in der Toolsammlung (oberste Reihe, zweite von links) und doppelklicken Sie darauf oder bewegen Sie den Mauszeiger auf das Formular und wählen Sie die Position und Größe.

benutzerformular beschriftungsfeld hinzufuegen

Über die Eigenschaft „Caption“ im Eigenschaftsfenster oder durch Klicken auf das Beschriftungssteuerelement können Sie den Text dafür eingeben.

Beachten Sie, dass der Text entsprechend der Größe des Beschriftungssteuerelements umbrochen wird. Wenn der Text zu lang ist, erscheint er nicht vollständig auf dem Formular. Aus diesem Grund müssen Sie auf die Größe des Label-Steuerelements achten.

Mit Hilfe des Eigenschaftsfensters können Sie das Erscheinungsbild des Beschriftungssteuerelements mit verschiedenen Farben, Schriftarten und Hintergrundstilen ändern, z. B. wenn es ein Bild überlagert und Sie es transparent machen möchten.

Für ein Beschriftungssteuerelement muss kein Code erstellt werden. Der Hauptzweck besteht darin, dem Formular Text hinzuzufügen, damit der Benutzer sehen kann, wie alle anderen Steuerelemente funktionieren.

Hinzufügen eines Textsteuerelements zu einem Formular

Ein Textsteuerelement wird verwendet, um dem Benutzer die Eingabe von Text zu ermöglichen, z. B. die Eingabe eines Namens oder eines Kommentars.

Das Textsteuerelement wird aus der Toolsammlung hinzugefügt, indem Sie auf das Symbol für das Textsteuerelement (oberste Reihe, dritter von links) klicken und das Steuerelement mit einem Doppelklick oder durch Ziehen in die gewünschte Position in Ihrem Formular bringen.

Das Textsteuerelement wird oft mit dem Beschriftungssteuerelement verwechselt, aber das Textsteuerelement ist dasjenige, das für Benutzereingaben gedacht ist.

benutzerformular textfeld hinzufuegen

Der Text „Enter your name“ ist ein Beschriftungssteuerelement, wie zuvor beschrieben, und wir haben jetzt ein weißes Textfeld, in das der Benutzer etwas eingeben kann.

Über das Eigenschaftsfenster können Sie die Farben, Schriftarten und Spezialeffekte ändern oder Kennwortzeichen für Ihr Textfeld verwenden. Enorme Flexibilität ist möglich.

Eine sehr wichtige Eigenschaft für ein Textfeld ist die Eigenschaft „MultiLine“ (Deutsch: Mehrzeilig). Wenn Sie möchten, dass der Benutzer eine große Menge an Text in das Textfeld eingibt, z. B. Kommentare, dann muss die Eigenschaft „MultiLine“ auf „True“ gesetzt werden.

Der Standardwert ist False, was bedeutet, dass der eingegebene Text, egal wie groß Sie das Textfeld gestalten, in einer durchgehenden Zeile bleibt und aus dem Textfeld herausrollt. Er wird nicht innerhalb des Feldes umbrochen.

Es gibt kein Popup-Fenster, wenn Sie mit der rechten Maustaste auf Ihr Textfeld klicken, aber STRG+V funktioniert fürs Einfügen und STRG+C funktioniert fürs Kopieren, falls der Benutzer Text aus anderen Anwendungen kopieren und einfügen möchte.

Auch hier müssen Sie Ihren eigenen Code schreiben, um den Text zu verarbeiten, den der Benutzer eingegeben hat. Vielleicht möchten Sie ihn in eine Zelle eines Arbeitsblatts übertragen.

Sie können folgenden Code in das Ereignis „Change“ des Textfeldes einfügen:

Private Sub TextBox1_Change()
Sheets("Sheet1").Range("A1").Value = TextBox1.Value
End Sub

Möglicherweise möchten Sie auch einen Validierungscode einfügen, um sicherzustellen, dass der Benutzer keinen Unsinn eingibt, der katastrophale Auswirkungen auf Ihre Anwendung haben würde.

Das Change-Ereignis ist dafür nicht geeignet, da es jedes Mal aufgerufen wird, wenn der Benutzer ein neues Zeichen eingibt. Der Benutzer könnte mit der Eingabe eines Textes beginnen und sofort feststellen, dass er Ihre Validierungsregeln verletzt hat, bevor er einen gültigen Text eingegeben hat.

Sie verwenden das Ereignis „Exit“. Dieses wird ausgelöst, wenn der Benutzer den Fokus auf ein anderes Steuerelement im Formular verschiebt, was bedeutet, dass der Benutzer keine Daten mehr eingibt.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNull(TextBox1.Value) Or Len(TextBox1.Value) < 4 Then
    MsgBox "Name ist ungültig", vbCritical
    TextBox1.SetFocus
End If
End Sub

Wenn der Benutzer auf ein anderes Steuerelement im Formular klickt, prüft dieser Code, ob der Wert im Textfeld ungültig ist oder weniger als 4 Zeichen enthält. Wenn das Ergebnis der Prüfung True lautet, wird eine Meldungsbox mit einem kritischen Symbol angezeigt, um den Benutzer darüber zu informieren, dass der Name ungültig ist, und der Fokus wird zurück in das betroffene Textfeld gesetzt, damit der Benutzer ihn korrigieren kann.

Beachten Sie, dass das Ereignis zum Beenden des Textfelds zuerst ausgeführt wird, so dass der Benutzer das Feld nicht verlassen kann, ohne die Eingabe zu korrigieren, selbst wenn er auf die Schaltfläche „Exit“ klickt.

Initialisieren und Aktivieren von Ereignissen in einem Formular

Wenn VBA zum ersten Mal ein Formular erstellt und aufbaut, löst es ein Ereignis namens „Initialize“ aus. Da das Formular zu diesem Zeitpunkt jedoch auch angezeigt wird, löst es auch ein Ereignis namens „Activate“ aus. Von da an wird jedes Mal, wenn das Formular mit der Methode „Show“ oder als Teil einer Formularhierarchie angezeigt wird, das Ereignis „Activate“ ausgelöst, aber nicht das Ereignis „Initialize“.

Das Ereignis „Initialize“ tritt nur einmal auf. Dagegen kann das Ereignis „Activate“ jedoch mehrmals auftreten.

In Ihrem Formular können Sie Standardwerte aus dem Arbeitsblatt in den Eingabefeldern, z. B. Textfeldern, einrichten, so dass diese bei der ersten Verwendung des Formulars angezeigt werden, aber der Benutzer kann die Standardwerte überschreiben, und diese neuen Werte bleiben erhalten, solange der Code ausgeführt wird

Private Sub Benutzerformular_Initialize()
TextBox1.Value = Sheets("Sheet1").Range("A1").Value
If TextBox1.Value="" Then
	TextBox1.Visible=False
Else
	TextBox1.Visible=True
End If
End Sub

Das Ereignis „Initialize“ finden Sie in der zweiten Dropdown-Liste im Code-Fenster und den Namen des Benutzerformulars in der ersten Dropdown-Liste.

Dieser Code verwendet den Wert in Zelle A1 auf „Sheet1“ als Standardwert in dem zuvor in diesem Artikel erstellten Textfeld. Wenn das Formular zum ersten Mal erscheint, wird der Standardwert angezeigt. Der Benutzer kann dann den Standardwert überschreiben, und dieser wird beibehalten. Wenn Zelle A1 leer ist, wird das Textfeld ausgeblendet, andernfalls wird es sichtbar sein.

Der Standardwert kann auch „fest programmiert“ werden:

TextBox1.Value = "John Smith"

Sie können auch dafür sorgen, dass die vom Benutzer eingegebenen Werte immer dann wieder erscheinen, wenn er das Formular in der betreffenden Excel-Sitzung aufruft. Mit VBA-Code können Sie die Werte mit Hilfe des Ereignisses „Exit“ auf einem Steuerelement ganz einfach in die Zellen der Arbeitsmappe zurückschreiben und sie mit Hilfe des Ereignisses „Activate“ auf dem Formular wieder einfügen

Private Sub TextBox1_Exit(ByVal Cancel as MSForms.ReturnBoolean)
Sheets("Sheet1").Range("A10").Value = TextBox1.Value
End Sub
Private Sub Benutzerformular_Activate()
TextBox1.Value = Sheets("Sheet1").Range("A10").Value
End Sub

Dieser Code sorgt dafür, dass die Werte des Benutzers dauerhaft bleiben und mit dem Rest der Arbeitsmappe abgespeichert werden

Speichern Ihrer Anwendung und Formulare

Wenn Sie Ihre Excel-Arbeitsmappe mit den Formularen speichern, werden auch alle Formulare und ihr VBA-Code gespeichert. Allerdings gehen alle Werte, die in den Formularen gespeichert sind, während sie angezeigt werden, verloren.

Es ist wichtig, den Code so zu schreiben, der die Werte in die Zellen der Arbeitsmappe zurückschreibt, wenn der Benutzer die Arbeitsmappe oder das Formular verlässt und somit bleiben sie erhalten.

Modale und nicht modale Formulare

Das Formular selbst hat eine Eigenschaft namens „ShowModal“. Diese ist standardmäßig auf True eingestellt, aber sie kann auf False (nicht modal) geändert werden.

benutzerformular modal eigenschaft

Wenn ein Formular modal ist, bedeutet dies, dass auf keine der Excel-Funktionen zugegriffen werden kann, während das Formular angezeigt wird. Dies gilt auch für Ihren Code im VBE-Fenster. Sie können den Code anzeigen, aber der Mauszeiger und die Tastatur sind deaktiviert.

In einem nicht-modalen Formular können Sie auf alle Excel-Funktionen zugreifen, auch auf das VBE-Fenster, während das Formular angezeigt wird.

Dies ist wichtig, um das Benutzerverhalten zu kontrollieren.

Schließen eines Formulars

Wie gut Sie Ihren Code auch schreiben, um den Benutzer auf einen bestimmten Weg zu zwingen, er kann ihn leicht umgehen, indem er auf X zum Schließen in der oberen rechten Ecke des Formulars klickt.

Sie können dies verhindern, indem Sie das Formularereignis „QueryClose“  ändern

Private Sub Benutzerformular_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
MsgBox "Diese Aktion ist deaktiviert"
End Sub

Das Ereignis „QueryClose“ wird ausgelöst, wenn der Benutzer auf den X zum Schließen des Formulars klickt. Dieser Code bricht die Aktion ab, so dass der Benutzer gezwungen ist, Ihre Schaltfläche „Exit“ und den dahinter stehenden Code zu verwenden.

Aktivieren und Deaktivieren von Steuerelementen

Alle Steuerelemente in Ihrem Formular haben eine Eigenschaft namens „Enabled“, die auf True oder False gesetzt ist. Ist sie auf False gesetzt, ist das Steuerelement ausgegraut. Es ist zwar sichtbar, kann aber nicht verwendet werden.

Es gibt auch eine Eigenschaft namens „Visible“, die ebenfalls auf True oder False gesetzt werden kann.

Sie können den Code schreiben, um ein bestimmtes Steuerelement entweder unbrauchbar zu machen oder um es für den Benutzer völlig unsichtbar zu machen. Mit einer If-Anweisung können Sie die Umstände auswählen, unter denen Sie dies tun müssen.

Zum Beispiel könnten Sie die Schaltfläche „Exit“ zunächst deaktivieren, bis der Benutzer einen Wert in die TextBox1 (Name) eingegeben hat

Private Sub Benutzerformular_Initialize()
CommandButton1.Enabled = False
End Sub
Private Sub TextBox1_Change()
If Len(TextBox1.Value) > 0 Then
    CommandButton1.Enabled = True
Else
    CommandButton1.Enabled = False
End If
End Sub

Dieser Code verwendet das Ereignis „Initialize“ des Formulars, um die Schaltfläche „Exit“ (Befehlsschaltfläche1) zu deaktivieren, wenn das Formular zum ersten Mal angezeigt wird und verwendet dann das Ereignis „Change“ von TextBox1 (Name), um die Schaltfläche „Exit“ zu aktivieren, wenn etwas eingegeben wurde, oder sie zu deaktivieren, wenn das Feld leer ist.

Das Ereignis „Change“ wird jedes Mal ausgelöst, wenn ein neues Zeichen in das Textfeld eingegeben oder daraus gelöscht wird. Wenn der Benutzer versucht, einen Text einzugeben, um die Schaltfläche zu aktivieren und dann den gesamten Text löscht, wird die Schaltfläche sofort wieder deaktiviert.vba steuerelement deaktiviert