Problem:
Ich möchte in Tabelle1 ein Auswahlfeld erstellen, das mehrere Werte zur Auswahl aus Tabelle2 anbietet.
1. Lösung: Liste des Drop-Down-Feldes kommt aus anderen Tabellenblatt
In Excel 2007 bzw. Excel 2010 gehen Sie wie folgt vor:
2. Lösung: Liste des Drop-Down-Feldes wird direkt hinterlegt
In Excel 2007 bzw. Excel 2010 gehen Sie wie folgt vor:
3. Lösung: VBA-Lösung die ein Drop-Down-Feld (Kombinationsfeld) nutzt, um mehrere Zellen zu füllen
Eine Lösung findet sich in folgendem Artikel:
https://www.ms-office-forum.net/forum/showthread.php?t=300957
Bereiten Sie eine Excel-Datei wie folgt vor:
Füllen Sie im Tabellenblatt „Tabelle1“ die Zellen A3 bis A22 mit einer Liste von Obstsorten (Apfel, Banane, Kiwi, etc.)
Legen Sie folgenden Quellcode für das Tabellenblatt „Tabelle1“ an:
Option Explicit ' Variablendeklaration erforderlich
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'**************************************************
'* 24.12.10 *
'* erstellt von Karin (Beverly), http://Excel-Inn.de*
'* Beverly_Forums@web.de *
'**************************************************
Dim oobElement As OLEObject ' Variable für das Steuerelement als OLEObject
On Error Resume Next
ActiveSheet.OLEObjects("DropDownZoom").Delete
On Error GoTo 0
If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
' Bildschirmaktualisierung aus
Application.ScreenUpdating = False
' ComboBox erstellen
Set oobElement = OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=0, Top:=0, Width:=0, Height:=0)
With oobElement
.Top = ActiveCell.Top ' Position oben
.Left = ActiveCell.Left ' Position links
.Width = Range(ActiveCell, ActiveCell.Offset(0, 1)).Width ' Breite
.Height = Range(ActiveCell, ActiveCell.Offset(1, 0)).Height ' Höhe
.ListFillRange = "Liste" ' Quellbereich, per Name "Liste" definiert
.Name = "DropDownZoom" ' Name zuweisen
.Object.MatchRequired = True ' nur vorhandene Einträge
.Object.ListRows = 14 ' Zeilenanzahl der Liste
.Object.Font.Size = 12 ' Schriftgröße
.Object.DropDown ' DropDown öffnen
.Object.ListIndex = 0 ' 1. Eintrag auswählen
' Umwandeln in ein Datum - nur erforderlich wenn die Auswahl aus Datumswerten besteht
If IsDate(Range(.ListFillRange).Cells(1)) Then .Object = CStr(CDate(.Object))
.Activate ' aktivieren
' erforderlich, da andernfalls der 1. Eintrag nicht in die Zelle eingetragen werden kann,
' weil seine Auswahl kein Change-Ereignis auslöst da er bereits ausgwählt ist
' mit dem Makro "Eintrag" wird der 1. Eintrag in die Zelle geschrieben
Application.OnTime Now + TimeValue("00:00:00"), "Eintrag"
End With
' Bildschirmaktualisierung ein
Application.ScreenUpdating = True
End If
End Sub
Private Sub DropDownZoom_Change()
'**************************************************
'* 24.12.10 *
'* erstellt von Karin (Beverly), http://Excel-Inn.de*
'* Beverly_Forums@web.de *
'**************************************************
' Wert aus der Liste wurde gewählt
If DropDownZoom.MatchFound Then
' Umwandeln in ein Datum
If IsDate(Range(DropDownZoom.ListFillRange).Cells(1)) Then _
DropDownZoom = CStr(CDate(DropDownZoom))
' Wert nicht in Liste vorhanden
Else
' leeren
DropDownZoom = ""
End If
' Wert aus der betreffenden Zelle des Quellbereichs in aktuelle Zelle eintragen
' ListIndex beginnt bei 0, deshalb + 1
Range(DropDownZoom.TopLeftCell.Address) = _
Range(DropDownZoom.ListFillRange).Cells(DropDownZoom.ListIndex + 1)
' aktuelle Zelle wie Ausgangszelle formatieren
Range(DropDownZoom.TopLeftCell.Address).NumberFormat = _
Range(DropDownZoom.ListFillRange).Cells(DropDownZoom.ListIndex + 1).NumberFormat
End Sub
' Makro nur zu Programmierzwecken erforderlich falls die Reaktion auf die Eingabe
' nicht mehr erfolgt
Sub bbbb()
Application.EnableEvents = True
End Sub
Legen Sie ein Modul mit dem Bezeichnung „mdlAllgemein“ mit folgendem Quellcode an:
Option Explicit
Option Private Module
Sub Eintrag()
'**************************************************
'* 24.12.10 *
'* erstellt von Karin (Beverly), http://Excel-Inn.de*
'* Beverly_Forums@web.de *
'**************************************************
If Not Intersect(Range(ActiveSheet.DropDownZoom.TopLeftCell.Address), Range("C5:C35")) Is Nothing Then
' Eintrag des 1. Wertes (ListIndex = 0) der ComboBox
Range(ActiveSheet.DropDownZoom.TopLeftCell.Address) = _
Range(ActiveSheet.DropDownZoom.ListFillRange).Cells(1)
Range(ActiveSheet.DropDownZoom.TopLeftCell.Address).NumberFormat = _
Range(ActiveSheet.DropDownZoom.ListFillRange).Cells(1).NumberFormat
End If
End Sub
Weiterführende Hinweise: