479 Aufrufe
Gefragt in Tabellenkalkulation von fedjo Experte (2.2k Punkte)
ComboBox

Hallo Excelfreunde,
hab mal eine Frage zur ComboBox.
In drei ComboBoxen werden bei der Eingabe Vorschlagswerte übernommen, in der ComboBox 27 aber nicht.
Versuch

Wo liegt der Fehler?

Gruß
fedjo

7 Antworten

0 Punkte
Beantwortet von
Hallo Fedjo,

Das Problem liegt darin, wie das das Dictionary-Objekt verwendest.
Der Key im Dictionary Objekt ist immer unique also eindeutig. Wenn
du die Keys über die .Add Methode hinzufügen würdest, würdest du
eine entsprechende Fehlermeldung bekommen, dass dieser Key
bereits vorhanden ist und nicht nochmal hinzugefügt werden kann.
Dein Code hingegen weist dem im vorherigen Schritt angelegten,
bestehenden Key lediglich einen neuen Wert zu, der zufällig auch 0
ist. Daher läuft der Code bei dir durch und du hast nur 2 Werte in der
Combobox.

Warum machst du überhaupt den Umweg über das Dictionary-
Objekt, Dieses ist dazu gedacht einen Wert (z.B. "A") in einen
anderen (z.B. 1) zu übersetzen und nicht um virtuell zu sortieren.

Hier eine Alternative
arrDaten = Range("F4", Range("F4").End(xlDown))
arrSort arrDaten
UserForm1.ComboBox27.List = arrDaten

Sub arrSort(VA_Array)
ReDim x_Array(LBound(VA_Array) To UBound(VA_Array))
For i = 1 To UBound(VA_Array)
x_Array(i) = Application.WorksheetFunction.Small(VA_Array, i)
Next i
VA_Array = x_Array
End Sub


Wenn du deine Comboboxen so füllst, sollte das Ergebnis wie
gewünscht sein, und du kannst auf das unübersichtliche Quicksort
verzichten.

Gruß Mr. K.
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Mr. K.,
danke für die schnelle Antwort.
Meine Beschreibung des Fehlers ist nicht ganz richtig.

Die ComboBox 27 wird schon gefüllt mit den Zellen von
" Range("F4", Range("F4").End(xlDown))", aber beim Eintippen von Zeichen in das Textfeld sollte auch ein vorhandener Wert angezeigt werden und übernommen werden.

Gruß
fedjo
0 Punkte
Beantwortet von
OK, hab grad festgestellt, dass die Funktino KKLEINSTE nur Zahlen
sortiert. Wenn du auch Text sortieren willst, solltest du für Sort lieber
diese Funktion verwenden.

Sub arrSort(VA_Array)
For i = 1 To UBound(VA_Array)
If i >= 2 Then
If VA_Array(i, 1) < VA_Array(i - 1, 1) Then
b = VA_Array(i, 1)
VA_Array(i, 1) = VA_Array(i - 1, 1)
VA_Array(i - 1, 1) = b
i = i - 2
End If
End If
Next i
End Sub
0 Punkte
Beantwortet von
aber beim Eintippen von Zeichen in das Textfeld sollte auch ein
vorhandener Wert angezeigt werden und übernommen werden.

Das geht nur, wenn die Daten als Text vorliegen. Bei Zahlen wird nicht
nach dem nächstbesten Wert gesucht. Deine Zahlen sind zwar als Text
formatiert. Das hast du aber erst gemacht, nachdem du sie
eingegeben hast. Vom System werden sie deshalb noch als Zahl (Typ
Double) erkannt. Klick in die Zelle, drücke Enter und deinem Wunsch
wird entsprochen.

Gruß Mr. K.
0 Punkte
Beantwortet von
Alternativ kannst du natürlich auch die Zeile
objDictionary(varBereich(loZaehler, 1)) = 0
durch
objDictionary(CStr(varBereich(loZaehler, 1))) = 0
ersetzen.
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Da hab ich ein kleines Problem,
ich bräuchte den Bereich " Range("F4", Range("F4").End(xlDown))" in Zahlen, damit man die Stck. addieren kann, und auch in Text für die ComboBox.
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Mr. K.,
das war die Lösung:
objDictionary(CStr(varBereich(loZaehler, 1))) = 0

DANKE für deine Hilfe.

Gruß
fedjo
...