Kombinationsfeld in eine Tabelle einfügen
Excel, alle Versionen
In manchen Fällen ist es hilfreich, wenn Sie für den Wert bzw. Text in einer Zelle verschiedene Möglichkeiten vorgeben. Wenn der Benutzer neben seiner Auswahl auch noch eigene Werte eintragen können soll, dann ist ein Kombinationsfeld, auch ComboBox oder DropDown-Feld genannt, der bessere Möglichkeit. In einer kleinen Beispieldatei soll die Fütterung der Haustiere in Excel dokumentiert werden.Da in verschiedenen Versionen des Excel vieles anders ist, werden hier beide „Welten” getrennt dargestellt. Das Grundgerüst der Datei sieht grundsätzlich so aus, die Abbildungen hier in der Excel-Version 2003:
Grundsätzlich bezieht ein solches Feld seine Daten, die zur Auswahl angeboten werden, aus einem Bereich einer Excel-Tabelle. Aus Gründen der Optik ist es sinnvoll, wenn diese Liste nicht im direkten Sichtbereich ist. Ich habe darum die Zelle AA1 für den ersten Eintrag gewählt und in den Zeilen darunter die weiteren (Haus-) Tiere. Das Ganze sieht dann so aus:
Damit sind die Vorbereitungen abgeschlossen. Im nächsten Schritt soll die ComboBox eingefügt werden. Als spätere Platzierung sehe ich E2 vor. Es führen mehrere Wege zum Ziel, ich zeige Ihnen hier den jeweils praktikabelsten auf; „jeweils”, weil mit der Excel-Version 2007 ein grundlegender Bruch im Aussehen und auch Vorgehen geschaffen worden ist. Darum werde ich hier zwei Versionen vorstellen, als typische Vertreter Excel 2003 und Excel 2007.
Excel 2003
Zu Beginn wählen Sie aus dem Menü Symbolleisten den Unterpunkt Steuerelement-Toolbox:
Nach dem loslassen der Maustaste wird das Fenster mit den Steuerelementen erscheinen. Wahrscheinlich ist es bei Ihnen nur zweispaltig und dafür länger. Sie können durch ziehen die Form beliebig verändern:
Ein Klick auf das Symbol mit dem Kombinationsfeld und der Mauszeiger wird zu einem Kreuz. Gehen Sie in die Nähe des gewünschten Zielorts und ziehen Sie bei gedrückter Maustaste einen Rahmen, der in etwa die Größe des künftigen Kombinationsfeldes hat. Auf der folgenden Abbildung sehen Sie den Mauszeiger, den ich in dieser Position los lasse:
Die Größe des Feldes ist damit bestimmt. Prinzipiell hätte auch ein einfacher Klick im Tabellenblatt gereicht. Dann wäre die Größe der Box aber kleiner, einfach zu klein. Nun kann das Fenster mit den Steuerelementen durch einen Klick auf das x‑förmige Kreuz in der oberen rechten Ecke geschlossen werden:
Drei Dinge sind in dieser Ansicht bemerkenswert:
- Das DropDown-Feld ist als solches deutlich erkennbar und auch in der für diese Felder typischen Form markiert.
- Dieses Element hat automatisch den Namen ComboBox1 bekommen, siehe oberhalb des Spaltenkopfes A.
- Automatisch wurde eine EINBETTEN-Funktion erstellt.
Ein Rechtsklick auf die ComboBox und …
… die Eigenschaften anklicken. Dann erscheint ein ausgesprochen unübersichtliches Fenster mit vielen, vielen Möglichkeiten:
Die beiden für unser Vorhaben wichtigen Einträge sind in der obigen Abbildung gelb gemarkert. In den rechten Bereich werden Sie jeweils eine Zelladresse bzw. einen Bereich eingeben.
LinkedCell enthält jene Zelle, wo der ausgewählte Eintrag des Kombinationsfeldes eingetragen wird. Im ersten Schritt wird dieses immer A2 sein, also die erste Zeile unter der Überschrift „Haustier”. Später wird das noch so angepasst, dass automatisch die erste freie Zeile verwendet wird.
ListFillRange bezeichnet den Bereich, wo die Daten für die anzuzeigende Liste ausgewählt werden.
Mit dem letztgenannten Punkt beginnen wir auch. Es soll erst einmal ein funktionierendes DropDown erstellt werden, für das Erfolgserlebnis :). Dabei spielt keine Rolle, dass das Kombinationsfeld noch nicht so positioniert ist, wie es im Endeffekt sein wird.
Der Bereich, wo die Daten für die Liste stehen, ist ja bekannt: In AA1:AA7 stehen die Haustiere. Also tragen Sie auch AA1:AA7 so in das Eingabefeld ein:
Falls das Eigenschaften-Fenster nun stört, können Sie es erst einmal schießen. Wenn Sie später den zweiten Wert eingeben, dann bitte wieder öffnen, klar. Der Übung halber wäre des schließen gut.
Wahrscheinlich wird das DropDown-Feld immer noch in der typischen Art markiert sein, mit den Kreisen als Anfasser für die Größenanpassung. Wenn Sie nun auf die ComboBox Klicken, dann wird sich gar nichts tun. Es klappt auch keine Auswahl aus. Das liegt daran, dass Sie sich im Entwurfsmodus befinden. Um das zu ändern, Klicken Sie auf das erste Symbol in der Steuerelemente – Box:
Die Steuerelemente-Box können Sie jetzt schließen. Nun steht auch das Kombinationsfeld schön frei da. Ein Klick auf den nach unten zeigenden Pfeil rechts und der Erfolg ist gegeben:
Nun ein Klick auf ein anderes Haustier und der gewählte Wert wird in die Eingabezeile übernommen:
Mehr kann zur Zeit auch noch nicht geschehen. Denn Excel weiß ja gar nicht, wohin diese Auswahl nun geschrieben werden soll, welches die Ziel-Adresse ist. Den Wert tragen Sie nun in dem Eigenschaften – Fenster in die Zeile LinkedCell ein, also die verLinkte Zelle. In unserem Fall ist das A2. Sie werden erkennen, dass das sehr gut funktioniert. Immer wenn Sie eine neue Auswahl treffen, wird diese in A2 übernommen.
In vielen Fällen ist das so auch ausreichend. Aber hier soll ja eine längere Liste erstellt werden, wo über einen größeren Zeitraum alle Mahlzeiten der Lieblinge erfasst werden. Da bleibt eigentlich nur die Möglichkeit, dieses ComboBox für jede Zeile einzeln zu erstellen und die Eigenschaften entsprechend anzupassen.
Wie gesagt, eigentlich. Mit einer kleinen Routine in der Makrosprache des Excel (VBA) können Sie das umgehen und die Eigenschaften des DropDowns werden per Programm immer so angepasst, dass automatisch die erste freie, leere Zeile der Spalte A als Zielort für die Auswahl verwendet wird.
Auch wenn sich das total kompliziert anhört, ganz so schlimm ist es nicht. Und ich werde Sie Schritt für Schritt begleiten. Achten Sie zu Beginn darauf, dass Sie sich in der Tabelle1 befinden. Dann betätigen Sie die Tastenkombination AltF11. Im Normalfall werden Sie dann ein Fenster sehen, das dem in der folgenden Abbildung ähnelt:
Sollte der rechte Teil des Fensters nur grau sein, dann machen Sie bitte einen Doppelklick auf den Eintrag Tabelle 1 (Tabelle1), dann wird sich rechts das Editor – Fenster öffnen. Und falls dort nicht der Eintrag Option Explicit drinnen steht, geben Sie ihn bitte nur in Kleinbuchstaben geschrieben ein. Wenn Sie sich nicht verschrieben haben, wird die Schreibweise automatisch so umgewandelt, wie im obigen Bild gezeigt. Setzen Sie den Schreibcursor, die Schreibmarke also, in eine freie Zeile darunter.
Anschließend öffnen Sie in diesem Fenster das DropDown (Allgemein) und Klicken dann auf den Eintrag Ihrer ComboBox. Normalerweise ist es die ComboBox1, wie auch hier gezeigt.
Sofort nach dem Klick wird sich im Bereich darunter etwas tun. Es wurde automatisch ein Programmgerüst eingefügt und der Schreibcursor blinkt im Freiraum zwischen den beiden Zeilen. Der Name dieser Prozedur (so nennt man solche Programme) lässt Sie erahnen, dass das etwas mit einem Ereignis zu tun hat. Stimmt, immer wenn sich der Inhalt der ComboBox ändert wird der Code, welcher gleich noch eingegeben wird, ausgeführt.
Drücken Sie nun einmal Tab, damit der folgende Code etwas eingerückt ist. Das ist nicht unbedingt erforderlich, aber jeder erfahrene Programmierer schätzt das als guten Stil. Geben Sie nun folgenden Code als ganz normalen Text ein: me.
Sie erkennen eine kleine ListBox, wo Ihnen diverse Einträge zur Auswahl angeboten werden. Da Sie die ComboBox1 ansprechen wollen, geben Sie doch einmal die ersten drei Zeichen com ein:
Spätestens jetzt wird Ihnen genau das Richtige angeboten, nämlich die ComBobox1. Wenn diese markiert ist, einfach Tab und die Auswahl wird in die Codezeile übernommen. Den restlichen Code geben Sie bitte per Hand ein. Die komplette Zeile sieht dann so aus:
Me.ComboBox1.LinkedCell = „A” & _
Me.Cells(Rows.Count, 1).End(xlUp).Row + 1
Da es auf dem Bildschirm nicht immer so gut zu lesen ist, hier ein Hinweis: in der Codezeile sind fast ausschließlich Punkte als trennendes Element. Nur hinter dem Count ist ein Komma, kein Punkt. – Sie sollen und müssen diesen Code nicht verstehen, das ist nicht der Sinn dieses Exkurses. Wichtig ist nur, dass er läuft.
Wenn Sie etwas mehr Komfort haben wollen, indem nach der Auswahl gleich die Zelle neben dem neu geschriebenen Eintrag markiert wird, dann verwenden Sie den hier folgenden Code. Dazu einfach die alten Zeilen von Private Sub bis End Sub löschen und die folgenden Programmzeilen einfügen. Das geht am leihtesten, wenn Sie die Zeilen hier im Browser markieren, kopieren und dann im Editor des Excel wieder einfügen.
Private Sub ComboBox1_Change()
Dim lngNewRow As Long
lngNewRow = _
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveSheet.Range(„B” & lngNewRow – 1).Select
Me.ComboBox1.LinkedCell = „A” & lngNewRow
End Sub
Zugegeben, das ist die allereinfachste Form der Programmierung, die Sie verwenden können. Da sind noch Schwachstellen drin. Beispielsweise müssen Sie die Eigenschaft LinkedCell per Hand über das Eigenschaften-Fenster ändern, wenn Sie Zeilen am Ende gelöscht haben. In einem „richtigen” Projekt wird so etwas natürlich berücksichtigt. Aber das ist eine andre Baustelle.
Bleibt noch eine Kleinigkeit zu erledigen, die Positionierung der ComboBox. Wenn Sie im derzeitigen Status versuchen, dieses Objekt zu verschieben, wird Ihnen das nicht gelingen. Das Kombinationsfeld lässt sich einfach nicht anfassen. Die Abhilfe ist recht simpel: Sie müssen wieder den Bearbeitungsmodus aktivieren, dann geht das auch hervorragend. Lassen Sie sich also wieder die Symbolleiste Steuerelement – Toolbox anzeigen und Klicken Sie auf die Schaltfläche für den Entwurfsmodus:
Jetzt sind auch wieder die typischen Anfasser zu sehen. Zeigen Sie mit der Maus mitten in das Objekt; der Mauszeiger ist nun zu einem Kreuz mit vier Pfeilspitzen an den Enden geworden. Nun verschieben Sie das Kombinationsfeld an jene Position, wo es endgültig stehen soll. Dabei ist es sehr hilfreich, wenn Sie Alt gedrückt halten. Dann rastet nämlich eine der Ecken immer genau in einem Eckpunkt einer Tabellenzelle ein. Somit ist es ein Kinderspiel, das DropDown-Feld exakt bei D2 in der linken oberen Ecke zu positionieren.
Weiter (Excel 2007 überspringen)
Excel 2007
Natürlich sieht Ihre Oberfläche des Excel ganz anders aus, als im ersten Bild gezeigt. Und wahrscheinlich wird sich der Symbol-Bereich, die Ribbons bei Ihnen etwas anders darstellen als auf diesen Bildern. Das liegt daran, dass ich für diese Dokumentation das Fenster der Anwendung (Excel) so stark verkleinert habe, dass Bildschirmfotos in einer sinnvollen Größe sind. Mit etwas suchen werden Sie gewiss auch rasch fündig werden.
Zuallererst prüfen Sie bitte, ob in Ihrer Menüleiste die Auswahl Entwicklertools zu sehen ist. Bei der Standard-Installation sind diese nicht vorhanden! In dem Fall müssen Sie die Tools aktivieren. Wie das geht, erfahren Sie hier.
Klicken Sie zuerst auf die Registerkarte Entwicklertools. In der obigen Abbildung ist der Text etwas verkürzt dargestellt, weil das Anwendungsfenster für diese Bildschirm-Aufnahmen stark verkleinert worden ist. Danach werden die dazugehörigen Ribbons angezeigt. Klicken Sie nun auf die große Schaltfläche Einfügen …
… und wählen dann bei den ActiveX-Steuerelementen das Kombinationsfeld aus. Die Formularsteuerelemente sind nur für Formulare gedacht! Ein Klick auf das Symbol und zeigen Sie danach im Tabellenblatt in die Nähe der Zielposition. Der kreuzförmige Mauszeiger weist die linke obere Ecke der ComboBox aus, wenn Sie mit einem Klick die Positionierung abschließen.
Das Kombinationsfeld ist eingefügt. Die Position ist erst einmal OK so, ganz zum Schluss werden noch Feinkorrekturen vorgenommen. Drei Dinge sind in dieser Ansicht bemerkenswert:
- Die große Schaltfläche Entwurfsmodus ist deutlich erkennbar aktiviert.
- Das DropDown-Feld hat automatisch den Namen ComboBox1 bekommen, siehe oberhalb des Spaltenkopfes A.
- Automatisch wurde eine EINBETTEN-Funktion erstellt.
Das Feld ist für die teilweise längeren Namen zu schmal. Darum sollte es etwas verbreitert werden. Dazu Klicken Sie erst einmal auf die ComboBox. Es werden sich an allen vier Ecken und mittig an jeder Seite die kreisförmigen Anfasser zeigen. Wenn Sie nun auf den linken Rand über den mittleren Anfasser zeigen, verändert sich die Form des Cursors zu einem horizontalen Doppelpfeil:
Jetzt Klicken, festhalten und ziehen. Ist die gewünschte Größe erreicht, einfach loslassen. – Wenn die Anfasser nicht sichtbar sind und auch ein erneuter Klick mitten auf das Kombinationsfeld keinen Erfolg bringt, dann ist der Entwurfsmodus nicht aktiviert. Ein Klick auf den (das?) Ribbon und die bräunliche Hintergrundfarbe zeigt die Aktivität an. Diese Funktionalität wird auch weiter gebraucht.
Achten Sie darauf, dass das DropDown aktiviert ist, die Anfasser also zu sehen sind. Ein Rechtsklick auf die ComboBox und …
… die Eigenschaften anklicken. Dann erschein ein ausgesprochen unübersichtliches Fenster mit vielen, vielen Möglichkeiten:
Die beiden für unser Vorhaben wichtigen Einträge sind in der obigen Abbildung gelb gemarkert. In die rechte Spalte werden Sie jeweils eine Zelle oder einen Bereich eingeben.
LinkedCell enthält jene Zelle, wo der ausgewählte Eintrag des Kombinationsfeldes eingetragen wird. Im ersten Schritt wird dieses immer A2 sein, also die erste Zeile unter der Überschrift „Haustier”. Später wird das noch so angepasst, dass automatisch die erste freie Zeile verwendet wird.
ListFillRange bezeichnet den Bereich, wo die Daten für die anzuzeigende Liste ausgewählt werden.
Mit dem letztgenannten Punkt beginnen wir auch. Es soll erst einmal ein funktionierendes DropDown erstellt werden, für das Erfolgserlebnis :). Dabei spielt keine Rolle, dass das Kombinationsfeld noch nicht so positioniert ist, wie es im Endeffekt sein wird. Der Bereich ist ja bekannt: In AA1:AA7 stehen die Daten. Also tragen Sie diesen Wert so in das Eingabefeld ein:
Falls das Eigenschaften-Fenster nun stört, können Sie es erst einmal schießen. Wenn Sie später den zweiten Wert eingeben, dann bitte wieder öffnen, klar.
Das DropDown-Feld ist immer noch markiert, eventuell mit den sichtbaren Kreisen als Anfasser für die Größenanpassung. Wenn Sie nun auf die ComboBox ein, zwei Mal Klicken, dann wird sich gar nichts tun. Es klappt keine Auswahl aus. Das liegt daran, dass Sie sich noch im Entwurfsmodus befinden. Um das zu ändern, Klicken Sie auf die bekannte Schaltfläche und diese wird dann auch die Farbe der Nachbarfelder annehmen.
Nun steht auch das Kombinationsfeld in jedem Fall schön frei da. Auch wenn Sie mitten hinein Klicken, wird sich kein Anfasser zeigen. Jedoch ein Klick auf den nach unten zeigenden Pfeil rechts und der Erfolg ist gegeben:
Wiederum ein Klick auf ein anderes Haustier und der gewählte Wert wird in die Eingabezeile übernommen:
Mehr kann ja auch noch nicht geschehen. Denn Excel weiß ja nicht, wohin diese Auswahl denn nun geschrieben werden soll, welches die Ziel-Zelle ist. Das tragen Sie nun in dem Eigenschaften – Fenster in die Zeile LinkedCell ein, also die verLinkte Zelle. In unserem Fall ist das A2. Sie werden erkennen, dass das sehr gut funktioniert. Immer wenn Sie eine neue Auswahl treffen, wird diese in A2 übernommen.
In vielen Fällen ist das auch ausreichend. Aber hier soll ja eine längere Liste erstellt werden, wo über einen größeren Zeitraum alle Mahlzeiten der Lieblinge erfasst werden. Da bleibt eigentlich nur die Möglichkeit, dieses ComboBox für jede Zeile zu erstellen und die Eigenschaften entsprechend anzupassen. Wie gesagt, eigentlich. Mit einer kleinen Routine in der Makrosprache des Excel können Sie das umgehen und die Eigenschaften des DropDowns werden per Programm immer so angepasst, dass automatisch die erste freie Zeile der Spalte A als Zielort für die Auswahl verwendet wird.
Auch wenn sich das total kompliziert anhört, ganz so schlimm ist es nicht. Und ich werde Sie Schritt für Schritt begleiten. Achten Sie zu Beginn darauf, dass Sie sich in der Tabelle1 befinden. Dann betätigen Sie AltF11. Im Normalfall werden Sie dann ein Fenster sehen, das dem in der folgenden Abbildung ähnelt:
Sollte der rechte Teil des Fensters nur grau sein, dann machen Sie bitte einen Doppelklick auf den Eintrag Tabelle 1 (Tabelle1), dann wird sich rechts das Editor – Fenster öffnen. Und falls dort nicht der Eintrag Option Explicit drinnen steht, geben Sie ihn bitte nur in Kleinbuchstaben geschrieben ein. Wenn Sie sich nicht verschrieben haben, wird die Schreibweise automatisch so umgewandelt, wie im obigen Bild gezeigt. Setzen Sie den Schreibcursor, die Schreibmarke also, in eine freie Zeile darunter.
Anschließend öffnen Sie in diesem Fenster das DropDown (Allgemein) und Klicken dann auf den Eintrag Ihrer ComboBox. Normalerweise ist es die ComboBox1, wie auch hier gezeigt.
Sofort nach dem Klick wird sich im Bereich darunter etwas tun. Es wurde automatisch ein Programmgerüst eingefügt und der Schreibcursor blinkt im Freiraum zwischen den beiden Zeilen. Der Name dieser Prozedur (so nennt man solche Programme) lässt Sie erahnen, dass das etwas mit einem Ereignis zu tun hat. Stimmt, immer wenn sich der Inhalt der ComboBox ändert wird der Code, welcher gleich noch eingegeben wird, ausgeführt.
Drücken Sie nun einem Tab, damit der folgende Code etwas eingerückt ist. Das ist nicht unbedingt erforderlich, aber jeder gute Programmierer schätzt das als guten Stil. Geben Sie nun folgenden Code als ganz normalen Text ein: me.
Sie erkennen eine kleine ListBox, wo Ihnen diverse Einträge zur Auswahl angeboten werden. Da Sie die ComboBox1 ansprechen wollen, geben Sie doch einmal die ersten drei Zeichen com ein:
Spätestens jetzt wird Ihnen genau das Richtige angeboten, nämlich die ComBobox1. Wenn diese markiert ist, einfach Tab und die Auswahl wird in die Codezeile übernommen. Den restlichen Code geben Sie bitte per Hand ein. Die komplette Zeile sieht dann so aus:
Me.ComboBox1.LinkedCell = „A” & _
Me.Cells(Rows.Count, 1).End(xlUp).Row + 1
Da es auf dem Bildschirm nicht immer so gut zu lesen ist, hier ein Hinweis: in der Codezeile sind fast ausschließlich Punkte als trennendes Element. Nur hinter dem Count ist ein Komma, kein Punkt. – Sie sollen und müssen diesen Code nicht verstehen, das ist nicht der Sinn dieses Exkurses. Wichtig ist nur, dass er läuft.
Wenn Sie etwas mehr Komfort haben wollen, indem nach der Auswahl gleich die Zelle neben dem neu geschriebenen Eintrag markiert wird, dann verwenden Sie diesen Code. Dazu einfach die alten Zeilen von Private Sub bis End Sub löschen und die folgenden Programmzeilen einfügen. Das geht am leichtesten, wenn Sie die Zeilen hier markieren, kopieren und dann im Editor des Excel wieder einfügen.
Private Sub ComboBox1_Change()
Dim lngNewRow As Long
lngNewRow = _
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveSheet.Range(„B” & lngNewRow – 1).Select
Me.ComboBox1.LinkedCell = „A” & lngNewRow
End Sub
Zugegeben, das ist die allereinfachste Form der Programmierung, die Sie verwenden können. Da sind noch Schwachstellen drin. Beispielsweise müssen Sie die Eigenschaft LinkedCell per Hand über das Eigenschaften-Fenster ändern, wenn Sie Zeilen am Ende gelöscht haben. In einem „richtigen” Projekt wird so etwas natürlich berücksichtigt. Aber das ist eine andere Baustelle.
Bleibt noch eine Kleinigkeit zu erledigen, die Positionierung der ComboBox. Wenn Sie im derzeitigen Status versuchen, dieses Objekt zu verschieben, wird Ihnen das nicht gelingen. Das Kombinationsfeld lässt sich einfach nicht anfassen. Die Abhilfe ist recht simpel: Sie müssen wieder den Bearbeitungsmodus aktivieren, dann geht das auch hervorragend. Ein Klick auf die Schaltfläche, dann ein Klick auf das DropDown-Feld. Jetzt sind auch wieder die typischen Anfasser zu sehen. Zeigen Sie mit der Maus mitten in das Objekt; der Mauszeiger ist ein Kreuz mit vier Pfeilspitzen an den Enden. Nun verschieben Sie das Kombinationsfeld an jene Position, wo es endgültig stehen soll. Dabei ist es sehr hilfreich, wenn Sie Alt gedrückt halten. Dann rastet nämlich eine der Ecken immer genau in einem Eckpunkt einer Tabellenzelle ein. Somit ist es ein Kinderspiel, das DropDown-Feld exakt bei C2 zu positionieren.
Damit ist dieses kleine Projekt beendet. Wenn Sie noch Fragen haben oder kleinere Anpassungen wünschen, senden Sie uns eine Mail.
[NachObenLetzte Verweis=„ML: ComboBox in Tabelle”]