Combobox mit mehreren Spalten füllen!

Bild

Betrifft: Combobox mit mehreren Spalten füllen!
von: Holger Wächter
Geschrieben am: 16.03.2005 16:18:05
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

Bild

Betrifft: AW: Combobox mit mehreren Spalten füllen!
von: Nepumuk
Geschrieben am: 16.03.2005 17:22:41
Hallo Holger,
so geht's:


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


Gruß
Nepumuk
Bild

Betrifft: AW: Combobox mit mehreren Spalten füllen!
von: Domke, Frank
Geschrieben am: 16.03.2005 17:23:43
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?
Bild

Betrifft: AW: Combobox mit mehreren Spalten füllen!
von: Holger Wächter
Geschrieben am: 16.03.2005 20:48:08
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
Bild

Betrifft: AW: Combobox mit mehreren Spalten füllen!
von: Nepumuk
Geschrieben am: 16.03.2005 21:22:17
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
Bild

Betrifft: AW: Combobox mit mehreren Spalten füllen!
von: Holger Wächter
Geschrieben am: 17.03.2005 00:00:30
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
Bild

Betrifft: AW: Combobox mit mehreren Spalten füllen!
von: Nepumuk
Geschrieben am: 17.03.2005 05:41:07
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
Bild

Betrifft: AW: Combobox mit mehreren Spalten füllen!
von: Holger Wächter
Geschrieben am: 17.03.2005 10:21:25
Danke, Du hast mir sehr geholfen.
MfG
Holger Wächter
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Combobox mit mehreren Spalten füllen!"