Clever-Excel-Forum

Normale Version: VBA: ComboBox dynamisch befüllen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

nun habe ich ein etwas anderes Problem.

Habe einen Code (s. unten), welcher eine ComboBox auf Basis der Eingabe einer darüberliegenden ComboBox befüllen soll(te).

Habe mir aus dem Internet auch diesen Code zusammengedeixelt:
Code:
Private Sub cboProduktHinzufügen_NameLieferwerk_Change()
Dim spalte As Long                     
Dim lngletzte As Integer
Dim arrDaten

spalte = Tabelle2.Rows(1).Find(cboProduktHinzufügen_NameLieferwerk.Value, LookAt:=xlWhole).Column 'Durchsucht eine Zeile durch Spalten hindurch nach dem Wert des vorherliegenden cbo.
lngletzte = Tabelle2.Cells(Rows.Count, spalte).End(xlUp).Row 'Sucht die letzte genutzte Zeile von spalte (also der gefundenen Spalte)

arrDaten = Tabelle2.Range(Tabelle2.Cells(2, spalte), Tabelle2.Cells(lngletzte, spalte))
frmProduktHinzufügen.cboProduktHinzufügen_Produktart.List = arrDaten
Lasse ich das Makro nun durchlaufen, kann ich im ersten cbo nur den ersten Wert auswählen (ohne Probleme); wähle ich den zweiten aus bekomme ich den Fehler:

'Laufzeitfehler 381' - Eigenschaft List konnte nicht gesetzt werden. Index des Eigenschaftsfelds ungültig.

Kann mir jemand helfen, wie ich den Fehler umgehen bzw. lösen kann, denn eigentlich sollte der Code doch stimmen.

Danke für eure (nochmalige) Hilfe.

LG und schönen Abend
Domi
Hallo Domi,
schau mal nach, welchen Wert arrDaten nach der Auswahl hat. Evtl. ist auch ein .Clear vor dem .List= hilfreich.
Ansonsten poste mal die Datei.
Hallo AlterDresdner,

danke für deine Antwort.

Werde mich morgen hinsetzen und nochmals drüberschauen - habe die Datei auf Arbeit.

Melde mich morgen, lieben Gruß
Domi
Guten Morgen,

habe mich eben drangesetzt und den Punkt mit dem .Clear probiert - leider erfolglos.

Anbei hänge ich mal eine Beispieldatei an, hoffe daraus wird das Problem etwas klarer.

Danke für die Hilfe und LG
Domi
Hallöchen,

einen Fehler bekomme ich nicht. Nur wäre das .Clear schon mal erforderlich, wenn Du in der oberen cbo wechselst. Ansonsten bleiben die Daten in der zweiten drin ...

Unabhängig davon werden die einzutragenden Daten irgendwo platziert und immer wieder überschrieben. Aber wahrscheinlich warst DU wegen dem Fehler noch nicht so weit gelkommen ...
Hallo zusammen,

habe eben mit der Beispieldatei und der "echten" Datei etwas rumprobiert - der Fehler tritt auf, wenn beide Lieferwerke unterschiedliche Anzahlen von Produkten haben (also LW1 hat nur 1 Produkt, LW2 aber 2 Produkte).

Hat jemand hierfür eine Lösung?

LG Domi
Hallo,

verrate uns auch mal die cboProduktHinzufügen_Produktart-Codes.
Hallo Domi,
Fehler gibt es nur, wenn nur ein Produkt. Also
Code:
Private Sub cboProduktHinzufügen_NameLieferwerk_Change()
Dim spalte As Long                         'Definiert "spalte" als Long
Dim rngQuelle As Range
Dim lngletzte As Integer
Dim arrDaten

spalte = Tabelle2.Rows(1).Find(cboProduktHinzufügen_NameLieferwerk.Value, LookAt:=xlWhole).Column 'Holt die Lieferanten aus Spalte A, Tabelle2
lngletzte = Tabelle2.Cells(Rows.Count, spalte).End(xlUp).Row

If lngletzte = 2 Then 'nur ein Produkt
  ReDim arrDaten(1 To 1)
  arrDaten(1) = Tabelle2.Cells(2, spalte)
Else
  arrDaten = Tabelle2.Range(Tabelle2.Cells(2, spalte), Tabelle2.Cells(lngletzte, spalte))
End If
frmProduktHinzufügen.cboProduktHinzufügen_Produktart.Clear
frmProduktHinzufügen.cboProduktHinzufügen_Produktart.List = arrDaten

End Sub
Wärst Du auch draufgekommen, wenn Du Dir arrDaten im Fehlerfall mal angeschaut hättest, ist dann nämlich kein Array.
Hallo an alle,

danke euch für eure Hilfe.

@AlterDresdner: Tatsache, habe das nicht mehr bedacht und den Wald vor lauter Bäumen nicht mehr gesehen. Jetzt wo du's sagst macht's auch Sinn.
Auch danke für den Code, funzt einwandfrei.

Danke euch nochmal und schönes Weekend,
Domi