Office: mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen

Helfe beim Thema mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo an Alle, ich erstelle zur Laufzeit abhängig von einigen Zellen-Inhalten einige Comboboxen mit Worksheet.OLEObjects.Add und fülle sie einspaltig... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von DataSponge1, 14. Oktober 2012.

  1. mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen


    Hallo an Alle,

    ich erstelle zur Laufzeit abhängig von einigen Zellen-Inhalten einige Comboboxen mit Worksheet.OLEObjects.Add und fülle sie einspaltig mit .object.Additem. Nun soll eine der cbo.s zweispaltig gefüllt werden.:
    .Object.ColumnCount = 2 ' funktioniert
    .Object.ColumnWidths = "1,5cm;2cm" ' funktioniert

    mein:
    .Object.AddItem
    .Object.List(.ListCount - 1, 0) = CStr(j)
    .Object.List(.ListCount - 1, 1) = GroessenArray(7).Vals(j).Value
    läuft bei diesen ActiveX-Comboboxen auf den Fehler 438 "Objekt unterstützt diese Eigenschaft od. Methode nicht"; bei "AddItem" einen String mit Listentrenner wie ";" (siehe .ColumnWidths) oder vbTab oder so anzubieten, klappte auch nicht. - Was tun?
    Danke fuer Eure Mühen um Antwort!

    :)
     
    DataSponge1, 14. Oktober 2012
    #1
  2. Beverly
    Beverly Erfahrener User
    Hi,

    vor .ListCount fehlt noch .Object


    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen grusz.gif
     
    Beverly, 16. Oktober 2012
    #2
  3. oh,

    so simpel also, und ich hätte es eigtl. auch selbst sehen sollen.
    Sorry, manchmal sieht man den Wald vor lauter Bäumen nicht.

    Danke für die Hilfe und schnelle Antwort!

    Gruß!
    Udo.
     
    DataSponge1, 16. Oktober 2012
    #3
  4. mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen

    Hallo,
    habe ein ähnliches Problem.

    Dim arrET() As String, sIndex As Integer, i As Integer, Anzahl As Integer
    Anzahl = Sheets("Kurzbeschreibung").Range("B10") 'Anzahl Einzelteile holen
    For i = 4 To Anzahl
    sIndex = sIndex + 1
    ReDim Preserve arrET(sIndex)
    arrET(sIndex) = Range("C" & i)
    Next i

    '''''''das funktioniert soweit noch.

    Dim oleCombo As OLEObject
    Dim Anzahl2 As Integer, e As Integer, iCB As Integer, inhalt As String
    inhalt = "Stückliste!C4:C" 'Range für Inhalt der Comboboxen (CBox1...i)
    Sheets("Montagevorranggraph").Activate

    For e = 1 To Anzahl2 'Comboboxen erstellen und befüllen
    Set oleCombo = ActiveSheet.OLEObjects.Add(classtype:="Forms.ComboBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=1, Top:=1, Width:=1, Height:=1)
    oleCombo.LinkedCell = "H" & 5 + e 'hier den ausgewählten Wert in eine LinkedCell schreiben, wird für Shapes nachher als Übergabewert benötigt!
    oleCombo.Left = Sheets("Montagevorranggraph").Range("B" & 11 + e).Left
    oleCombo.Top = Sheets("Montagevorranggraph").Range("B5").Top + ((e - 1) * Sheets("Montagevorranggraph").Range("B5").Height / 2)
    oleCombo.Height = Sheets("Montagevorranggraph").Range("B5").Height / 2
    oleCombo.Width = Sheets("Montagevorranggraph").Range("B2").Width
    oleCombo.Name = "CBox" & e

    Next e

    For iCB = 1 To Anzahl2

    '''das hier geht ohne probleme
    ActiveSheet.OLEObjects("CBox" & iCB).ListFillRange = inhalt & i / 2 + 4 'CBoxen befüllen mit Abkürzungen aus "Stückliste" i/2 wegen dem i*2 oben. +4 weil erst ab Zeile 4


    'aber den Array direkt in die Comboboxen schreiben geht nicht. "Typen unverträglich"
    'ActiveSheet.OLEObjects("CBox" & iCB).ListFillRange = arrET

    Next iCB

    könnt ihr mir sagen wie ich mein Array-Inhalt in die Comboboxen bekomme? Die Idee war, wenn in einer Combobox (CBox1) etwas ausgewählt wird, soll das aus CBox2, 3, 4,... rausfliegen. Danach kommt dann dafür ein neuer Eintrag in alle folgenden Comboboxen.
    Hoffe das ist halbwegs verständlich.
    Vielen Dank schonmal.
    Gruß
    Bernd
     
    derbernd, 8. Januar 2013
    #4
  5. Beverly
    Beverly Erfahrener User
    Hi Bernd,

    ListFillRange erwartet einen Zellbereich. Das Array ist aber kein Zellbereich sondern enthält Werte - verwende also einfach nur List, um der Liste der ComboBox das Array zuzuweisen. Nach diesem Prinzip:

    Code:
    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen grusz.gif
     
    Beverly, 8. Januar 2013
    #5
  6. hi,
    danke. Das hatte ich auch schon ergoogelt, dann kommt Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.
    Weil es eine OLE Combobox ist? Ich muss aber dynamisch Comboboxen erstellen, also anhand einer vorher eingegeben Zahl.

    Hat noch jemand eine Idee?

    Gruß
     
    derbernd, 8. Januar 2013
    #6
  7. Beverly
    Beverly Erfahrener User
    Hi,

    weshalb weist du das Array nicht gleich beim Erstellen der ComboBoxen zu - nach dem Prinzip wie ich es genannt habe?


    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen grusz.gif
     
    Beverly, 8. Januar 2013
    #7
  8. mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen

    hi, sorry ich steh aufm Schlauch.

    meinst du so?

    For e = 1 To Anzahl2 'Comboboxen erstellen und mit Abkürzungen befüllen
    Set oleCombo = ActiveSheet.OLEObjects.Add(classtype:="Forms.ComboBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=1, Top:=1, Width:=1, Height:=1)
    oleCombo.LinkedCell = "H" & 5 + e 'hier den ausgewählten Wert in eine LinkedCell schreiben, wird für Shapes nachher als Übergabewert benötigt!
    oleCombo.Left = Sheets("Montagevorranggraph").Range("B" & 11 + e).Left
    oleCombo.Top = Sheets("Montagevorranggraph").Range("B5").Top + ((e - 1) * Sheets("Montagevorranggraph").Range("B5").Height / 2)
    oleCombo.Height = Sheets("Montagevorranggraph").Range("B5").Height / 2
    oleCombo.Width = Sheets("Montagevorranggraph").Range("B2").Width
    oleCombo.Name = "CBox" & e
    ActiveSheet.OLEObjects("CBox" & e).List = arrET

    Next e

    geht leider auch nicht.

    oder muss ich da ähnlich wie DataSponge1 es oben gemacht hat, herangehen?
     
    derbernd, 8. Januar 2013
    #8
  9. Beverly
    Beverly Erfahrener User
    weshalb am Ende plötzlich Verwendung ActiveSheet.OLEObjects, wenn du vorher beim Zuweisen alles andere auf oleCombo beziehst?!


    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen grusz.gif
     
    Beverly, 8. Januar 2013
    #9
  10. hallo,

    ok so funktioniert es dann. aaaaaber

    For e = 1 To Anzahl2 'Comboboxen erstellen und mit Abkürzungen befüllen
    Set oleCombo = ActiveSheet.OLEObjects.Add(classtype:="Forms.ComboBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=1, Top:=1, Width:=1, Height:=1)
    oleCombo.LinkedCell = "H" & 5 + e 'hier den ausgewählten Wert in eine LinkedCell schreiben, wird für Shapes nachher als Übergabewert benötigt!
    oleCombo.Left = Sheets("Montagevorranggraph").Range("B" & 11 + e).Left
    oleCombo.Top = Sheets("Montagevorranggraph").Range("B5").Top + ((e - 1) * Sheets("Montagevorranggraph").Range("B5").Height / 2)
    oleCombo.Height = Sheets("Montagevorranggraph").Range("B5").Height / 2
    oleCombo.Width = Sheets("Montagevorranggraph").Range("B2").Width
    oleCombo.Name = "CBox" & e

    oleCombmit OLEObjects.Add erstellte ComboBox 2Spaltig füllen o_Object.List = arrET 'arrET in Comboboxen füllen
    ' oleCombo.Change = "helloWorld"

    Next e

    wie kann ich ein change event mit den CBoxen machen? also "ComboBox1_Change()" nur eben für meine OLEObjects CBoxen...
    deshalb hatte ich darunter noch die extra schleife, die alle CBoxen durchgeht und den inhalt aktualisiert, sobald CBox1 "changed" wurde.
    habe schon überlegt, das ganz von meine Stückliste in eine ausgeblendete Range zu schreiben (ohne array), dort irgendwie aufwendig zu ändern, und dann von dort aus mit ListFillRange in die CBoxen einlesen, weil damit geänderte Inhalte in der Range ja sofort in den CBoxen aktualisiert werden.
    das wichtige ist eben, das sich der inhalt aller CBoxen ab CBox2 ändert, sobald in CBox1 etwas ausgewählt wird. und CBox2 ändert inhalt ab CBox3 usw...
     
    derbernd, 9. Januar 2013
    #10
  11. Beverly
    Beverly Erfahrener User
    Hi,

    weshalb musst du im Code für das ERSTELLEN der ComboBoxen etwas in einer Schleife zuweisen, wenn du das doch (deiner Aussage nach) nur für das Change-Ereignis brauchst - diese Logik, entzieht sich meinem Verständnis... *wink.gif*

    Mal eine generelle Frage: weshalb erstellst du überhaupt die ComboBoxen zur Laufzeit? Kann die Anzahl an ComboBoxen unterschiedlich sein oder ist die Anzahl immer gleich und nur der Inhalt soll sich in Abhängigkeit von der Auswahl unterscheiden?


    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen grusz.gif
     
    Beverly, 9. Januar 2013
    #11
  12. hi,
    bin ein ziemlich blutiger Anfänger wie man sicherlich merkt. Habe mich in den letzen Wochen von Null in vba eingearbeitet, dank so hilfsbereiten Leuten in sämtlichen Foren ist das möglich *wink.gif*

    Die Befüllung muss eigentlich nicht beim Erstellen mit drin sein, kam mir nur praktisch vor. Könnte aber auch mit Worksheet_Activate oder mit extra Button bzw. Sub gemacht werden.

    Anzahl Comboboxen ist dynamisch, Inhalt ebenfalls.
    Deshalb OLEObjects, weil ComboBoxen abhängig einer eingegebenen Zahl (Anzahl Einzelteile) erstellt werden sollen.

    Diese werden in einer Stückliste erfasst, mit Abkürzungen versehen, und die Abkürzungen sollen in den ComboBoxen landen.

    Wird nun ein Einzelteil ausgewählt (in CBox1) soll es darin stehen bleiben, wird nachher noch übergeben. In allen folgenden CBoxen soll dieses ausgewählte Einzelteil dann NICHTMEHR erscheinen, da es ja schon verarbeitet wurde.
    Aus dem (bzw. den zwei) verarbeiteten Einzelteil(en) entsteht ein Neues. Die Bezeichnung dieses neuen Teils wird von Hand in eine Zelle geschrieben.
    Dieses neue Teil soll nun in CBox3 bis CBoxi hinzugefügt werden, und sobald es wieder ausgewählt wurde, aus allen folgenden ComboBoxen wieder raus.

    Habe allerdings schon überlegt das ganze per UserForm mit zwei Comboboxen (eine mit den Einzelteilen, die andere mit neu enstandenen Teilen) zu machen. Doppelklick Überwachung mit Intersect auf eine Spalte (habe das schon verwendet, komme ich also mit klar *Smilie)
    Das wird mich bestimmt vor neue Probleme stellen, aber werde es in den nächsten Tagen mal versuchen. Außer ihr habt mir eine viel bessere Idee.

    Gruß
     
    derbernd, 9. Januar 2013
    #12
  13. Beverly
    Beverly Erfahrener User

    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen

    Hi,

    gibt es eine feststehende maximale Anzahl an Einzelteilen? Wenn ja, dann könntest du alle ComboBoxen mit dem zugehörigen Code bereits erstellen, ausblenden und nur die notwendige Anzahl einblenden.

    Das Arbeiten mit zur Laufzeit erstellten ActiveX-Steuerelementen (gleichgültig ob im Tabellenblatt oder auf dem UserForm) ist nicht so ganz ohne, da du ja für jede ComboBox ein Change-Ereignis benutzen willst - das geht nur über Klassenprogrammierung und das ist schon die höhere Mathematik in der Programmierung von Steuerelementen.


    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen grusz.gif
     
    Beverly, 9. Januar 2013
    #13
  14. hallo,
    ja man könnte das auf 40 begrenzen, habe auch schon überlegt alle zu erstellen und nur einzublenden. also das hieße ja dann, alle manuell hinzufügen, und onclick subs schreiben. und eben entsprechend visible setzen und befüllen.
    gruß
     
    derbernd, 10. Januar 2013
    #14
  15. Beverly
    Beverly Erfahrener User
    Hi,

    erstellen kannst du die ComboBoxen alle ja einmalig per VBA - das musst du nicht von Hand machen. *wink.gif*


    mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen grusz.gif
     
    Beverly, 10. Januar 2013
    #15
Thema:

mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen

Die Seite wird geladen...
  1. mit OLEObjects.Add erstellte ComboBox 2Spaltig füllen - Similar Threads - OLEObjects Add erstellte

  2. Falscher / übrig gebliebener Add-in Oulook Eintrag

    in Microsoft Outlook Hilfe
    Falscher / übrig gebliebener Add-in Oulook Eintrag: Hallo, kann man aus Outlook 2010 angeblich vorhandene Add-ins überhaupt noch entfernen, wenn geleugnet wird, dass man ohnedies Systemverwalter ist? Auf einem Rechner konnte ich durch...
  3. Office-Add-in Calendar

    in Microsoft Excel Hilfe
    Office-Add-in Calendar: Hallo, ich habe eine grosse Tabelle. In Zeile 1 Habe ich die Spaltennamen eingetragen. Nun muss ich sehr große Datenmengen mit Datum nachtragen. Ich habe unter Office-Add-in das Add in "Mini...
  4. Add in Legacy outlook

    in Microsoft Outlook Hilfe
    Add in Legacy outlook: Moin zusammen, kurze Frage. Ich nutze Outlook für mac. Dabei habe ich noch den Legacy Modus. Kann man irgendwo in dem Legacy Modus Add ins einstellen? Dazu finde ich nichts… Ich danke schon mal...
  5. Teams - Outlook Add-In lädt nicht mit

    in Microsoft Teams Hilfe
    Teams - Outlook Add-In lädt nicht mit: Sehr geehrtes Support Team, ich habe bereits 2 User im Unternehmen, bei denen Teams einwandfrei funktioniert, aber das Teams Add-In im Outlook (Outlook Professional Plus 2016 - on premise) nicht...
  6. Teams Add In in Outlook 365

    in Microsoft Teams Hilfe
    Teams Add In in Outlook 365: Guten Tag, ich habe Office 365, nutze meist die Desktopversion. Bis vor kurzem hatte ich Teams als Add-In installiert und konnte aus Outlook heraus Besprechungen für Teams erstellen. In Outlook...
  7. TEAMS meeting add-in in outlook 2019 (microsoft office professional plus 2019) nicht ...

    in Microsoft Teams Hilfe
    TEAMS meeting add-in in outlook 2019 (microsoft office professional plus 2019) nicht ...: Guten Morgen, ich habe bisher leider erfolglos versucht in der microsoft community eine Lösung für unser Problem zu finden. Wir möchten TEAMS Meetings über die Integration in MS outlook 2019...
  8. Add in Teamsbesprechung in outlook 2013

    in Microsoft Teams Hilfe
    Add in Teamsbesprechung in outlook 2013: Ich veerwende outloo 2013 und habe zwar das Add-in in der Menüleiste, bekomme aber die Fehlermeldung "Fehler beim Planen eines Team-Mettings... ". Wie kann ich das beheben?...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden