Anzeige

VBA
Programmierer
gesucht?
 
Anzeige
VBA Programmierer gesucht?
 

VBA Tutorials

Eine ganz einfache Eingabemaske für eine Excel® Tabelle erstellen - für Anfänger geeignet!

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.

Achtung: Es gibt bereits eine Version 2 des Tutorials, wo noch etwas mehr auf einen alternativen Quelltext eingegangen wird!

Ich habe für alle das unten folgende Beispiel als fertige Datei zum Download bereitgestellt. Sie finden den Download-Link am Ende dieses Tutorials.

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 Speicher-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
In diesem Tutorial geht es lediglich um Grundlagenwissen. Komplizierte Eingabeprüfungen und Fehlerbehandlungsroutinen werde ich nicht ansprechen. Diese Themen sind jedoch weitere Ausbaumöglichkeiten, wären aber in einem ersten Schritt für Anfänger zu viel auf einmal.

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 H I
 1  Name (ID) Telefon E-Mail 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 Rechnungssnummer 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.

Abbildung 1 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Jetzt sehen Sie alle Tabellen, Formulare und Module Ihrer Datei.
Klicken Sie nun mit der rechten Maustaste auf Ihre Datei und wählen Sie dort Einfügen -> UserForm.
Abbildung 2 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Es wird eine neue "UserForm1" erstellt und im Projekt-Explorer eingefügt. Doppel-Klicken Sie mit der Maus auf die neu erstellte "UserForm1". Es wird das folgende Fenster geöffnet, sofern dies nicht schon automatisch durch die Entwicklungsumgebung getan wurde:
Abbildung 3 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Im Eigenschaftenfenster sehen Sie den Namen der Eingabemaske: "UserForm1". Bitte ändern Sie diesen für dieses Beispiel erstmal nicht. In Ihren zukünftigen Projekten können Sie selbstverständlich eigene Namen verwenden, dann müssen Sie aber in der Programmierung an den entsprechenden Stellen den korrekten UserForm Namen verwenden. In unserem Beispiel verwenden wir daher die Standardnamen um es nicht weiter zu verkomplizieren. Die Größe der UserForm können Sie frei verändern. Ziehen Sie die UserForm mit der Maus an einer der Randmarkierungen einfach größer oder kleiner. Ganz nach Ihrem Wunsch.

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:
Abbildung 4 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Hinweis zur Gestaltung: Wenn Sie ein Objekt, wie die TextBox oder den CommandButton, auf der UserForm1 anklicken, sehen Sie im Eigenschaftenfenster (dieses können Sie sich im Menü "Ansicht" zur Not einblenden lassen) ganz viele Einstellungsmöglichkeiten. Die Wichtigste für uns ist der "(Name)". Dieser muss wie oben in der Liste angegeben benannt sein (bspw. ListBox1, TextBox1, usw.), da sonst unsere Programmierung nicht funktionieren würde. Um einen Label-Text zu ändern oder die Schrift der Command_Buttons, können Sie die Eigenschaft Caption verwenden (im Eigenschaftenfenster) oder mit der Maus das Label markieren und mit einem erneuten Klick in den Editiermodus wechseln, dann sehen Sie den Cursor im Text blinken und können diesen nun verändern.

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.

Option Explicit
Option Compare Text
' ************************************************************************************************
' Autor/en: http://www.online-vba.de - Marc Wershoven
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von www.online-vba.de!
' Original-Quelltext: www.online-vba.de/vba_tutorialuserform.php
' ************************************************************************************************


'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 überschriftrn
     '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
     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


Das war es schon! Wie die Programmierung funktioniert, habe ich Ihnen in grüner Schrift in den Quelltext geschrieben.

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.

Abbildung 5 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Klicken Sie nun wie im folgenden Screenshot gezeigt auf "Einfügen"... "Schaltfläche" und platzieren Sie eine neue Schaltfläche auf Ihrem Tabellenblatt Tabelle1.
Abbildung 6 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Nachdem Sie die Schaltfläche eingefügt haben, öffnet sich automatisch ein weiteres Fenster. Klicken Sie dort auf "Neu". Die Entwicklungsumgebung öffnet sich und es steht etwas Quelltext im Code-Fenster. Schreiben Sie UserForm1.Show zwischen die beiden existierenden Zeilen, wie im folgenden Screenshot zu sehen.
Abbildung 7 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Schließen Sie die Entwicklungsumgebung und kehren Sie zur Excel® Tabelle1 zurück. Wir sind fertig!

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.

Abbildung 8 - Einfaches Tutorial zur Erstellung einer Eingabemaske

Abbildung 9 - Einfaches Tutorial zur Erstellung einer Eingabemaske

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.

Achtung: Es gibt bereits eine Version 2 des Tutorials, wo noch etwas mehr auf einen alternativen Quelltext eingegangen wird!

Den Link dazu finden Sie hier: Beispieldatei-Download
(Dateiformat: *.xlsm - Erstellt mit Microsoft® Excel® Version 2013 - Diese Datei ist kompatibel mit Microsoft® Excel® Version 2007 oder neuer - Dateigröße: ca. 31 KiloBytes)
Wichtiger Hinweis: Als kostenlosen Service stellen die Autoren von www.Online-VBA.de Dateien zum Download bereit. Dieser Download erfolgt stets auf eigene Gefahr. Bitte beachten Sie die Nutzungsbedingungen und das Impressum von www.Online-VBA.de, bevor Sie die Datei herunterladen. Ein kostenloser Support oder Service für die unter www.Online-VBA.de veröffentlichen Werke kann leider nicht angeboten werden!


Autor: Marc Wershoven (Oktober 2013)

Anzeige

VBA Programmierer gesucht?
http://www.WershovenOnline.de

Anzeige

Der Quick E-Mail Support von WershovenOnline®

Schnelle Hilfe bei Fragen rund um Microsoft® Office und VBA Makros

Der Quick E-Mail Support von WershovenOnline® Sie haben beispielsweise eine Frage zu einer Ihrer eigenen Makroprogrammierungen in VBA? Oder Sie suchen Unterstützung und Informationen über eine bestimmte Microsoft® Excel® Formel? Bei nahezu allen Fragen und Problemen rund um Microsoft® Office und VBA Makros steht Ihnen unser individueller Quick E-Mail Support zur Verfügung. Einfach, schnell und unkompliziert Ihre Frage in einer E-Mail formulieren, mit oder ohne Screenshots oder einer Beispieldatei absenden und kurze Zeit später haben Sie eine vollständige Lösung inkl. ausführlicher Erklärung vom Profi in Ihrem Postfach! Zusätzlich besteht die Option, dass wir uns mittels Fernwartung (selbstverständlich nach Ihrem Einvertändnis) direkt "live" mit Ihnen zusammen an Ihrem Bildschirm gemeinsam Fragen und Problemstellungen anschauen und lösen können!

Weitere Informationen zu diesem kostenpflichtigen Angebot finden Sie auf der Anbieterseite von WershovenOnline® auf www.wershovenonline.de.

Zum Anbieter des Quick-E-Mail-Support...

Zum Seitenanfang