Dropdownfelder

Beschreibung:

Dieses Beispiel zeigt, wie sie unter Excel Inhalte aus einer Tabelle auslesen und damit eine Dropdownliste bestücken.

Download


Version für Excel 3.0 oder höher

 

Version für Excel 97 und 2000

Quelltext:

Option Explicit   'hiermit wird die explizite Deklaration aller Variablen gefordert - nicht zwingend notwendig, beschleunigt aber das Programm und zeugt von gutem Programmierstil



Sub Dropdownfeld_EXAMPLE()

'***********Variablen deklarieren*************

    Dim seite, zahl As String
    Dim laenge As Integer
    Dim posa, zähler As Variant

    seite = "DIALOG 1"
    laenge = 0

'***********Fehlerbehandlungsrout.************

    On Error GoTo FEHLERBEHANDLUNG   'Verzweige, sobald ein Fehler auftritt zum Abschnitt "Fehlerbehandlung"

'**************Hauptprogramm*****************


    DialogSheets(seite).DrawingObjects("DRP 1").RemoveAllItems     'Alle Einträge aus Dropdownfeld "DRP 1" aus Dialog "seite" entfernen


' Alle eingetragenen Elemente (hier max 50 Stück) namentlich (Name in Spalte "A")
' aus Datenblatt "DATENB 1" als neue Elemente hinzufügen


'****************Schleife 1*****************

    For zähler = 1 To 50

' 50 hier als Maximum der möglichen Elemente;  ist der geprüfte Bereich leer, dann mache nichts, sonst füge Inhalt der aktuellen Zeile als neues Element in das gewählte Dropdownfeld ein

        zahl = CStr(zähler)    'zahl ist Wert von zähler als String; nötig, da *.Range() einen Text als Argument erwartet.
        If Sheets("DATENB 1").Range("A" + zahl) = "" Then      'tut nichts
        Else

' Zähler ist gleichzeitig die Position in der Liste, da 1 gleichzeitig
' die erste Zeile und das erste Element ist. Ergo: Füge Elemente mit der
' Bezeichnung an Position "zähler" in das Dropdownfeld ein.
            Sheets(seite).DrawingObjects("DRP 1").AddItem Text:=Sheets("DATENB 1").Range("A" + zahl), Index:=zähler

' Anzahl der hinzugefügten Elemente entspricht Anzahl der Durchläufe.
' Summiere Anzahl der Schleifendurchläufe auf.

            laenge = laenge + 1
        End If


    Next zähler   'verweist zum Schleifenanfang


' Länge des Dropdownfeldes mit Anzahl der Elemente abstimmen

    Application.DialogSheets(seite).DropDowns("DRP 1").DropDownLines = laenge   'Länge entspricht der Anzahl der Durchläufe von Schleife 1 und damit der Anzahl der eingefügten Elemente

' Listenposition auf 1 setzen

    Application.DialogSheets(seite).DropDowns("DRP 1").ListIndex = 1

' Dialog ausführen

    DialogSheets(seite).Show   'Das Argument seite muss nicht als Variable deklariert sein, ein fester Wert tut es auch, die Version als Variable zeugt allerdings von besserem Programmierstil

' Das war's: verlasse das Programm

    Exit Sub

    FEHLERBEHANDLUNG:   'Inhaltlich gesehen beginnt hier ein neuer Block

        Resume Next   'Setze mit nachfolgender Anweisung fort - warum? Diese Anweisung ist unkritisch: mögliche Fehler sind: Liste bereits leer, oder kein Element zum einfügen gefunden. Eine genauere Aufschlüsselung kann man sich in diesem Fall also sparen!

End Sub

(ac/tom) Diskussion