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 |
|
|
|
|
|
|
|