Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Combobox mit mehreren Spalten füllen!

Combobox mit mehreren Spalten füllen!
16.03.2005 16:18:05
Holger
Hallo,
ich möchte eine Combobox mit mehereren Spalten füllen. Ich habe den ColumnCount schon auf drei gestellt, aber es kommt ein Fehler:
Eigenschaft Column konnte nicht abgerufen werden. Index des Eigenschaftsfeldes ungültig.
Folgenden Code habe ich benutzt:
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set Blatt = Workbooks("KoBuSys.xls").Sheets("Kalkulation")
Blatt.KalkulationsnrNeu.Clear
Blatt.KalkulationsnrAlt.Clear
Blatt.Kalkulationsnrlöschen.Clear
con.Open strcon
rs.Open "Select * from tbl_KalkulationÜbersicht", con, adOpenStatic, adLockReadOnly
With rs
Do Until .EOF
If !Kalkuliert = True Then
Blatt.KalkulationsnrAlt.Column(1).AddItem !Kalkulationsnr
Blatt.KalkulationsnrAlt.Column(2).AddItem !Stadt
Blatt.KalkulationsnrAlt.Column(3).AddItem !Objekt
End If
.MoveNext
Loop
.Close
End With
con.Close
Blatt.KalkulationsnrNeu.Value = "Kalkulationsnummer"
Blatt.KalkulationsnrAlt.Value = "Kalkulationsnummer"
Blatt.Kalkulationsnrlöschen.Value = "Kalkulationsnummer"
Wichtig ist einfach nur die Zeilen mit AddItem. Was muss ich ändern damit er die Werte in die Combobox richtig rein schreibt.
Danke im vorraus
Holger Wächter
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox mit mehreren Spalten füllen!
16.03.2005 17:22:41
Nepumuk
Hallo Holger,
so geht's:


With Blatt.KalkulationsnrAlt
    .AddItem !Kalkulationsnr
    .List(.ListCount - 1, 1) = !Stadt
    .List(.ListCount - 1, 2) = !Objekt
End With


Gruß
Nepumuk
Anzeige
AW: Combobox mit mehreren Spalten füllen!
16.03.2005 17:23:43
Domke,
Hallo Holger,
willst Du wirklich eine auf dem Arbeitsblatt befindliche Combobox direkt befüllen? Das klingt interessant, ich dachte die Combobox bezieht ihre Daten immer aus einem Bereich einer Tabelle.
Wenn meine Annahme richtig ist, muss Du die Daten in den Bereich (Zellen) schreiben, aus dem die Combobox ihre Daten bezieht!
Gruß
Frank.
PS: Wo bzw. wie gibt man Comboboxen auf einem Arbeitsblatt einen Namen?
Anzeige
AW: Combobox mit mehreren Spalten füllen!
16.03.2005 20:48:08
Holger
Danke Nepumuk, das hat geklappt.
Du kannst auch den Zellbezug oder den ListFillRange rausnehmen aus der Combobox und mit dem Befehl "Additem" die Combobox so füllen, wie Du es möchtest. Das geht natürlich nur mit VBA - Programmierung.
Den Namen einer Combobox änderst Du indem Du mit Rechtsklick auf Eigenschaften gehst und anstatt Combobox1 einen beliebigen Namen wählst. Das ist sinvoll um bei späterer Programmierung mit VBA die richtige Combobox zu wählen, da man ja dann nicht mehr weis, wofür Combobox1 ComboBox2 u.s.w. war.
Eine Frage habe ich hier noch, kann man das sich zu öffnende Fenster der Combobox breiter gestalten als die Combobox. Die Combobox soll also immer die gleiche grösse haben, aber das sich öffnende Fenster soll so gross sein, wie der grösste reingeschriebene Datensatz.
MfG
Holger Wächter
Anzeige
AW: Combobox mit mehreren Spalten füllen!
16.03.2005 21:22:17
Nepumuk
Hallo Holger,
wenn die maximale Breite des Eintrags schon bekannt ist, kannst du das über die Eigenschaft ColumnWidths so einstellen, dass dieser reinpasst. Wenn nicht, dann wird es schwierig. Die leichtere Variante ist, eine Proportionalschrift wie Courier zu verwenden, da alle Zeichen die selbe Breite haben. Du suchst den Eintrag mit den meisten Zeichen und passt die Spaltenbreite daran an. Die schwierigere wäre, du verwendest weiter die Standardschrift Tahoma. Dann musst du über eine Tabelle in der die Breite jedes Zeichens gespeichert ist, die Gesamtbreite des jedes Eintrags ermitteln und dann die Spalte an den breitesten anpassen. Ich habe zwei solche Tabellen mal gemacht, die sind aber für Arial normal und Arial fett mit denen ich die Breite von Ausdrucken in ein vorgegebenes Formular steuere.
Gruß
Nepumuk
Anzeige
AW: Combobox mit mehreren Spalten füllen!
17.03.2005 00:00:30
Holger
Hallo Nepumuk,
ich kann zwar die Breite mit ColumnWidths ändern aber dann öffnet sich die Combobox in der Breite wie die Combobox selber und es erscheint ein Scrollbalken nach rechts und links. Ich möchte aber, dass die Combobox sich komplett in der eingestellten Breite ohne Scrollbalken öffnet. Geht das?
Die Tabelle würde mich Interessieren. Könntest Du mir die zukommen lassen?
Danke schon mal
MfG
Holger Wächter
Anzeige
AW: Combobox mit mehreren Spalten füllen!
17.03.2005 05:41:07
Nepumuk
Hallo Holger,
die Liste der ComboBox kann nicht breiter werden wie die Box selbst.
Die Stringbreitenbrechnung:


Private Function fncBreite_n(strText As StringAs Single 'Arial Normalschrift neu
    Dim intIndex As Integer
    For intIndex = 1 To Len(strText)
        Select Case Asc(Mid(strText, intIndex, 1))
            Case 39: fncBreite_n = fncBreite_n + 0.29
            Case 33, 73, 120, 105, 106, 108, 124, 130, 145, 146, 161, 166, 204 To 207, 236 To 239: fncBreite_n = fncBreite_n + 0.44
            Case 32, 40, 41, 44 To 47, 58, 59, 91 To 93, 96, 114, 116, 123, 125, 132, 136, 139, 147, 148, 152, 155, 160, 168, 170, 173, 178 To 180, 183 To 185: fncBreite_n = fncBreite_n + 0.58
            Case 34, 42, 94, 118, 149, 176, 186: fncBreite_n = fncBreite_n + 0.73
            Case 74: fncBreite_n = fncBreite_n + 0.92
            Case 63: fncBreite_n = fncBreite_n + 1.1
            Case 43, 60, 61, 62, 70, 126, 172, 191, 215: fncBreite_n = fncBreite_n + 1.22
            Case 38, 65 To 69, 72, 75, 78, 80, 82, 83, 85, 86, 89, 119, 138, 159, 192 To 197, 199 To 203, 208, 209, 217 To 223: fncBreite_n = fncBreite_n + 1.38
            Case 71, 77, 79, 81, 109, 127, 129, 141, 143, 144, 157, 169, 174, 188 To 190, 210 To 214, 216: fncBreite_n = fncBreite_n + 1.57
            Case 37, 64, 87, 133, 140, 151, 153, 156, 198, 230: fncBreite_n = fncBreite_n + 1.83
            Case 137: fncBreite_n = fncBreite_n + 2.2
            Case Else: fncBreite_n = fncBreite_n + 1
        End Select
    Next
    fncBreite_n = fncBreite_n * 7.3
End Function
Public Sub test1()
    Debug.Print Round(fncBreite_n("Nepumuk"), 0)
End Sub


Gruß
Nepumuk
Anzeige
AW: Combobox mit mehreren Spalten füllen!
17.03.2005 10:21:25
Holger
Danke, Du hast mir sehr geholfen.
MfG
Holger Wächter
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Combobox mit mehreren Spalten füllen


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Combobox: Stelle sicher, dass die ColumnCount-Eigenschaft Deiner Combobox auf 3 gesetzt ist. Dies ermöglicht es, mehrere Spalten in der Dropdown-Liste anzuzeigen.

  2. VBA-Code einfügen: Verwende folgenden VBA-Code, um die Combobox mit Werten zu befüllen:

    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Set Blatt = Workbooks("KoBuSys.xls").Sheets("Kalkulation")
    Blatt.KalkulationsnrAlt.Clear
    
    con.Open strcon
    rs.Open "Select * from tbl_KalkulationÜbersicht", con, adOpenStatic, adLockReadOnly
    
    With rs
       Do Until .EOF
           If !Kalkuliert = True Then
               Blatt.KalkulationsnrAlt.AddItem !Kalkulationsnr
               Blatt.KalkulationsnrAlt.List(Blatt.KalkulationsnrAlt.ListCount - 1, 1) = !Stadt
               Blatt.KalkulationsnrAlt.List(Blatt.KalkulationsnrAlt.ListCount - 1, 2) = !Objekt
           End If
           .MoveNext
       Loop
       .Close
    End With
    con.Close
  3. Zellbezug festlegen: Optional kannst Du den Zellbezug oder den ListFillRange aus der Combobox entfernen, um die Werte individuell über AddItem hinzuzufügen, was eine flexiblere Handhabung ermöglicht.


Häufige Fehler und Lösungen

  • Fehler bei der Column-Eigenschaft: Wenn Du die Fehlermeldung "Eigenschaft Column konnte nicht abgerufen werden" erhältst, stelle sicher, dass Du die AddItem-Methode korrekt verwendet hast, wie im obigen Code gezeigt.

  • Scrollbalken erscheinen: Wenn beim Öffnen der Combobox Scrollbalken angezeigt werden, kann dies an der Breite der Combobox liegen. Überprüfe die ColumnWidths-Eigenschaft und passe die Breite an.


Alternative Methoden

Falls Du nicht mit VBA arbeiten möchtest, kannst Du die Combobox auch über einen Zellbereich füllen. Gehe dazu auf die Eigenschaften der Combobox und setze den ListFillRange auf den entsprechenden Zellbereich in Deinem Arbeitsblatt. Dies ist eine einfache Methode, um die Combobox mit Werten zu füllen, allerdings kannst Du damit keine individuellen Anpassungen vornehmen.


Praktische Beispiele

  1. Kalkulationsnummern füllen: Um verschiedene Kalkulationsnummern mit Städten und Objekten zu füllen, kannst Du den oben genannten VBA-Code nutzen. Achte darauf, dass die Datenbank richtig verbunden ist.

  2. Daten aus Excel-Tabellen: Wenn Du Daten aus einer Excel-Tabelle in die Combobox einfüllen möchtest, kannst Du die ListFillRange-Eigenschaft verwenden, um eine Liste zu erstellen, die automatisch aktualisiert wird.


Tipps für Profis

  • Benennung der Combobox: Ändere den Namen Deiner Combobox über die Eigenschaften, um die Programmierung zu erleichtern. Vermeide generische Namen wie ComboBox1.

  • Spaltenbreite anpassen: Benutze die ColumnWidths-Eigenschaft, um die Breite der Spalten an die längsten Einträge anzupassen. Dies verbessert die Benutzererfahrung.

  • Proportionale Schriftart verwenden: Um die Lesbarkeit zu verbessern und die Breite der Einträge besser zu steuern, kannst Du eine proportionale Schriftart wie Courier New verwenden.


FAQ: Häufige Fragen

1. Wie kann ich die Breite der Dropdown-Liste anpassen?
Die Dropdown-Liste kann nicht breiter sein als die Combobox selbst. Stelle sicher, dass die ColumnWidths so eingestellt sind, dass die Einträge passen.

2. Ist es möglich, die Combobox ohne VBA zu füllen?
Ja, Du kannst die Combobox auch über den ListFillRange befüllen, indem Du einen Zellbereich in Deinem Excel-Arbeitsblatt angibst. Dies erfordert jedoch keine individuelle Programmierung.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige