[MS Excel] Auswahlliste (ComboBox) erstellen und verwenden

Variante 1

  • in einem beliebigen Bereich auf einem Tabellenblatt eine Liste mit Begriffen (Auswahlliste) erstellen
  • Zellen / Spalten, die die Listenwerte enthalten sollen, markieren
  • Menüpunkt “Formeln -> Definierte Namen -> Namen definieren” wählen
  • im Feld “Namen” einen Namen für die Liste eingeben, Zellbezug unten im Feld “Bezieht sich auf” prüfen
  • in die Zelle, in der die ComboBox erscheinen soll, klicken
  • Menüpunkt “Daten -> Datentools -> Datenüberprüfung -> Einstellungen -> Gültigkeitskriterien” wählen und unter “Zulassen” den Auswahlpunkt “Liste” wählen, “leere Zellen ignorieren” und “Zellendropdown” anhaken
  • Unter “Quelle” den vorhin vergebenen Listennamen mit vorangestelltem “=” eintragen (Zellbezug zur Auswahlliste)

Variante 2 (Kurzform von Variante 1)

  • in einem beliebigen Bereich auf einem Tabellenblatt eine Liste mit Begriffen (Auswahlliste) erstellen
  • Zellen / Spalten, die die Listenwerte enthalten sollen, markieren
  • Menüpunkt “Daten -> Datentools -> Datenüberprüfung -> Einstellungen -> Gültigkeitskriterien” wählen und unter “Zulassen” den Auswahlpunkt “Liste” wählen, “leere Zellen ignorieren” und “Zellendropdown” anhaken
  • Unter “Quelle” den Zellbezug zur Auswahlliste eintragen, ggf. über den Button im Eingabefeld markieren und auswählen

Variante 3 (Semikoleon)

  • Zellen / Spalten, die die Listenwerte enthalten sollen, markieren
  • Menüpunkt “Daten -> Datentools -> Datenüberprüfung -> Einstellungen -> Gültigkeitskriterien” wählen und unter “Zulassen” den Auswahlpunkt “Liste” wählen, “leere Zellen ignorieren” und “Zellendropdown” anhaken
  • Unter “Quelle” die Werte der Auswahlliste durch Semikoleon getrennt eintragen

Enum benennen und Beschreibung eines Enum in einer ComboBox ausgeben

Machmal kommt es vor, dass man die Werte eines Enumerators als String darstellen will. In der Regel wird vom Framework bei der Verwendung von ToString() einfach der deklarierte Name des Wertes ausgegeben. Möchte man nun, dass Anstelle des Namens eine eigene Definition angezeigt wird, könnte man auf die Idee kommen ToString() zu überschreiben. Das funktioniert aber nicht. Stattdessen muss man auf sog. DescriptionAttribute zurückgreifen.

using System.Reflection;
using System.ComponentModel;

public enum ESortOrder
{
    [Description("aufsteigend")] // Beschreibungstext für Asc
    Asc,
    [Description("absteigend")] // Beschreibungstext für Desc
    Desc
}

cbSortOrder.Items.Clear();

// alle Elemente des ESortOrder-Enums durchgehen und zugehörige
// Description ("aufsteigend", "absteigend") herausfiltern und
// in der Combobox "cbSortOrder" ausgeben
// [Description( ... )] muss für jedes Enum definiert sein,
// sonst Exception beim Zugriff auf attributes[0]
foreach (ESortOrder val in Enum.GetValues(typeof(ESortOrder)))
{
    FieldInfo fi = val.GetType().GetField(val.ToString());
    DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

    cbSortOrder.Items.Add(attributes[0].Description);
}

cbSortOrder.SelectedIndex = 0;
  • Weiterführendes Beispiel: Link