Frage von agent888, 42

Warum werden die Werte nicht in der Combobox angezeigt?

Hi, ich programmiere in VBA und bekomme immer einen Fehler. Der Teil des Codes in dem der Fehler passierte:


   If cmbUnterkategorie.Value = "Ton" Then
     lblArt.Caption = "Farbe:"
     lblArt.Visible = True
     cmbArt.RowSource = Tabelle1.Range("E2:E" & _
     Tabelle1.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible)
     cmbArt.Visible = True
  End If

Um genau zu sein wird der Fehler bei der 4. und 5. Zeile angezeigt (gehören zusammen). Was habe ich falsch gemacht? Es gibt ein Formular mit einer Combobox "Unterkategorie". Wenn deren Wert "Ton" entspricht soll eine weitere Combobox eingeblendet werden. Das was man aus dieser Combobox auswählen kann wird aus dem Tabellenblatt Tabelle1 (VBA-interner Name) entnommen. Diese wird allerdings vorher gefiltert und deshalb sollen alle noch übrig gebliebenen Einträge aus Spalte E zur Auswahl in der Combobox stehen! Danke für die Antworten schon im Voraus!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Oubyi, Community-Experte für Excel, 23

Ich kann den Fehler zwar reproduzieren, verstehe ihn aber nicht wirklich.
Allerdings konnte ich ihn in meiner Versuchsanordnung SO beheben:

cmbArt.RowSource=Sheets("Tabelle1").Range("E2:E" & _
Tabelle1.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible)

Anscheinend "verträgt" er die direkte Ansprache der Tabelle nicht.
Sicherheitshalber würde ich das Rows Count dann auch auf den Namen der Tabelle beziehen, damit es da keine Verwechslungen gibt:

cmbArt.RowSource=Sheets("Tabelle1").Range("E2:E" & _ 
Sheets("Tabelle1").UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible)

Vielleicht klappt es bei Dir auch so?

Kommentar von Oubyi ,

Danke fürs

Antwort
von beroud, 19

mach mal vor der fehlerzeile 4 ein

msgbox Tabelle1.UsedRange.Rows.Count

ich habe erst freitag ein problem mit einer vorlage gehabt, bei der genau diese angabe völlig sinlos zwischen 148millionen und 296 schwankte - bei jedem aufruf anders

Kommentar von agent888 ,

hab ich bereits gemacht... Aber der used Range gibt nicht die Anzahl der gefilterten Zeilen sondern die Anzahl der gesamten Tabelle zurück also ist das unnötig. ... was passt aber bei diesem Code nicht?

Kommentar von beroud ,

ich habs mir angesehen in excel - deine zuweisung ergibt ein range-object - rowsource erwartet aber einen string - du mußt also an deinem range noch ".adress" anhängen

cmbArt.RowSource = Tabelle1.Range("E2:E" & _    Tabelle1.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).adress

ich habs allerdings nicht weiter ausprobiert

Keine passende Antwort gefunden?

Fragen Sie die Community