Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1328to1332
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel-VBA: Abhängige Kombinationsfelder "Bereich"

Excel-VBA: Abhängige Kombinationsfelder "Bereich"
26.08.2013 16:05:25
Mark
Hallo miteinander!
Ich habe folgendes Problem: Ich habe eine Eingabemaske in Excel erstellt, worin sich unter anderem voneinander Abhängige ComboBoxen befinden.
Ich habe den Code von diesem Tutorial ( http://www.j-hennekes.de/1298803.htm
)
genommen und verändert.
Bisher werden die ComboBoxen aus dem Tabellenblatt Zeilenweise gefüllt aber nun möchte ich dass die ComboBoxen sich aus einem bestimmten Bereich innerhalb dieser Zeile füllt..
Wie stelle ich das am Besten an? Habe schon viel probiert, aber mit meinem beschiedenen Kenntnissen komme ich einfach nicht weiter.
HIER MEIN BISHERIGER CODE (ComboBox69 und ComboBox210 sind voneinander abhängig):

Option Explicit
'Modulweite Variablen deklarieren
Const C_mstrDatenblatt As String = "Bauteile"
Const C_mstrZielblatt As String = "Backup"
Dim mobjDic As Object
Dim mlngLast As Long
Dim mlngZ As Long 
Private Sub ComboBox69_Enter()
'Erste Combobox. Jedes Bauteil in Spalte A wird einmalig angezeigt
Set mobjDic = CreateObject("Scripting.Dictionary")
For mlngZ = 2 To mlngLast
mobjDic(Worksheets(C_mstrDatenblatt).Cells(mlngZ, 2).Value) = 0
'Zellen aus Tabellenblatt die man auswählen kann
Next
Me.ComboBox69.List = mobjDic.keys
Set mobjDic = Nothing
End Sub
Private Sub ComboBox210_Enter()
'Zweite Combobox in Abhängigkeit von erster Combobox.
'Jeder passende Typ in Spalte B wird einmalig angezeigt.
Set mobjDic = CreateObject("Scripting.Dictionary")
With Worksheets(C_mstrDatenblatt)
'Tabellenblatt auswählen
For mlngZ = 2 To mlngLast
If .Cells(mlngZ, 2).Value = Me.ComboBox69.Value Then
'Wenn Auswahl getroffen wird dann,
mobjDic(.Cells(mlngZ, 3).Value) = 0
'Zellen aus Tabellenblatt die man auswählen kann
End If
Next
End With
Me.ComboBox210.List = mobjDic.keys
Set mobjDic = Nothing
End Sub

Vielen Dank im Voraus
Mit freundlichen Grüßen

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel-VBA: Abhängige Kombinationsfelder "Bereich"
29.08.2013 19:31:17
fcs
Hallo Mark,
die 1. Combobox musst du ja nur einmal mit Auswahldaten füllen, da sich diese ja in Spalte B der der Bauteile-Liste nicht ändern, während die Daten im Userform ausgewählt werden.
Deshalb reicht es diese Combobox einmalig in der Initialisierungsprozedur des Userforms zu füllen.
Die Auswahlliste der 2. Box, die gemäß dem Wert der 1. Box mit Werten aus der Spalte C gefüllt werden soll, wird dann aktualisiert, wenn die Auswahl in der 1. Box geändert wird.
Der Code schaut dann etwa wie folgt aus.
Hinweis: In den Kommentaren zum Code hast du geschrieben, dass die Auswahlwerte für die 1. Combobox Werte aus Spalte A, die 2. Box ihre Werte aus Spalte B bezieht.
In den entsprechenden Cells-Anweisungen hast du jedoch als Spalte 2 bzw. 3 also Spalten B und C angegeben. Hier muss du ggf. noch etwas korrigieren.
Gruß
Franz
Option Explicit
'Modulweite Variablen deklarieren
Const C_mstrDatenblatt As String = "Bauteile"
Const C_mstrZielblatt As String = "Backup"
Dim mobjDic As Object
Dim mlngLast As Long
Dim mlngZ As Long
Private Sub Update_ComboBox69()
'Aktualisiert die Auswahlliste der Combobox ComboBox69
'Erste Combobox. Jedes Bauteil in Spalte B  wird einmalig angezeigt
Set mobjDic = CreateObject("Scripting.Dictionary")
For mlngZ = 2 To mlngLast
mobjDic(Worksheets(C_mstrDatenblatt).Cells(mlngZ, 2).Value) = 0
'Zellen aus Tabellenblatt die man auswählen kann
Next
Me.ComboBox69.List = mobjDic.keys
Set mobjDic = Nothing
End Sub
Private Sub Update_ComboBox210()
'Aktualisiert die Auswahlliste der Combobox ComboBox210
'Zweite Combobox in Abhängigkeit von erster Combobox.
'Jeder passende Typ in Spalte C wird einmalig angezeigt.
Set mobjDic = CreateObject("Scripting.Dictionary")
With Worksheets(C_mstrDatenblatt)
'Tabellenblatt auswählen
For mlngZ = 2 To mlngLast
If .Cells(mlngZ, 2).Value = Me.ComboBox69.Value Then
'Wenn Auswahl getroffen wird dann,
mobjDic(.Cells(mlngZ, 3).Value) = 0
'Zellen aus Tabellenblatt die man auswählen kann
End If
Next
End With
With Me.ComboBox210
.List = mobjDic.keys
.ListIndex = -1
End With
Set mobjDic = Nothing
End Sub
Private Sub ComboBox69_Change()
If Me.ComboBox69.ListIndex  -1 Then
Call Update_ComboBox210
End If
End Sub
Private Sub UserForm_Initialize()
With Worksheets(C_mstrDatenblatt)
'Tabellenblatt auswählen
mlngLast = .Cells(.Rows.Count, 2).End(xlUp).Row
End With
Call Update_ComboBox69
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige