Anleitung zum Erstellen einer UserForm

UserFormen dienen u. a. zum Eingeben von Daten in einer auf meine Bedürfnisse angelegte Datenmaske. Sie kann Textfelder (TextBoxen) für die Eingabe von Daten oder Labelfelder für die Bezeichnung oder zur Anzeige von Werten beinhalten. Aber auch Auswahlfelder oder Grafiken lassen sich in eine UserForm implementieren. .


 

Diese Anleitung wird anhand eines Beispieles durchgeführt. Begleitend dazu kann eine Exceldatei herunter geladen werden, in der die UserForm mit den entsprechenden VBA Code schon eingearbeitet wurde.

 


 

Abb.1

 

Abb.1a

 

1. Zunächst einmal muss eine Exceldatei mit für dieses Beispiel 2 Tabellenblättern angelegt werden. Dem einen Blatt vergeben wir den Namen "Kostenauflistung" und dem Zweiten den Namen "Hilfstabelle". Im Blatt "Hilfstabelle" sollte in Zelle A1 die Überschrift "Kontoart" eingetragen und nachfolgend die Begriffe wie in Abb. 1 zu sehen. In Blatt "Kostenauflistung" schreiben Sie in Zelle A1 "Datum", in Zelle B1 "Betrag" und in Zelle C1 "Konto". In dieses Blatt sollen nachher die Daten, die in der UserForm eingegeben, bzw. ausgewählt werden, übertragen werden.

Nun muss aber erst einmal eine UserForm erstellt werden. Dazu klicken Sie in Ihrer Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor oder drücken Sie die Tastenkombination Alt F11.



Abb. 2

Abb. 2a
 

Abb. 2b

 

2. Es öffnet sich der VBA Editor, in dem nun die UserForm erstellt werden muss. Dazu muss auf der linken Seite der Eintrag VBA-Projekt(Name Ihre Datei) gesucht werden und mit der rechten Maustaste markiert werden (siehe Abb. 2). In dem dann öffnenden Menü wählt man den Eintrag "Einfügen => UserForm" aus.

Nach der Auswahl wird sofort in dem linken, noch leeren Fensterbereich, eine UserForm in einer Standardgröße erstellt (siehe Abb. 2a). Zusätzlich dazu wird die Werkzeugsammlung eingeblendet (siehe Abb. 2b). Sollte diese nicht mit eingeblendet werden so muss sie manuell über die Menüleisteneinträge "Anzeige => Werkzeugsammlung" eingeblendet werden. Denn ohne die Werkzeugsammlung wird man keine weiteren Anpassungen an Ihrer neuen UserForm durchführen können.


Abb.3

 

Abb.3a

 

Abb.3b


3
. Wir wollen nun in der UserForm 2 TextBoxen (Abb.3, rote Umrandung), mehrere Labelfelder (Abb.3, blaue Umrandung), ein Auswahlfeld (ComboBox) (Abb.3, grüne Umrandung) und 2 Buttons (Abb.3, gelbe Umrandung) einbinden. Über diese Objekte soll dann nachher die Eingabe, bzw. Auswahl und das Übertragen der eingegebenen Daten an die entsprechenden Bereiche in dem Tabellenblatt erfolgen.

Also, in der Werkzeugleiste wählen Sie nun bitte erst mal eine TextBox (Abb.3a, rote Umrandung) aus und klicken danach in einen freien Bereich der UserForm. Es wird eine TextBox in einer Standardgröße erstellt. Diese TextBox kann nun noch in Ihrer Länge und Höhe angepasst werden. Dazu einfach an den dafür vorgesehenen Stellen an der TextBox auf die richtige Größe ziehen. Nun verabreichen wir der Textbox noch ein Beschriftungsfeld, ein so genanntes Label, damit man weiß, was man in das Textfeld eingeben soll. Dazu das Symbol für ein Label (Abb.3a, blaue Umrandung) anklicken und ebenfalls an einer freien Stelle in der UserForm einfügen. Nun sollten wird den Text "Label1" in das Wort "Datum", da nachher in die TextBox ein Datum eingegeben werden soll, ändern. Um dieses Wort zu ändern gibt es zwei Wege.

Der 1. Weg, markieren sie das Labelobjekt, sofern es nicht noch markiert ist, und klicken danach noch einmal in das markierte Label. Bitte keinen Doppelklick durchführen. Durch einen Doppelklick gelangt man sofort zu der Ebene, in der man ein Ereignis für das Labelfeld in Form eines VBA Codes hinterlegen kann. Aber darauf will ich erst später eingehen.

Der 2. Weg führt über das Eigenschaftsfenster (Abb. 3c). Hier kann man die in der Form positionierten Objekte mit den Eigenschaften angepasst werden. So eben auch der Text, der in dem Label1 angezeigt werden soll. Dazu in dem Eigenschaftsfenster den Eintrag "Caption" suchen und in dem Feld rechts daneben den vorhandenen Text "Label1" löschen und durch den Text "Datum:" ersetzen.
In den Eigenschaften hat man auch die Möglichkeit z. B. die Position über die Einträge "Left" und "Top" oder die Größe über "Height" und Width" anzugeben. Auch die Schriftart/ -größe kann über den Eintrag "Font" oder die Schriftfarbe über die Eigenschaft "ForeColor geändert werden.
Spielen Sie einfach mal etwas an den Eigenschaften herum um zu sehen, was sich an dem Objekt ändert. Auch ein Blick in die Hilfe wird einige Fragen zu den einzelnen Eigenschaftsoptionen beantworten.

Nun aber weiter beim Gestallten der UserForm. Nachdem nun ein Label- und eine TextBox eingebunden wurden wiederholen Sie das ganze noch ein 2. Mal und positionieren das Label- und Textobjekt unter den davor angelegten Objekten. Ändern sie auch hier den Text "Label2" in den Text "Betrag:".

Nun erstellen Sie eine ComboBox. Versuchen Sie es zunächst mal alleine. Die Tooltiptexte, die angezeigt werden wenn man ein Objekt mit der Maus berührt und den Mauszeiger dann auf dem Objekt verweilen lässt, sollte Ihnen dabei behilflich sein. Wer keine Eigeninitiative zeigen möchte, sucht das Objekt, welches in der Abb. 3a mit der grünen Umrandung versehen ist und fügt es in die Form ein. Vor die ComboBox fügen Sie bitte erneut ein Labelfeld ein und ändern den Text in "Konto:"

Abschließend für die Gestaltung werden nun zwei CommandButton (Abb.3a, gelbe Umrandung) wie in Abb.1 zu sehen eingefügt. Den Schaltflächentext ändern wir einmal in "Daten übernehmen" und "Abbruch".

So, das ist sie nun, unsere UserForm, in der man am Ende dieser Anleitung in das erste Textfeld ein Datum, in das zweite Textfeld ein Betrag und in der ComboBox ein Kontoname eingeben, bzw. ausgewählt werden muss. Wieman dem ganzen nun ein wenig Leben einhaucht, folgt in Schritt 4.
 



Abb.4


Option Explicit

Private Sub CommandButton1_Click()
'Variable deklarieren
Dim erste_freie_Zeile As Integer
'erste freie Zeile in Blatt "Kostenauflistung" ermitteln
'und in Variable "erste_freie_Zeile" schreiben
erste_freie_Zeile = Sheets("Kostenauflistung").Range("A65536").End(xlUp).Offset(1, 0).Row
'In Blatt "Kostenauflistung"
'With Sheets("Kostenauflistung")
'Spalte A, erste freie Zeile das Datum im Datumsformat übertragen
Sheets("Kostenauflistung").Cells(erste_freie_Zeile, 1) = CDate(TextBox1.Text)
'Spalte B, erste freie Zeile den Betrag im Währungsformat übertragen
Sheets("Kostenauflistung").Cells(erste_freie_Zeile, 2) = Format(TextBox2.Text, "#,##0.00 €")
'Spalte C, erste freie Zeile das ausgewählte Konto übertragen
Sheets("Kostenauflistung").Cells(erste_freie_Zeile, 3) = ComboBox1.Text
'End With
Unload Me
End Sub

Private Sub CommandButton2_Click()
'UserForm schließen
Unload Me
End Sub

Private Sub UserForm_Initialize()
'Variable deklarieren
Dim Wiederholungen As Integer
'Schleife zum Füllen der ComboBox mit den Daten aus Blatt "Hilfstabelle"
'Spalte A ab Zeile 2 bis zur letzten gefüllten Zeile
For Wiederholungen = 2 To Sheets("Hilfstabelle").Range("A65536").End(xlUp).Row
ComboBox1.AddItem Sheets("Hilfstabelle").Cells(Wiederholungen, 1)
Next
End Sub
 

 

4. Nun erstellen wir den VBA Code, die zum Einen die ComboBox beim Öffnen der UserForm mit Daten füllt, die Daten beim Betätigen des Buttons mit dem Schaltflächentext "Daten übernehmen" an die entsprechenden Bereiche in das Tabellenblatt überträgt und beim Betätigen der 2. Schaltfläche die UserForm ohne Daten zu übernehmen wieder schließt.

Los geht's!
 Klicken Sie einfach mal doppelt in die UserForm. Es sollte die userForm verschwinden und ein komplett, bzw. fast komplett leeres weißes Fenster sollte sich öffnen. Ist das nicht der Fall, war Ihr Doppelklick nicht richtig. Um zu diesem weißen Fenster zu gelangen kann man auch mit der rechten Maustaste in die UserForm klicken und dann in dem Menü den Punkt "Code anzeigen" auswählen.

Löschen Sie bitte alle Einträge, in diesem neu geöffneten Fenster. Kopieren Sie nun den Code aus Abb.4 durch markieren des Textes aus Abb.4 und und dann Betätigen der Tastenkombination Strg & C. Wechseln Sie wieder in die VBA Umgebung und klicken Sie danach in das leere Feld. Mit der Tastenkombination Strg & V fügen Sie den Code wieder ein.

 

Mit dem CommandButton_Click-Ereignis werden die Daten aus TextBox1 und 2 sowie der Eintrag aus ComboBox1 in das Blatt "Kostenauflistung" in die erste freie Zeile übertragen.

Durch das CommandButton_Click-Ereignis wird die UserForm ohne irgend welche Aktionen wieder geschlossen.

Das UserForm_Initialize-Ereignis füllt die ComboBox1 beim Öffnen der Form über eine For/Next-Schleife mit Daten aus Blatt "Hilfstabelle" Spalte A und dort ab Zeile 2 bis zur letzten belegten Zeile.
Man könnte die UserForm auch alternativ über einen Eintrag in den Eigenschaften der ComboBox mit Daten füllen. Dazu müsste in den Eigenschaften "RowSource" der Blattname und der Bereich, dessen Daten in die Box eingefügt werden sollen, eingetragen werden. In diesem Beispiel müsste der Eintrag "Hilfstabelle!A2:A7" lauten.

Der Nachteil an dieser Methode ist jedoch, wird in Blatt "Hilfstabelle" jemals eine Kontoart hinzugefügt, müsste das manuell in den Eigenschaften angepasst werden, damit auch diese Kontoart in der ComboBox aufgeführt würde. Regelt man das Füllen durch einen VBA Code, wie auch in dem Beispiel, werden immer die Daten ab einer angegebenen Zeile, im Beispiel Zeile 2, bis zur letzten belegten Zeile in das Auswahlfeld eingefügt.

Mit dem Einfügen und gegebenenfalls abändern des Codes sind wir mit der UserForm-Gestaltung fertig.



Abb.5


Option Explicit

Private Sub CommandButton1_Click()
'UserForm öffnen
UserForm1.Show
End Sub

 

 

Abb.5a

 

5. Damit wir nun auch Daten in die Form eingeben können muss diese eingeblendet werden. Das macht man am besten über eine Befehlsschaltfläche. Wie man diese einfügt, habe ich bereits in der Anleitung "Anleitung zum Einfügen einer Befehlsschaltfläche" erklärt, auf die ich an dieser Stelle verweisen möchte. Als VBA Code wird lediglich der Code aus Abb.5 der Schaltfläche hinterlegt. Über die Show-Methode wird die UserForm eingeblendet und steht zur "Datenaufnahme" (Abb.5a) bereit.

 

Damit sind wir fertig und Sie haben sich eine UserForm erstellt, mit der Sie Daten eintragen und an ein Tabellenblatt übergeben können. Dieses Beispiel zeigt nur den kleinsten Teil, was man mit einer Form alles durchführen kann. Die Anleitung sollte auch nur einen kleinen Eindruck aufzeigen, damit man weiß, wie man eine UserForm in seine Datei einbinden kann.


Sie sollten zum Abschluss noch die Sicherheitseinstellung, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicken Sie dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehen Sie, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schauen Sie dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktivieren Sie diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Ihrer Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicken Sie auf aktivieren und der Code wird ausgeführt

 
  A B C D E
1        
2   Diese Anleitung wurde bereits  x aufgerufen.  
3    
4          

 

Kontakt:

letzte Aktualisierung am 06.12.2004

© 2004 - Copyright Oliver Scheckelhoff,
All Rights Reserved