VBA-Benutzerformulare
Die Userform 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. Es ermöglicht Ihnen auch, den Benutzer vollständig zu kontrollieren, was er mit Ihrer Arbeitsmappe macht.
Sie können natürlich Arbeitsblattzellen verwenden, um Parameter vom Benutzer zu akzeptieren, aber das Benutzerformular bietet eine weitaus 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, wobei der Benutzer nicht weiß, dass er Excel als Host verwendet.
Alle normalen Windows-Steuerelemente wie Dropdowns, Listenfelder, Kontrollkästchen stehen Ihnen zur Verfügung. Sie haben auch eine große Auswahl an Methoden, Ereignissen und Eigenschaften, die Sie verwenden können, um die Benutzererfahrung zu verbessern.
Ein wichtiger Punkt ist, dass Sie beim Anzeigen eines integrierten oder modalen Benutzerformulars weder Ihren Code in der VBE bearbeiten noch auf Excel-Funktionen zugreifen können. Erst wenn das Formular geschlossen ist, erscheint der Cursor in Ihrem Code.
Eingebaute VBA-Benutzerformulare
Excel VBA als mehrere integrierte Formulare, die zur Kommunikation mit dem Benutzer verwendet werden können.
Nachrichtenbox
Dies ist die am häufigsten verwendete Form in VBA. Es zeigt einfach eine Textnachricht an, die einen 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 eine Frage oder ein Ausrufezeichen hinzufügen und dem Meldungsfeld einen anderen Titel geben.
Dies ist ein grundlegendes Beispiel. Es gibt nur eine Schaltfläche zum Klicken und die Titelleiste sagt "Microsoft Excel".
Der Code, um dies zu erzeugen, ist sehr einfach:
123 | Unter TestMsgBox()MsgBox "Dieser Vorgang ist abgeschlossen"End Sub |
Sie können verschiedene Parameter verwenden, um Schaltflächen und Symbole hinzuzufügen und die Titelleiste zu ändern
123456789 | Unter TestMsgBox()Dim Ret als VarianteRet = MsgBox("Sind Sie sicher?", vbYesNo oder vbQuestion, "Meine Anwendung")Wenn Ret = vbJa Dann'Ihr Prozess hierAndersAbo beendenEnde WennEnd Sub |
Dieser Code fügt eine Schaltfläche "Ja" und "Nein" sowie ein Fragezeichen-Symbol hinzu und legt die Titelleiste fest. Beachten Sie, dass Sie die Stile des Nachrichtenfelds kombinieren können, indem Sie den Operator „Oder“ verwenden
Wenn Sie einen Wert aus einem Meldungsfeld zurückgeben, muss die Rückgabevariable außerdem als Variante oder vbMsgBoxResult definiert sein und die Meldungsfeldanweisung muss eckige Klammern verwenden.
Eingabefeld
Es gibt ein sehr einfaches Eingabefeld, das in VBA integriert ist, obwohl es ziemlich restriktiv ist, was Sie damit tun können. Wenn Sie können, ist es besser, ein benutzerdefiniertes Benutzerformular zu erstellen
12345 | Unter TestInputBox()Dim Ret als StringRet = InputBox("Bitte geben Sie Ihren Namen ein", "Namen eingeben")MsgBox RetEnd Sub |
Sie können den Parametern auch einen Standardwert für die Eingabe hinzufügen.
Geöffneten Dateinamen abrufen
Auf diese Weise können Sie den Windows-Dateidialog in Ihrem VBA-Code verwenden. Es sieht für den Benutzer sehr beeindruckend aus, wenn es ausgeführt wird, aber es ist sehr einfach zu integrieren und Sie erhalten automatisch alle Dateidialogfunktionen.
Der Code schränkt den Benutzer ein, nur Excel-Dateien anzuzeigen. Leider könnten sie einen Nicht-Excel-Dateinamen in das Feld Dateiname eingeben und auf die Schaltfläche Öffnen klicken, sodass Sie Code benötigen, um sicherzustellen, dass eine Excel-Datei ausgewählt wurde.
Verwenden Sie den Befehl ‚ChDir‘, um das Standardverzeichnis Ihren eigenen Anforderungen anzupassen, bevor Sie den Dateidialog anzeigen
Beachten Sie die Verwendung von Platzhaltern im FileFilter-Parameter. Die anzuzeigenden Excel-Dateien können vor 2007 sein, Makros enthalten oder binär sein, sodass der Filter „.xls*“ lautet.
123456 | Unter TestFileDialog()Dim MyFile As StringChDir "C:\temp"MyFile = Application.GetOpenFilename("Excel-Dateien (*.xls*),*.xls*", , "Datei auswählen")MsgBox MyFileEnd Sub |
Bei Bedarf können Sie dem Benutzer die Möglichkeit geben, mehrere Dateien gleichzeitig auszuwählen, indem Sie den Parameter MultiSelect verwenden. Der Standardwert ist False (nur Einzelauswahl)
12345678 | Unter TestFileDialog()Dim MyFile als VarianteChDir "C:\temp"MyFile = Application.GetOpenFilename("Excel-Dateien (*.xls*),*.xls*", , "Datei auswählen", , True)Für jedes f in MyFileMsgBox fNächstes fEnd Sub |
Der Benutzer hält im Dateidialog die Umschalttaste gedrückt, um mehrere Dateien auszuwählen.
Die For Each-Schleife zeigt den vollständigen Pfad und Namen jeder ausgewählten Datei an
Excel-Standarddialoge
Innerhalb von Excel VBA gibt es eine Dialogs-Sammlung, mit der Sie jeden Standard-Excel-Dialog anzeigen können. Der Nachteil ist, dass Sie nicht auf die vom Benutzer ausgewählten Parameter zugreifen oder das Erscheinungsbild des Dialogfelds ändern können, aber diese Dialogfelder können nützlich sein, um den Benutzer zu einer Standard-Excel-Funktion zu leiten und ihm die Auswahl bestimmter Parameter innerhalb des Dialogfelds zu ermöglichen.
Ein gutes Beispiel hierfür ist die Anzeige des Dialogs „Drucken“ von VBA:
123 | Unter TestPrintDialog()Application.Dialogs(xlDialogPrint).ShowEnd Sub |
Wenn Sie die Klammern in der Dialogs-Sammlung öffnen, sehen Sie eine Liste mit einer großen Anzahl von Konstanten für integrierte Dialoge. Es lohnt sich, mit einigen dieser Optionen in Ihrem Code zu experimentieren
Einfügen eines neuen Benutzerformulars
Sie können Ihre eigenen benutzerdefinierten Benutzerformulare entwerfen, indem Sie ein Benutzerformular in den Visual Basic-Editor (VBE) einfügen.
Sie tun dies, indem Sie Einfügen | . auswählen UserForm in der VBE-Menüleiste.
Klicken Sie auf „UserForm“ und ein neues leeres Formular wird angezeigt, in dem Sie entwickeln können
Das eigentliche Formular selbst (dargestellt als „UserForm1“) sieht recht klein aus, aber Sie können die Anfasser um es herum verwenden, um es zu vergrößern oder noch zu verkleinern, indem Sie die Anfasser mit dem Cursor ziehen.
In der unteren linken Ecke des Bildschirms befindet sich ein Eigenschaftenfenster. Da der Fokus direkt auf dem Formular selbst liegt, enthält dieses alle formularspezifischen Eigenschaften des Formulars.
Beachten Sie, dass beim Hinzufügen von Steuerelementen wie Kombinationsfeldern und Befehlsschaltflächen diese Steuerelemente alle ihre eigenen Eigenschaften haben und sich in Bezug auf die jeweiligen Möglichkeiten sehr unterscheiden können.
Die angezeigten Eigenschaften gelten derzeit nur für das Formular selbst.
Die Eigenschaft "Name" ist der Name, der verwendet wird, um Ihr Formularobjekt innerhalb des VBA-Codes zu definieren. Möglicherweise möchten Sie einen aussagekräftigeren Objektnamen verwenden, damit beim Überprüfen Ihres Codes offensichtlich ist, welches Formular verwendet wird.
Die Eigenschaft „Name“ wird auch im Fenster „Projekt-Explorer“ in der oberen linken Ecke des Bildschirms angezeigt
Sie möchten die Titelleiste Ihres Formulars in etwas anderes als "UserForm1" ändern, und Sie können dies tun, indem Sie Ihren neuen Text in der Eigenschaft "Caption" eingeben
Sie können eine Vielzahl von Änderungen daran vornehmen, wie Ihr Formular vom Benutzer angezeigt wird. Sie können Farben ändern, Bilder hinzufügen, z.B. B. eines Firmenlogos, Position ändern mit „Links“ und „Oben“, Größe ändern mit „Höhe“ und „Breite“, Mauszeiger ändern und vieles mehr
Alle diese Eigenschaften können auch programmgesteuert für jedes Steuerelement geändert werden, das Sie Ihrem Formular hinzugefügt haben. Ein Benutzer kann beispielsweise aus einem Listenfeldsteuerelement auswählen, und Sie möchten möglicherweise andere Steuerelemente basierend auf der Auswahl des Benutzers deaktivieren oder ausblenden
Verwenden der Toolbox
Sie werden feststellen, dass beim Klicken auf das Formular selbst ein Toolbox-Popup angezeigt wird. Wenn Sie irgendwo anders klicken, z.B. im Eigenschaftenbereich, wird es ausgeblendet, aber wieder angezeigt, wenn Sie auf das Formular klicken.
Die Toolbox bietet die eigentliche Mechanik des Formularentwurfs. Auf diese Weise können Sie Ihrem Formular die normalen Windows-Steuerelemente hinzufügen, mit denen Benutzer vertraut sind.
Sie werden feststellen, dass sich auf dem Formular ein Netz von Punkten befindet. Dies ist ein „Snapgrid“, sodass beim Hinzufügen eines Steuerelements zum Formular die Position automatisch an den Zeilen und Spalten der Punkte ausgerichtet wird. Dies hilft enorm bei der Ausrichtung Ihrer Steuerelemente, damit Sie kein zerlumptes Erscheinungsbild der Steuerelemente erhalten
Wenn Sie auf ein Steuerelement klicken und es dann nicht verwenden möchten, wird Ihr Cursor durch Klicken auf das „Pfeil“-Symbol in der oberen linken Ecke der Toolbox wieder normal.
Sie können der Toolbox zusätzliche Steuerelemente hinzufügen, indem Sie Extras | . verwenden Zusätzliche Steuerelemente im VBE-Menü. Es gibt eine beträchtliche Anzahl davon, aber abhängig von Ihren Windows- und Excel-Versionen funktionieren sie nicht immer, sodass oft einige Experimente erforderlich sind.
Außerdem haben Ihre Benutzer möglicherweise keinen Zugriff auf einige dieser zusätzlichen Steuerelemente oder führen ältere Versionen von Windows und Excel aus, was zu Problemen führen kann. In großen Unternehmen, insbesondere wenn sie global tätig sind, gibt es keinen Standard-PC, auf den Sie sich verlassen können!
Hinzufügen einer Exit-Schaltfläche zu Ihrem Formular
Eine Befehlsschaltfläche lässt sich einfach zum Formular hinzufügen. Dies sieht genauso aus wie Schaltflächen, die Sie in anderen Windows-Formularen sehen, normalerweise als Schaltfläche "OK" oder "Abbrechen".
Klicken Sie in der Toolbox auf das Symbol für die Befehlsschaltfläche. Dies ist das zweite Symbol von links in der unteren Reihe von Symbolen. Siehe das Bild oben. Darauf stehen die Buchstaben „ab“.
Sie können entweder die Maustaste gedrückt halten und das Steuerelement auf Ihr Formular ziehen, oder Sie können den Cursor auf das Formular bewegen, wo er sich in einen "Kreuz"-Cursor verwandelt und Sie Ihre Schaltfläche positionieren und in der Größe anpassen können
Wenn Sie das Steuerelement in das Formular ziehen, erhalten Sie die Standardgröße der Schaltfläche. Wenn Sie den Cursor 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 so aus:
Die Schaltfläche hat den Standardtext als Beschriftung, den Sie jedoch nach Ihren eigenen Anforderungen ändern möchten. Sie können auf den Text innerhalb der Schaltfläche („CommandButton1“) klicken und so die Beschriftung direkt bearbeiten.
Sie können es auch im Eigenschaftsfenster (linke untere Bildschirmecke) ändern. Sie sehen eine Eigenschaft namens "Caption" und können den Wert dafür bearbeiten. Ändern Sie dies in "Beenden"
Wie bei den Formulareigenschaften definiert die Eigenschaft „Name“ den Namen, der in Ihrem VBA-Code verwendet wird. Sie können in Ihrem Code einen aussagekräftigeren und offensichtlicheren Namen verwenden. Sie können dies in der Eigenschaft „Name“ eingeben.
Sie können die Schaltfläche neu positionieren, indem Sie sie auf dem Formular ziehen, und Sie können ihre Größe ändern, indem Sie auf die Schaltflächengriffe (weiße quadratische Felder) klicken und die Griffe ziehen, um sie zu vergrößern oder zu verkleinern
Sie können die Größe der Schaltfläche auch ändern, indem Sie die Werte für Höhe und Breite im Eigenschaftenfenster ä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
Sie können Ihr Formular aus VBA-Code innerhalb eines Moduls aufrufen, indem Sie die Methode "Anzeigen" verwenden
123 | Unter ShowForm()UserForm1.ShowEnd Sub |
Ihr Benutzerformular ist praktisch ein globales Objekt und kann von überall in Ihrem Code aufgerufen werden
Derzeit tut Ihre Befehlsschaltfläche nichts, da sich kein VBA-Code dahinter befindet. Das musst du selbst schreiben! Alles, was im Moment passieren kann, ist, dass Sie auf das „Schließen“ X in der oberen rechten Ecke Ihres Formulars klicken.
Um VBA-Code hinzuzufügen, doppelklicken Sie auf die Schaltfläche im Formular
Dies führt Sie zum normalen VBA-Codefenster und zeigt das Standardereignis des Klickens an.
Sie verwenden die Methode "Hide", um das Formular zu schließen, und Sie können auch jeden anderen Code hinzufügen, z. B. ein Meldungsfeld, um dem Benutzer zu bestätigen, was passiert ist.
Beachten Sie, dass das Codefenster oben zwei Dropdown-Menüs hat. Mit dem ersten können Sie Ihre Formularsteuerelemente auswählen, und mit dem zweiten werden alle Ereignisse angezeigt, die Ihnen zum Hinzufügen von Code zur Verfügung stehen. Das offensichtliche Ereignis für eine Schaltfläche ist das „Klick“-Ereignis, aber es gibt auch andere wie „Doppelklick“ oder „Mausbewegung“.
Wenn Sie Ihr Formular jetzt ausführen, bewirkt die Schaltfläche tatsächlich etwas. Das Formular verschwindet und ein Meldungsfeld wird angezeigt, das bestätigt, dass das Formular geschlossen ist
Sie können den Exit-Code natürlich vergrößern. Möglicherweise möchten Sie ein anderes Formular anzeigen oder Maßnahmen zu Parametern ergreifen, die der Benutzer in Ihr Formular eingegeben hat
Hinzufügen eines Label-Steuerelements zu einem Formular
Label-Steuerelemente dienen dazu, den Benutzer aufzufordern, welche Art von Daten er in ein Steuerelement im Formular eingeben muss, z. Textfeld, Dropdown usw. Ein Etikett hat standardmäßig keine Ränder, diese können jedoch bei Bedarf über das Eigenschaftenfenster hinzugefügt werden.
Als Steuerelement sind sie nur für den Benutzer lesbar und stellen lediglich eine Möglichkeit dar, Text in das Formular einzufügen, sei es eine fettgedruckte Überschrift oder eine Anweisung, was einzugeben oder auszuwählen ist.
Um ein Etikett hinzuzufügen, klicken Sie in der Toolbox (obere Reihe, zweite von links) auf das Symbol „A“ und doppelklicken Sie entweder darauf oder bewegen Sie den Cursor auf das Formular und wählen Sie Position und Größe aus.
Über die Eigenschaft „Beschriftung“ im Eigenschaftenfenster oder durch Klicken auf das Label-Control können Sie den Text für das Label-Control eingeben.
Beachten Sie, dass der Text entsprechend der Größe des Label-Steuerelements umbrochen wird. Wenn die Textzeichenfolge zu lang ist, wird sie nicht vollständig im Formular angezeigt. Achten Sie daher auf die Größe des Label-Steuerelements.
Über das Eigenschaftsfenster können Sie das Aussehen des Label-Controls ändern, mit verschiedenen Farben, Schriftarten, Hintergrundstilen z.B. wenn es ein Bild überlagert und es transparent sein soll
Für ein Label-Control 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 zum Formular
Ein Textsteuerelement wird verwendet, um dem Benutzer die Eingabe von Text zu ermöglichen, z. B. die Eingabe eines Namens oder von Kommentaren
Das Textsteuerelement wird aus der Toolbox hinzugefügt, indem Sie auf das Textsteuerelementsymbol (obere Reihe, dritte von links) klicken und das Steuerelement doppelklicken oder an die Position in Ihrem Formular ziehen.
Das Textsteuerelement wird oft mit dem Beschriftungssteuerelement verwechselt, aber das Textsteuerelement ist dasjenige für Benutzereingaben
Der Text „Geben Sie Ihren Namen ein“ ist ein Label-Steuerelement, wie zuvor beschrieben, und wir haben jetzt ein weißes Textfeld, in das der Benutzer etwas eingeben kann
Im Eigenschaftenfenster können Sie die Farben, Schriftarten, Spezialeffekte ändern oder Kennwortzeichen für Ihr Textfeld verwenden. Enorme Flexibilität ist vorhanden
Eine sehr wichtige Eigenschaft für ein Textfeld ist die Eigenschaft „MultiLine“. Wenn Sie möchten, dass der Benutzer viel Text in das Textsteuerelement eingibt, z. Kommentare, dann muss die Eigenschaft ‚MultiLine‘ auf True gesetzt werden.
Der Standardwert ist False, was bedeutet, dass der eingegebene Text unabhängig von der Größe Ihres Textfelds in einer durchgehenden Zeile bleibt und aus dem Textfeld herausscrollt. Es wird sich nicht in der Box herumwickeln.
Wenn Sie während der Ausführung mit der rechten Maustaste auf Ihr Textfeld klicken, wird kein Popup angezeigt, aber STRG+V funktioniert zum Einfügen und STRG+C funktioniert zum Ausschneiden, falls der Benutzer Text ausschneiden und in andere einfügen möchte Anwendungen
Auch hier müssen Sie Ihren eigenen Code schreiben, um mit dem vom Benutzer eingegebenen Text umzugehen. Möglicherweise möchten Sie ihn in eine Zelle in einem Arbeitsblatt übertragen
Sie können diesen Code in das Ereignis "Ändern" für das Textfeld einfügen
123 | Private Sub TextBox1_Change()Sheets("Sheet1").Range("A1").Value = TextBox1.ValueEnd Sub |
Möglicherweise möchten Sie auch einen Validierungscode eingeben, um zu überprüfen, ob der Benutzer keinen Müll eingibt, was katastrophale Auswirkungen auf Ihre Anwendung haben könnte
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 einer Textzeichenfolge beginnen und sofort feststellen, dass er Ihre Validierungsregeln verletzt hat, bevor er einen gültigen Text abgeschlossen hat.
Sie verwenden das Ereignis „Exit“. Dies wird ausgelöst, wenn der Benutzer den Fokus auf ein anderes Steuerelement im Formular verschiebt, was bedeutet, dass der Benutzer keine Daten mehr eingibt.
123456 | Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)Wenn IsNull(TextBox1.Value) oder Len(TextBox1.Value) < 4 ThenMsgBox "Name ist ungültig", vbCriticalTextBox1.SetFocusEnde WennEnd Sub |
Wenn der Benutzer auf ein anderes Steuerelement im Formular klickt, testet dieser Code entweder einen Nullwert im Textfeld oder weniger als 4 Zeichen. Wenn der Test wahr ist, wird ein Meldungsfeld 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 anstößige Textfeld verschoben, damit der Benutzer es korrigieren kann.
Beachten Sie, dass selbst wenn der Benutzer auf die Schaltfläche Beenden klickt, das Ereignis zum Beenden des Textfelds zuerst ausgeführt wird, sodass der Benutzer das Verlassen ohne Korrektur der Eingabe verhindert
Ereignisse in einem Formular initialisieren und aktivieren
Wenn VBA zum ersten Mal ein Formular erstellt und erstellt, löst es ein "Initialize"-Ereignis aus. Da das Formular jedoch auch an dieser Stelle angezeigt wird, löst es auch ein „Aktivieren“-Ereignis aus. Von da an wird jedes Mal, wenn das Formular mit der Methode „Anzeigen“ oder als Teil einer Formularhierarchie erscheint, das Ereignis „Aktivieren“ ausgelöst, jedoch nicht das Ereignis „Initialisieren“.
Das Ereignis "Initialize" tritt nur einmal auf, aber das Ereignis "Aktivieren" kann viele Male auftreten
In Ihrem Formular möchten Sie möglicherweise Standardwerte aus dem Arbeitsblatt in den Eingabesteuerelementen einrichten, z. Textfelder, sodass diese bei der ersten Verwendung des Formulars erscheinen, der Benutzer jedoch die Standardeinstellungen überschreiben kann und diese neuen Werte so lange bestehen bleiben, wie der Code ausgeführt wird
12345678 | Private Sub UserForm_Initialize()TextBox1.Value = Sheets("Sheet1").Range("A1").ValueWenn TextBox1.Value=““ ThenTextBox1.Visible=FalseAndersTextBox1.Visible=TrueEnde WennEnd Sub |
Sie finden das Ereignis „Initialize“ im zweiten Dropdown-Menü des Codefensters und den Namen des Benutzerformulars im ersten Dropdown-Menü.
Dieser Code verwendet den Wert in Zelle A1 auf "Sheet1" als Standardwert im Textfeld, das zuvor in diesem Artikel erstellt wurde. Wenn das Formular zum ersten Mal angezeigt wird, wird der Standardwert angezeigt. Der Benutzer kann dann den Standardwert überschreiben und dieser wird beibehalten. Wenn CellA1 leer ist, wird das Textfeld ausgeblendet, ansonsten ist es sichtbar
Der Standardwert könnte auch hartcodiert sein:
1 | TextBox1.Value = "John Smith" |
Sie können auch sicherstellen, dass die Werte, die der Benutzer eingegeben hat, wieder angezeigt werden, wenn der Benutzer dieses Formular in dieser bestimmten Excel-Sitzung startet. VBA-Code kann die Werte mithilfe des „Exit“-Ereignisses eines Steuerelements einfach in Zellen innerhalb der Arbeitsmappe zurückschreiben und sie mithilfe des „Activate“-Ereignisses im Formular wieder aktivieren
123 | Private Sub TextBox1_Exit(ByVal Cancel as MSForms.ReturnBoolean)Sheets("Sheet1").Range("A10").Value = TextBox1.ValueEnd Sub |
123 | Private Sub UserForm_Activate()TextBox1.Value = Sheets("Sheet1").Range("A10").ValueEnd Sub |
Dieser Code macht die Werte des Benutzers persistent und stellt auch sicher, dass sie mit dem Rest der Arbeitsmappe gespeichert werden
Speichern Ihrer Bewerbung und Formulare
Wenn Sie Ihre Excel-Arbeitsmappe mit Ihren Formularen speichern, werden auch alle Formulare und deren VBA-Code gespeichert. Alle Werte, die die Formulare enthalten, während sie angezeigt werden, gehen jedoch verloren.
Es ist wichtig, Code zu schreiben, damit beim Beenden der Arbeitsmappe oder des Formulars die Werte in die Zellen innerhalb der Arbeitsmappe zurückgeschrieben und somit beibehalten werden.
Modale und nicht-modale Formen
Das Formular selbst hat eine Eigenschaft ‚Show Modal‘. Dies ist standardmäßig auf True festgelegt, kann jedoch auf False geändert werden (nicht modal).
Wenn ein Formular modal ist, bedeutet dies, dass auf keine der Excel-Funktionen zugegriffen werden kann, während das Formular angezeigt wird. Dies schließt Ihren Code im VBE-Fenster ein. Sie können den Code anzeigen, aber Cursor und Tastatur sind deaktiviert.
In einem nicht-modalen Formular können Sie während der Formularanzeige auf alle Excel-Funktionen einschließlich des VBE-Fensters zugreifen.
Dies ist aus Sicht der Steuerung des Nutzerverhaltens wichtig
Schließen eines Formulars
So gut Sie Ihren Code auch schreiben, um den Benutzer zu einer bestimmten Route zu zwingen, er kann ihn leicht umgehen, indem er auf das „Schließen“ X in der oberen rechten Ecke des Formulars klickt
Sie können dies verhindern, indem Sie das Ereignis "QueryClose" des Formulars ändern
1234 | Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)Abbrechen = WahrMsgBox "Diese Aktion ist deaktiviert"End Sub |
Das Ereignis „QueryClose“ wird ausgelöst, wenn der Benutzer auf das X „Schließen“ des Formulars klickt. Dieser Code bricht die Aktion ab, sodass der Benutzer gezwungen ist, Ihre Schaltfläche "Beenden" und den Code, den Sie dahinter haben, zu verwenden.
Aktivieren und Deaktivieren von Steuerelementen
Alle Steuerelemente in Ihrem Formular verfügen über eine Eigenschaft namens "Enabled", die auf True oder False festgelegt ist. Wenn es False ist, ist das Steuerelement ausgegraut. Es ist zu sehen, aber nicht zu verwenden.
Es gibt auch eine Eigenschaft namens "Visible", die wiederum auf True oder False gesetzt ist.
Sie können Code schreiben, um ein bestimmtes Steuerelement entweder unbrauchbar zu machen oder es für den Benutzer völlig unsichtbar zu machen. Mit einer „Wenn“-Anweisung können Sie die Umstände auswählen, unter denen Sie dies tun müssen
Sie können beispielsweise die Schaltfläche „Beenden“ zunächst deaktivieren, bis der Benutzer einen Wert in die TextBox1 (Name) eingegeben hat.
123 | Private Sub UserForm_Initialize()CommandButton1.Enabled = FalseEnd Sub |
1234567 | Private Sub TextBox1_Change()Wenn Len(TextBox1.Value) > 0 ThenCommandButton1.Enabled = TrueAndersCommandButton1.Enabled = FalseEnde WennEnd Sub |
Dieser Code verwendet das Ereignis 'Initialize' des Formulars, um die Schaltfläche zum Beenden (Befehlsschaltfläche 1) zu deaktivieren, wenn das Formular zum ersten Mal angezeigt wird, und verwendet dann das Ereignis 'Ändern' auf TextBox1 (Name), um die Schaltfläche zum Beenden zu aktivieren, wenn etwas eingegeben oder deaktiviert wurde es, wenn das Feld leer ist.
Das Ereignis „Ändern“ wird jedes Mal ausgelöst, wenn ein neues Zeichen eingegeben oder aus dem Textfeld gelöscht wird. Wenn der Benutzer versucht, Text einzugeben, um die Schaltfläche zu aktivieren, und dann den gesamten Text löscht, wird die Schaltfläche sofort deaktiviert