296 Aufrufe
Gefragt in Tabellenkalkulation von

hallo aller Seiz ich habe mal wieder eine Frage, und zwar 
habe ich eine Combobox diese befindet sich in meinem Tabellen Blatt (Tabelle1).Nun möchte ich dies aus einem anderen Tabellen Blatt(Tabelle2) befüllen mit zwei Spalten.
in etwa so:

lngUntersterEintrag = Range("Tabelle1!K65536").End(xlUp).Row
Me.ComboBox1.List = Range("Tabelle1!K35:L40" & lngUntersterEintrag).Value
 Me.ComboBox1.ColumnWidths = "20Pt;20 Pt"
End Sub

Leider war das befüllen über die Eigenschaft Fester nicht von Erfolg gekrönt! Zwar wurden beide Spalteninhalte beim Öffnen angezeigt aber sobald die Combobox geschlossen ist wird nur die erste Spalte angezeigt
Ich mochte nämlich, dass die erste Spalte Später in Die Tabelle eingetragen wird und die Zweite spalte dafür in der Combobox angezeigt wirte, denn es ist so dass ich jedem Textelements eine Nummer zugewiesen habe. Dieser wird dann Später an stelle des Textelements in die Tabelle eingetragen wird. Bei einer daten Bank würde es nämlich wen ich sie mit Text befüllen würde schnell sehr unübersichtlich werden, deswegen sollen Stattdessen die entsprechenden zugewiesen zahlen eingetragen werden  


8 Antworten

+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)
Hi,

laufe in einer Schleife über alle Einträge und weise die Daten mittels AddItem zu - da kannst du die Spalten sozusagen "vertauschen", indem du zuerst die Daten aus Spalte B und danach aus Spalte A übergibst.

Bis später, Karin
0 Punkte
Beantwortet von k-siebke Einsteiger_in (81 Punkte)
wie sieht das in etwa aus, hast du mal ein beichpiel zur Anregung oder so
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)
    Dim lngLetzte As Long
    Dim lngZeile As Long
    lngLetzte = Range("K35").End(xlDown).Row
    For lngZeile = 35 To lngLetzte
        ComboBox1.AddItem Cells(lngZeile, 12)
        ComboBox1.List(ComboBox1.ListCount - 1, 1) = Cells(lngZeile, 11)
    Next lngZeile
    ComboBox1.ColumnCount = 2
    ComboBox1.ColumnWidths = "20Pt;20 Pt"

Bis später, Karin

0 Punkte
Beantwortet von k-siebke Einsteiger_in (81 Punkte)

Danke für dein Beispiel, aber ist das nicht für die User Form?

meine Combobox befindet sich aber im Tabellenblatt1 und bezieht die Infos zum befüllen aus Tabellenblatt 2

Ich danke dir Trotzdem für deine Anregung und kann sagen das dein Beispiel bei mir abgespeichert ist yes

+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

In deinem Eröffnungsbeitrag hattest du geschrieben: "...eine Combobox diese befindet sich in meinem Tabellen Blatt..." - meinst du, ich würde dir dann einen Code für ein UserForm posten ohne darauf hinzweisen? Hast du den Code bei deiner ComboBox im Tabellenblatt denn überhaupt mal getestet? Und wenn sich die ComboBox in einem anderen Tabellenblatt befindet als die Daten, dann muss man logischerweise noch den Worksheet-Namen vor die Zellbezüge setzten. Das ist doch eine bekannte Programmierlogik - oder meinst du nicht?... wink

Bis später, Karin

0 Punkte
Beantwortet von k-siebke Einsteiger_in (81 Punkte)

Sorry als ich dein Beitrag gesehen habe war ich unterwegs und hab es auf meinem Handy gelesen! Und ja getestet habe ich es auch. ich habe die Sub Anweisung am Anfang und die End Funktion hinzugefügt. Und habe deine Anweisung und die Combobox erstmal in ein und denselben Tabellenblatt getestet  

Mir ist Zwar die VBA vertraut aber bin nicht gerade der vba Profi

+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)
 
Beste Antwort

Anhand deines geposteten Code musste man annehmen, dass du ihn mit einem ActiveX-CommandButton im selben Tabellenblatt wie die ComboBox ausführst, denn du beziehst dich mit Me.ComboBox1 auf genau dieses Tabellenblatt. Me. muss man in solchen Fällen aber nicht unbedingt angegeben werden, da sich die ComboBox ja im selben Tabellenblatt wie der CommandButton befindet - deshalb habe ich Me. in meinem Code weggelassen.

Wenn du - wie sich nun herausstellt - das Makro aus einem Standardmodul heraus starten willst, dann kannst du Me. überhaupt nicht verwenden. In solchen Fällen muss man das Steuerelement als OLEObject ansprechen:

Sub Fuellen()
    Dim lngLetzte As Long
    Dim lngZeile As Long
    Dim oobBox As OLEObject
    Set oobBox = Worksheets("Tabelle2").OLEObjects("ComboBox1")
    oobBox.Object.Clear '<== damit die ComboBox nicht mehrfach gefüllt wird wenn der Code mehrfach ausgeführt wird
    With Worksheets("Tabelle1")
        lngLetzte = .Cells(Rows.Count, 11).End(xlUp).Row
        For lngZeile = 35 To lngLetzte
            oobBox.Object.AddItem .Cells(lngZeile, 12)
            oobBox.Object.List(oobBox.Object.ListCount - 1, 1) = .Cells(lngZeile, 11)
        Next lngZeile
        oobBox.Object.ColumnCount = 2
        oobBox.Object.ColumnWidths = "20Pt;20 Pt"
    End With
End Sub

Gib also bitte das nächstemal zumindest die Startzeile der Prozedur an, damit man genau sehen kann, was für einen Prozedurtyp du meinst - die Zeile End Sub dagegen ist unwichtig.

Bis später, Karin

0 Punkte
Beantwortet von

Danke funktioniert alles ganz supper.!!

Versuche das ganze  für eine zweite Combobox noch mal   anzuwendenwink

 

...