Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Combobox2 in Abhängigkeit ComboBox1 füllen
18.07.2007 13:20:00
AndreasR
Hallo Excelfreunde
Mit folgenden Makro was ich hier in der Recherche gefunden habe fülle ich die ComboBox2 in Abhängigkeit der ComboBox1. Was auch ganz gut funktioniert.

Private Sub ComboBox1_Click()
Dim auswahl As String
Dim i As Integer
UserForm1.ComboBox2.Clear
auswahl = UserForm1.ComboBox1.Text
i = 2
Do While Sheets("Eingabe").Cells(i, 1)  ""
If Sheets("Eingabe").Cells(i, 1) = auswahl Then
UserForm1.ComboBox2.AddItem (Sheets("Eingabe").Cells(i, 2))
End If
i = i + 1
Loop
End Sub


Mein Problem ist nun folgendes.
1. wie kann ich erreichen oder müsste der Code lauten das ich in der ComboBox1 die Werte die ich aus Tabelle „Eingabe“ „Spalte A“ auslese nicht durcheinander und doppelt erscheinen, sondern nur 1x und wenn es geht sortiert aufgelistet werden.
2. die ComboBox2 sollte bei Auswahl des Eintrages in der ComboBox1 alle verfügbaren Einträge schon anzeigen (nicht das ich erst auf das „Dreieck“ der ComboBox2 klicken muss um die Auswahl anzuzeigen.
Ist dies überhaupt so möglich, oder wie muss ich vorgehen um mein Problem zu lösen. Ich bin noch VBA Anfänger und bekomme das noch nicht ohne Hilfe so hin.
Vorerst vielen Dank
Andreas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox2 in Abhängigkeit ComboBox1 füllen
18.07.2007 15:57:00
Rudi
Hallo,

Private Sub ComboBox1_Click()
Dim strAuswahl As String, vntTmp(), iTmp As Integer
Dim i As Integer
ComboBox2.Clear
strAuswahl = UserForm1.ComboBox1.Text
i = 2
With Sheets("Eingabe")
Do While .Cells(i, 1)  ""
If .Cells(i, 1) = strAuswahl And _
WorksheetFunction.CountIf(.Range(.Cells(2, 2), .Cells(i, 2)), .Cells(i, 2)) = 1 Then
iTmp = iTmp + 1
ReDim Preserve vntTmp(1 To iTmp)
vntTmp(iTmp) = .Cells(i, 2)
End If
i = i + 1
Loop
End With
If iTmp > 0 Then
QuickSort vntTmp
ComboBox2.List = WorksheetFunction.Transpose(WorksheetFunction.Transpose(vntTmp))
ComboBox2.DropDown
End If
End Sub



Private Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
Dim V_val1, V_val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_array, 1)
End If
If IsMissing(V_high1) Then
V_high1 = UBound(VA_array, 1)
End If
V_Low2 = V_Low1
V_high2 = V_high1
V_val1 = VA_array((V_Low1 + V_high1) / 2)
While (V_Low2  V_val1 And _
V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2  V_Low1) Then Call _
QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Combobox2 in Abhängigkeit ComboBox1 füllen
18.07.2007 16:56:05
AndreasR
Hallo Rudi
habe Dein Makro jetzt getestet
funktioniert bestens. Auch die ComboBox2 wird sortiert.
das Makro ComboBox1_Click kann ich ja noch nachvollziehen, aber bei dem Makro Sub QuickSort verlässt mich mein bescheidenes VBA Wissen.
Würde es aber doch gern verstehen.
Eine Frage habe ich aber noch!
Ich hätte gern, das wenn ich einen Eintrag in der ComboBox1 auswähle, das die ComboBox2 sich automatisch öffnet. (damit ich das nicht mit dem Dreieck in der ComboBox2 machen muß) ist nur zur besseren Handhabung gedacht. Wenn das noch gehen würde?und Du mir das Makro noch dahingehend ändern könntest?
besten Dank für Deine Mühe
tolle Arbeit
Gruß Andreas

Anzeige
AW: Combobox2 in Abhängigkeit ComboBox1 füllen
18.07.2007 19:57:30
Rudi
Hallo,
a) Quicksort habe ich auch nicht selbst geschrieben.
b) eigentlich sollte Combobox2.Dropdown dafür sorgen. Wenns nicht geht, weiß ich auch nicht weiter.
Gruß
Rudi
Eine Kuh mach muh, viele Kühe machen Mühe.

AW: Combobox2 in Abhängigkeit ComboBox1 füllen
19.07.2007 07:44:52
AndreasR
Hallo Excelfreunde
Dieses Makro von Rudi funktioniert so bestens. Nochmals recht herzlichen Dank

Private Sub ComboBox1_Click()
Dim strAuswahl As String, vntTmp(), iTmp As Integer
Dim i As Integer
ComboBox2.Clear
strAuswahl = UserForm1.ComboBox1.Text
i = 2
With Sheets("Adressen")
Do While .Cells(i, 1)  ""
If .Cells(i, 1) = strAuswahl And _
WorksheetFunction.CountIf(.Range(.Cells(2, 2), .Cells(i, 2)), .Cells(i, 2)) = 1 Then
iTmp = iTmp + 1
ReDim Preserve vntTmp(1 To iTmp)
vntTmp(iTmp) = .Cells(i, 2)
End If
i = i + 1
Loop
End With
If iTmp > 0 Then
QuickSort vntTmp    'hier wird auf das Makro '

Private Sub QuickSort' zugegriffen
ComboBox2.List = WorksheetFunction.Transpose(WorksheetFunction.Transpose(vntTmp))
ComboBox2.DropDown
'ComboBox2.SetFocus
End If
'ComboBox2.DropDown
End Sub



Private Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
Dim V_val1, V_val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_array, 1)
End If
If IsMissing(V_high1) Then
V_high1 = UBound(VA_array, 1)
End If
V_Low2 = V_Low1
V_high2 = V_high1
V_val1 = VA_array((V_Low1 + V_high1) / 2)
While (V_Low2  V_val1 And _
V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2  V_Low1) Then Call _
QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 


Mein Problem ist aber immer noch das sich bei Auswahl eines Eintrages aus ComboBox1 die ComboBox2 nicht automatisch öffnet. (sondern immer erst mit Klick auf das Dreieck) dieses Problem wird auch durch die CodeZeile „ComboBox2.DropDown „ so wie das Rudi beschrieben hat nicht behoben.
Geht das überhaupt oder ist es generell nicht möglich in einer UserForm zwei ComboBox gleichzeitig offen zu halten?
Was könnte man sonst noch als Lösung tun?
Nochmals Danke an alle die sich an meinem Problem beteiligen
Gruß Andreas

Anzeige
AW: Combobox2 in Abhängigkeit ComboBox1 füllen
19.07.2007 13:37:34
AndreasR
Hallo Excelfreunde
Jetzt habe ich noch ein Problem
Das mit der ComboBox2 habe ich mit einer ListBox hinbekomen
Jetzt habe ich aber noch folgendes Problem,
die Datensätze aus meiner Tabelle „Adressen“ welche ich durch Auswahl in der ListBox1 wähle sollen in die entsprechenden TextBox in der User Form geschrieben werden.
Wie müsste ich das Makro dahingehend noch ändern?

Private Sub ComboBox1_Click()
'füllt die ComboBox1 und ListBox1 mit den Datensätzen
Dim strAuswahl As String, vntTmp(), iTmp As Integer
Dim i As Integer
'ComboBox2.Clear
ListBox1.Clear
strAuswahl = UserForm1.ComboBox1.Text
i = 2
With Sheets("Adressen")
Do While .Cells(i, 1)  ""
If .Cells(i, 1) = strAuswahl And _
WorksheetFunction.CountIf(.Range(.Cells(2, 2), .Cells(i, 2)), .Cells(i, 2)) = 1 Then
iTmp = iTmp + 1
ReDim Preserve vntTmp(1 To iTmp)
vntTmp(iTmp) = .Cells(i, 2)
End If
i = i + 1
Loop
End With
If iTmp > 0 Then
QuickSort vntTmp    'hier wird auf das Makro '

Private Sub QuickSort' zugegriffen
'ComboBox2.List = WorksheetFunction.Transpose(WorksheetFunction.Transpose(vntTmp))
ListBox1.List = WorksheetFunction.Transpose(WorksheetFunction.Transpose(vntTmp))
'hier sollen jetzt anhand des entsprechend gewählten Eintrages aus der ListBox1
'die Daten aus der Tabelle "Adressen" dementsprechend in die TextBox'en übernommen werden
'so wie der Code ab hier läuft funktioniert das aber nicht
'wie muß das geändert werden, bzw. an welche Stelle muß die Code Zeilen einfügen
'damit der die Auswahl aus ListBox1 in die TextBox geschrieben wird
Dim r%
'ListBox1.Clear
r = ListBox1.ListIndex + 3
ListBox1.Text = Sheets("Adressen").Cells(r, 2) 'Leistung für:
TextBox1.Text = Cells(r, 1)       'Eingabe Kategorie
TextBox16.Text = Cells(r, 2)      'Eingabe Unterkategorie
TextBox17.Text = Cells(r, 3)      'Eingabe Betreff Zeile
TextBox15.Text = Cells(r, 4)      'Eingabe Textbaustein
TextBox14.Text = Cells(r, 5)      'ID.Nr.
End If
End Sub



Private Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
Dim V_val1, V_val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_array, 1)
End If
If IsMissing(V_high1) Then
V_high1 = UBound(VA_array, 1)
End If
V_Low2 = V_Low1
V_high2 = V_high1
V_val1 = VA_array((V_Low1 + V_high1) / 2)
While (V_Low2  V_val1 And _
V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2  V_Low1) Then Call _
QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 


Vielen Dank nochmals
Ich hoffe nur das ich mich dabei noch an die Forum-Regeln halte
Gruß Andreas

Anzeige
AW: Combobox2 in Abhängigkeit ComboBox1 füllen
18.07.2007 16:39:20
AndreasR
Hallo Excelfreunde
Habe jetzt in der Recherche dieses Makro gefunden, welches die Datensätze in der ComboBox1 einliest und gleich sortiert

Private Sub UserForm_Initialize()
Dim ixCol As Integer
Dim ixRow As Long
Dim ixRowS As Long
Dim ixRowE As Long
Dim ixList As Integer
ixList = 0
ixCol = 1                 ' Column of ListRange (e.g. C = 3)auf 1 A abgeändert
ixRowS = 3                ' RowStart of ListRange
ixRowE = 2000             ' RowEnd of ListRange
ComboBox1.Clear
ComboBox1.AddItem ActiveSheet.Cells(ixRowS, ixCol).Value
For ixRow = ixRowS + 1 To ixRowE
If Not IsEmpty(ActiveSheet.Cells(ixRow, ixCol).Value) Then
For ixList = 0 To ComboBox1.ListCount - 1
If UCase(ComboBox1.List(ixList)) = UCase(ActiveSheet.Cells(ixRow, ixCol).Value)  _
Then Exit For
If UCase(ComboBox1.List(ixList)) > UCase(ActiveSheet.Cells(ixRow, ixCol).Value)  _
Then
ComboBox1.AddItem ActiveSheet.Cells(ixRow, ixCol).Value, ixList
Exit For
End If
Next ixList
If ixList = ComboBox1.ListCount Then
If UCase(ComboBox1.List(ixList - 1)) 


Welche Codezeilen muss ich jetzt noch einfügen, bzw, an welche Stelle müssen diese einfügt werden, damit auch die ComboBox2 sortiert wird. Welche die Daten dann aus Spalte B ausliest. Mit meinen VBA-Kenntnissen, habe ich das noch nicht geschafft.
Kann mir jemand das Makro dementsprechend abändern?
Für Eure Bemühungen bedanke ich mich bereits.
Gruß Andreas

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