Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
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
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabellenwerte in User-Form als Grundlage für DropD

Tabellenwerte in User-Form als Grundlage für DropD
22.07.2008 22:32:42
Meier
Hi,
Excel 2003
Ich habe eine Excel-Tabelle mit fünf Spalten
A = Hauptkategorie
B = Oberkategorie
C = Unterkategorie
D = Beschreibung
E = Stichwort
und einem Button
btnUserForm
Und ein User-Form mit folgenden Feldern:
cmbHautpkatgeorie (DropDown)
cmbOberkategorie (DropDown)
cmbUnterkategorie (DropDown)
Jetzt kommt es, noch ein Vorwort zur Struktur der Tabelle
Wie man schon an den Begriffen erkennt, werden verschiedene Kategorienstufen
erfasst. Dabei kann eine Hauptkategorie mehrere Oberkategorien und diese
mehrere Unterkategorien haben.
Bsp.:
A - B - C - D
Kontakte - Privat - Projekt 1 - Bemerkung - Kategorie
Kontakte - Privat - Projekt 1 - Bemerkung - Kategorie
Kontakte - Privat - Projekt 2 - Bemerkung - Kategorie
Kontakte - Beruf - Müller - Bemerkung - Kategorie
Kontakte - Beruf - Müller - Bemerkung - Kategorie
Aufgaben - Privat - Projekt 1 - Bemerkung - Kategorie
Aufgaben - Beruf - Projekt 2 - Bemerkung - Kategorie
Jetzt die Aufgabe, die ich nicht meistern kann und für die ich Hilfe
bneötige. Vielleicht kann mir ja jemand helfen, die Lösung soll auf alle
Fälle in VBA erfolgen, nicht mit Formeln, etc.
Also:
Beim Klick auf den Button btnUserForm soll sich das UserForm öffnen. Das
kriege ich hin.
Die Felder cmbOberkategorie (DropDown), cmbUnterkategorie (DropDown),
txtBeschreibung (Textfeld), txtStichwort (Textfeld) sollen beim Öffnen des
Forms inaktiv sein. Lediglich cmbHauptkategorie (DropDown) soll aktiv sein.
Datengrundlage des DropDown sollen die Werte aus Spalte A sein. Dann aber
natürlich nicht 5 x Kontakte, sondern als Auswahlwerte 1 x Kontakte, 1 x
Aufgaben. Sobald der Wert gewählt ist, soll sich das Feld cmbOberkategorie
(DropDown) aktivieren. Jetzt sollen im cmbOberkategorie ausschließlich
Auswahlwerte erscheinen, deren Hauptkategorie (Spalte A) dem Wert im Feld
cmbHauptkategorie entsprechen. Und natürlich nicht wieder alle Werte aus
Spalte B, sondern jeder vorkommende und zu cmbHauptkategorie passende Wert
nur einmal, egal wie oft die jeweilige cmbOberkatgeorie vorhanden ist, im
Bsp. nur 1 x privat, 1 x beruf. Jetzt das gleiche Spielchen bei
cmbUnterkategorie. Wenn all die drei DropDown gewählt sind, kann es nur noch
einen passenden Wert in Spalte C und D geben. Deshalb die Felder
txtBeschreibung (Textfeld) und txtStichwort (Textfeld) nur als Textfeld.
Nachdem der letzte Wert in cmbUnterkategorie gewählt wurde, sollen also nun
die Werte aus C und D in txtBeschreibung (Textfeld) und txtStichwort
(Textfeld) des Userforms geschrieben werden.
So, ich hoffe, die lange Beschreibung war verständlich genug.
Ziel ist also, verschiedene, voneinander abhängige DropDwon in einem
UserForm mit Daten aus einem Excel-Sheet zu füllen.
Gibt es Tipps?
Beispiele?
Code-Schnipsel?
Vorgehensstrageien?
Für das Vorhaben entscheidende Befehle?
Wäre super, Danke
Gruß Jörg

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Abhängige ComboBox
23.07.2008 08:23:04
ChristianM
Hallo Jörg,
hier ein Ansatz.
Der Code für cbbOber_Change ist dann nahezu identisch mit cbbHaupt_Change, du musst dort aber die Einträge von Spalte A und Spalte B in der If-Abfrage prüfen. Als Letztes füllst du dann die TextBoxes in einer Prozedure cbbUnter_Change. Hier mir Prüfung von Spalte A, B und C in der If-Abfrage.
Gruß
Christian

Option Explicit
Private Sub UserForm_Initialize()
Dim sList() As String
Dim i As Long, k As Long
ReDim sList(k)
With Sheets("Tabelle1")
sList(k) = .Cells(2, 1)
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If IsError(Application.Match(.Cells(i, 1), sList, 0)) Then
k = k + 1
ReDim Preserve sList(k)
sList(k) = .Cells(i, 1)
End If
Next
End With
Me.cbbHaupt.List = sList
End Sub
Private Sub cbbHaupt_Change()
Dim sList() As String
Dim i As Long, k As Long
Me.cbbOber.Clear
ReDim sList(k)
With Sheets("Tabelle1")
For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
If .Cells(i, 1) = Me.cbbHaupt.Text Then
If IsError(Application.Match(.Cells(i, 2), sList, 0)) Then
ReDim Preserve sList(k)
sList(k) = .Cells(i, 2)
k = k + 1
End If
End If
Next
End With
Me.cbbOber.List = sList
End Sub


Anzeige
AW: Abhängige ComboBox
23.07.2008 22:44:00
Meier
Wow, erstmal herzlichen Dank, das funktioniert ja schon mal einwandfei.
Aber ich merke, dass mein VBA wirklich sehr mies ist und ich den Code auch nur sehr schwer bis gar nicht verstehe.
Daher kriege ich das auch mit der IF-Prüfung nicht gebacken ... leider ...
Falls Du nochmal eine ruhige Minute hast, vielleicht schaffst Du es ja, mir das noch zu erläutern bzw. die erforderlichen Zeilen für cbbOber_Change und cbbUnter_Change zu posten ...
Herzlichen Dank auf alle Fälle schonmal.
Joerg

AW: Abhängige ComboBox
24.07.2008 07:31:00
ChristianM
Hallo
ok, hier der weitere Code. Das Prinzip ist denkbar einfach. Zum Bsp. bei UserForm_Initialize: Durchlaufe Spalte 1 und wenn du einen neuen Eintrag findest, dann schreibe ihn in das Array sList. Geprüft werden die Einträge im Array mit Match. Match entspricht der Tabellenfunktion Vergleich. Das ginge natürlich auch mit 'ner weiteren Schleife, aber Match ist schneller.
Noch 'n Punkt:
- setze bei den Textboxes das Attribut "Locked" auf "True",
- setze bei den Comboboxes das Attribut "Style" auf "fmStyleDropDownList",
dann sind diese für manuelle Einträge gesperrt.
Gruß Christian

Private Sub cbbOber_Change()
Dim sList() As String
Dim i As Long, k As Long
Me.cbbUnter.Clear
ReDim sList(k)
With Sheets("Tabelle1")
For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
If .Cells(i, 1) = Me.cbbHaupt And _
.Cells(i, 2) = Me.cbbOber Then
If IsError(Application.Match(.Cells(i, 3), sList, 0)) Then
ReDim Preserve sList(k)
sList(k) = .Cells(i, 3)
k = k + 1
End If
End If
Next
End With
Me.cbbUnter.List = sList
End Sub
Private Sub cbbUnter_Change()
Dim i As Long
Me.txtBeschr = ""
Me.txtStichw = ""
With Sheets("Tabelle1")
For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
If .Cells(i, 1) = Me.cbbHaupt And _
.Cells(i, 2) = Me.cbbOber And _
.Cells(i, 3) = Me.cbbUnter Then
Me.txtBeschr = .Cells(i, 4)
Me.txtStichw = .Cells(i, 5)
Exit For
End If
Next
End With
End Sub


Anzeige
AW: Abhängige ComboBox
24.07.2008 22:21:04
Meier
Super, ganz herzlichen Dank!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige