Tutorial: Eingabemaske für Excel-Tabelle (Anfänger)
Einleitung
Ich wurde schon sehr oft auf das Thema: "Ich würde gerne eine Eingabemaske für meine Tabelle haben" angesprochen.
Daher habe ich mir die Zeit genommen und Ihnen ein kleines Tutorial geschrieben, welches von A-Z die Erstellung
einer wirklich einfachen Eingabemaske beschreibt. Ich habe mich für eine kleine Adressliste entschieden.
Dieses Tutorial ist eine Schritt-für-Schritt Anleitung, die Sie selbst nachbauen können.
Später können Sie dieses Beispiel immer weiter ausbauen und ergänzen. In diesem Tutorial wird lediglich
ein leichtes und stark vereinfachtes Beispiel verwendet und die ersten Schritte für Einsteiger und Anfänger erläutert.
Daher ersetzt dieses Tutorial keine fundierte Schulung oder ein Seminar, sondern bietet lediglich den Service,
um die ersten Schritte mit VBA und einer Eingabemaske auszuprobieren.
Für Fortgeschrittene ist dieses Tutorial nicht geeignet!
Hinweis: Für dieses Tutorial wurde Microsoft Office Professional Version 2013 verwendet.
Als Betriebssystem wurde Windows 7 verwendet. Wenn Sie eine andere Version verwenden, kann
es Unterschiede im Erscheinungsbild geben! Verwenden Sie Microsoft Office für Mac? Hier gibt es einige weitere Unterschiede, welche ich in diesem Tutorial aber nicht weiter ansprechen möchte.
Ich habe für alle das unten folgende Beispiel als fertige Datei zum Download bereitgestellt. Sie finden den Download-Link am Ende dieses Tutorials.
Neue Version des Tutorials
Bitte beachten Sie auch die bereits verfügbare
Version 2 des Tutorials, wo noch etwas mehr auf einen alternativen Quelltext eingegangen wird!
Die Ausgangslage und Zielsetzung
Unser Ziel ist eine Adressliste, die wir mit einer Eingabemaske versehen möchten. Die Eingabemaske soll
folgende Funktionen besitzen:
- Beim Öffnen der Eingabemaske sollen alle vorhandenen Namen in einer Liste auf der Eingabemaske angezeigt werden.
- Beim Klick auf einen Namen in dieser Liste sollen die Informationen der Adressliste auf der Eingabemaske in sogenannten Textboxen angezeigt werden.
- Änderungen sollen mit einem Speichern-Knopf in die Excel Tabelle eingetragen werden.
- Neue Einträge sollen mit einer Schaltfläche "Adresse hinzufügen" angelegt werden können.
- Existierende Einträge sollen mit einer "Löschen" Schaltfläche entfernt werden können.
Schauen wir uns die Ausgangslage an. Ich habe eine kleine Beispieltabelle erzeugt. Es ist wirklich ein sehr simples Beispiel. Wenn Sie dieses Beispiel nachbauen möchten, öffnen Sie nun Ihr Microsoft Excel und öffnen Sie eine neue und leere Arbeitsmappe.
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | Name (ID) | Telefon | Adresse | PLZ | Ort | ||
2 | Marc | 12345 | info@wershovenonline.de | Musterstrasse 16 | 12345 | Musterhausen | |
3 | Anika | 54321 | keine vorhanden | Beispielweg 2 | 54321 | Musterort | |
4 | Max Mustermann | 33445 | max@mustermann.de | Muster-Haupt-Str. 3 | 22334 | Mustermetropole | |
5 | |||||||
6 |
Wichtige Annahme für dieses Beispiel: Wir gehen davon aus, das es jeden Namen, den wir eingeben, nur EINMAL gibt! Wenn in Ihrer zukünftigen Tabelle beispielsweise eine eindeutige Rechnungsnummer oder eine laufende Nummer existiert, können Sie diese verwenden, um Ihre Datensätze in der späteren Programmierung auffinden zu können. Deshalb steht in der Überschrift auch "Name (ID)", um zu kennzeichnen, dass diese Spalte das Erkennungszeichen eines Datensatzes beinhaltet.
Die Eingabemaske erstellen
Nachdem wir unsere Datengrundlage eingegeben haben, erstellen wir uns nun eine Eingabemaske. Zuerst entwerfen wir das Layout unserer Oberfläche,
die auch als UserForm bezeichnet wird. Dazu drücken Sie in Excel die Tastenkombination ALT und F11.
Jetzt wird die integrierte Entwicklungsumgebung geöffnet.
Auf der linken Seite sehen Sie nun ein Fenster mit dem Titel "Projekt-Explorer". In diesem sehen Sie alle
geöffneten Arbeitsmappen und Add-Ins. Klappen Sie Ihre Datei mit Hilfe des + Zeichens in einem Kästchen auf, sofern diese nicht schon aufgeklappt ist.
Sollten Sie den Projekt-Explorer und das Eigenschaftenfenster nicht sehen, können Sie sich über das Menü "Ansicht" diese einblenden.

Klicken Sie nun mit der rechten Maustaste auf Ihre Datei und wählen Sie dort Einfügen -> UserForm.


Der nächste Schritt ist die eigentliche Erstellung unserer Benutzeroberfläche, welche ähnlich zu den Auto-Formen in den Microsoft Office Produkten abläuft. Wir benötigen dazu die sogenannte Werkzeugsammlung (auch Toolsammlung genannt), welche Sie sich bitte, wenn noch nicht automatisch geschehen, über das Menü "Ansicht" der Entwicklungsumgebung einblenden.
Klicken Sie in der Werkzeugsammlung auf das entsprechende Objekt-Icon, welches Sie auf die UserForm einfügen wollen, und fügen Sie dieses wie bei den Auto-Formen auf die graue Fläche unserer UserForm1 ein. Und zwar genau so, als wollten Sie einen Rahmen zeichnen. Wenn Sie nicht wissen, welches Icon wofür ist, gehen Sie mit der Maus über das Icon und warten Sie, bis der ToolTippText angezeigt wird.
Wir benötigen auf unserer UserForm1 folgendes:
- 1x ListBox (Name: ListBox1)
- 6x TextBox (Namen: TextBox1 bis TextBox6)
- 1x CommandButton (Name: CommandButton_1 - Caption: Neuer Eintrag)
- 1x CommandButton (Name: CommandButton_2 - Caption: Löschen)
- 1x CommandButton (Name: CommandButton_3 - Caption: Speichern)
- 1x CommandButton (Name: CommandButton_4 - Caption: Beenden)
- 7x Label (Um die Oberfläche zu beschriften!)
Das Ergebnis könnte ungefähr so aussehen:

Damit haben wir unsere Oberfläche fertiggestellt. Es folgt die eigentliche Programmierung.
Die Funktionalitäten der Eingabemaske erstellen
Um unserer Benutzeroberfläche "das Leben einzuhauchen" Doppel-Klicken Sie bitte auf
die "Beenden"-Schaltfläche, unserem CommandButton_4 auf unserer UserForm1. Der Quellcode Editor wird geöffnet und
Sie sehen schon etwas Quelltext. Löschen Sie diesen und fügen Sie den folgenden Quelltext
vollständig ein.
Und das war es dann auch schon! Wie die Programmierung funktioniert, habe ich
Ihnen in grüner Schrift in den Quelltext geschrieben.
Der Quelltext
Option Explicit
Option Compare Text
' Original-Quelltext unter: https://www.online-vba.de/vba-tutorial-eingabemaske-fuer-excel-tabelle
' Express-Hilfe für VBA unter https://www.online-vba.de/vba-expresshilfe
' Es gelten die Nutzungsbedingungen von Online-VBA.de
'Neuer Eintrag Schaltfläche Ereignisroutine
Private Sub CommandButton1_Click()
Dim lZeile As Long
'Wenn der Benutzer einen neuen Eintrag erzeugen möchte,
'erstellen wir einen neuen Eintrag in der ListBox und markieren
'diesen, damit der Benutzer die Daten eintragen kann
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die überschriften
'Schleife, solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
'Nach Durchlauf dieser Schleife steht lZeile in der ersten leeren Zeile von Tabelle1
'Neuen Eintrag in die Tabelle1 schreiben, Spalte ID muss gefüllt sein, damit
'unsere Routinen die Zeile wiederfinden!
Tabelle1.Cells(lZeile, 1) = CStr("Neuer Eintrag Zeile " & lZeile)
'Und neuen Eintrag in die UserForm eintragen
ListBox1.AddItem CStr("Neuer Eintrag Zeile " & lZeile)
'Den neuen Eintrag markieren mit Hilfe des ListIndexes
ListBox1.ListIndex = ListBox1.ListCount - 1
'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen
End Sub
'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If ListBox1.ListIndex = -1 Then Exit Sub
'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
'Eintrag gefunden, die ganze Zeile wird nun gelöscht
Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
'Die ListBox muss nun neu geladen werden!
Call UserForm_Initialize
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
End Sub
'Speichern Schaltfläche Ereignisroutine
Private Sub CommandButton3_Click()
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If ListBox1.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die ID Spalte auch gefüllt ist!!
If Trim(CStr(TextBox1.Text)) = "" Then
'Meldung ausgeben
MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
'Ausbauoption: Prüfen, ob die ID in Tabelle1 Spalte 1 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife, solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle1.Cells(lZeile, 1).Value = Trim(CStr(TextBox1.Text))
Tabelle1.Cells(lZeile, 2).Value = TextBox2.Text
Tabelle1.Cells(lZeile, 3).Value = TextBox3.Text
Tabelle1.Cells(lZeile, 4).Value = TextBox4.Text
Tabelle1.Cells(lZeile, 5).Value = TextBox5.Text
Tabelle1.Cells(lZeile, 6).Value = TextBox6.Text
'Die ListBox muss nun neu geladen werden
'allerdings nur, wenn sich der Name (ID) geändert hat
If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
Call UserForm_Initialize
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
End If
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
span class="codebluebold">Loop
End Sub
'Beenden Schaltfläche Ereignisroutine
Private Sub CommandButton4_Click()
Unload Me
End Sub
'Klick auf die ListBox Ereignisroutine
Private Sub ListBox1_Click()
Dim lZeile As Long
'Wenn der Benutzer einen Namen anklickt, suchen wir
'diesen in der Tabelle1 heraus und tragen die Daten
'in die TextBoxen ein.
'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
'Nur wenn ein Eintrag selektiert/markiert ist
If ListBox1.ListIndex >= 0 Then
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife, solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
'Wenn wir den Namen aus der ListBox1 in der Tabelle1 Spalte 1
'gefunden haben, übertragen wir die anderen Spalteninhalte
'in die TextBoxen!
If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
'TextBoxen füllen
TextBox1 = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
TextBox2 = Tabelle1.Cells(lZeile, 2).Value
TextBox3 = Tabelle1.Cells(lZeile, 3).Value
TextBox4 = Tabelle1.Cells(lZeile, 4).Value
TextBox5 = Tabelle1.Cells(lZeile, 5).Value
TextBox6 = Tabelle1.Cells(lZeile, 6).Value
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
End If
End Sub
Private Sub UserForm_Activate()
'Wenn die Eingabemaske angezeigt wird, markieren wir den ersten Namen
'jedoch nur, wenn auch Einträge in der Liste stehen
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
End Sub
'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
Private Sub UserForm_Initialize()
Dim lZeile As Long
'Alle TextBoxen leer machen
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
'In dieser Routine laden wir alle vorhandenen
'Einträge in die ListBox1
ListBox1.Clear 'Zuerst einmal die Liste leeren
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife, solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
'Aktuelle Zeile in die ListBox eintragen
ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
End Sub
So einfach läuft unsere VBA-Expresshilfe ab
Eine Schaltfläche erstellen, welche die Eingabemaske öffnet
Jetzt müssen wir nur noch eine Schaltfläche in unsere Excel Tabelle einfügen, damit wir die
Benutzeroberfläche auch jederzeit starten können! Sie können die Entwicklungsumgebung
nun vollständig schließen und zurück zu unserer Excel Tabelle1 wechseln.
(Entweder über das X am oberen rechten Fensterrand oder über das Menü der Entwicklungsumgebung.)
Jetzt benötigen wir den Excel Reiter "Entwicklertools". Sollte dieser bei Ihnen nicht eingeblendet sein,
gehen Sie bitte in Ihre Excel Optionen unter Menüband und aktivieren Sie die Anzeige der Entwicklertools.



Jetzt testen wir!
Nun ist es soweit! Wir probieren das Ganze aus.
Klicken Sie auf unsere Schaltfläche, um die Eingabemaske zu öffnen, und probieren Sie alles in Ruhe aus.


Schlusswort
Ich hoffe, ich konnte Ihnen an diesem einfachen Beispiel die ersten Schritte
zur eigenen Eingabemaske etwas erleichtern. Selbstverständlich gibt es noch viele weitere Möglichkeiten,
Erweiterungen und Verschönerungen, die man einbauen kann. Wie sagt man so
schön: "Man kann immer mehr dazu bauen und hübscher geht auch immer!". Diese Aufgabe
überlasse ich allerdings Ihnen selbst!
Ich wünsche Ihnen Viel Erfolg und Spass bei Ihrer ersten eigenen Eingabemaske!
Download der Beispieldatei
Zu guter Letzt habe ich Ihnen die in diesem Tutorial als Beispiel verwendete Datei als Download bereitgestellt.
Den Link dazu finden Sie hier:
DOWNLOAD
Anmerkungen und Hinweise
Dieser Codeschnipsel wurde geschrieben von Marc Wershoven im Jahr 2013.
Die Nutzung erfolgt auf eigene Gefahr.
Bitte denken Sie immer zuerst an eine ausreichende Datensicherung.
Wir können keinen kostenlosen Support anbieten.
Es gelten unsere Nutzungsbedingungen.
Wichtiger Hinweis für Downloads: Als kostenlosen Service stellen die Autoren von Online-VBA.de Dateien zum Download bereit. Dieser Download erfolgt stets auf eigene Gefahr. Bitte beachten Sie die Nutzungsbedingungen, bevor Sie die Datei herunterladen. Einen kostenlosen Support oder Service für die hier veröffentlichen Werke kann leider nicht angeboten werden!