Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: ComboBox dynamisch befüllen
#1
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
Antworten Top
#2
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.
Gruß der AlteDresdner (Win11, Off2021)
Antworten Top
#3
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
Antworten Top
#4
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


Angehängte Dateien
.xlsm   Datei zum Zeigen.xlsm (Größe: 248,87 KB / Downloads: 9)
Antworten Top
#5
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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
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
Antworten Top
#7
Hallo,

verrate uns auch mal die cboProduktHinzufügen_Produktart-Codes.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#8
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.
Gruß der AlteDresdner (Win11, Off2021)
[-] Folgende(r) 1 Nutzer sagt Danke an AlterDresdner für diesen Beitrag:
  • HAMRacer44
Antworten Top
#9
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste