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

Excel ActiveX Kombinationsfeld über VBA füllen

Forumthread: Excel ActiveX Kombinationsfeld über VBA füllen

Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 19:23:19
SteinApfel
Hallo liebe Community,
ich bin neu hier, habe aber schon einiges in den letzten Tagen hier gelesen und bisher hat es mir auch weitergeholfen.
Nun habe ich ein Problem mit Excel 2016 mit Makros und einem Steuerelement ActiveX Kombinationsfeld.
Ich habe dieses Element in meine Tabelle1 (Umbenannt in "Voreinstellungen") eingefügt und würde jetzt gerne nur über VBA dieses Element mit Daten füllen.
Ein Event "Initialize" gibt es leider nicht dabei.
Auslesen aus Zellen möchte ich vermeiden.
Ich dachte an einem
Public Sub .... ()
With DrpSystem
.additem="ESG"
.additem="VSG"
end with
End Sub
allerdings weiß ich nicht wo ich diesen "public sub" einfügen sollte. Die Möglichkeiten die ich bisher ausgetestet habe führten immer zu Runtime Errors oder Fehlern, dass es nicht ausgeführt werden kann.
Ich bitte um Hilfe!
Vielen Dank :)
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 19:27:15
Hajo_Zi
das Element hat also den Namen "DrpSystem" es fehlt die Tabelle davor oder hast Du den Code unter der Tabelle? Das konnte ich nicht sehen.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 19:32:08
SteinApfel
Danke für die schnelle Antwort.
Ich habe 1 Tabellenblatt namens "Voreinstellungen" auf diesem habe ich das Element gelegt mit dem Namen "DrpSystem".
Das ist leider auch, glaube ich, meine Frage. (Entschuldige, falls ich deine Frage falsch verstehen sollte)
Ich weiß nicht wo ich den Code schreiben soll geschweige unter welchem Event.
Ich habe "Diese Arbeitsmappe" und "Tabelle1 (Voreinstellungen)" die mir in VBA angezeigt werden.
Die Arbeitsmappe sollte für "Public Sub's" benutzt werden und Tabelle1(Voreinstellungen) für "Private Sub's". Oder habe ich da schon einen Denkfehler?
Ich bin leider Neuling auf dem Gebiet und versuche mich aktuell an einem Projekt.
Anzeige
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 19:46:38
Daniel
HI
das Initialize-Event gibt es nur für Userforms.
da musst du schauen, welche Events es gibt (auf Workbook-, Worksheet und auf Steuerelement-ebene) und welche für deinen Anwendungsfall sinnvoll sind.
wenn sich die Daten, mit denen das Kombinantionsfeld gefüllt werden soll, ständig änderen und dieses immer die aktuellsten Daten enthalten soll, könnest du das GotFocus- oder das DropButtonClick-Event des Kombinantiosfeldes verwenden. Dann werden die Inhalte bei jedem Anklicken neu eingelesen.
Verändern sich die Inhalte jedoch nicht, dann könntest du das Workbook_Open-Event im Modul "DieseArbeitsmappe" verwenden, um den Code zum Befüllen unterzubringen.
Dann würde die Combobox beim Öffnen der Datei mit den Inhalten befüllt (das würde dann am ehesten dem Initialize-Event der Userform entsprechen)
Dort musst du dann allerdings den Tabellenblattnamen voranstellen, damit VBA weiß, auf welchem Tabellenblatt sich die Combobox befindet:
Modul DieseArbeitsmappe
Private Sub Workbook_Open()
With Tabelle1.DrpSystem
.additem="ESG"
.additem="VSG"
end with
End Sub
Gruß Daniel
Anzeige
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 20:04:25
SteinApfel
Vielen Dank auch dir für die schnelle Antwort.
Also, ich habe folgendes gemacht:
1. Dein Code kopiert und eingefügt in die Arbeitsmappe.
Nachdem ich Play gedrückt habe kam nur, dass eine Zuweisung von Konstanten nicht zulässig sei.
2. Statt "Tabelle1" habe ich "Voreinstellungen" geschrieben (da ich dachte, dass VBA den geänderten Namen erkennt), dies wiederum erkennt es als nicht definierte Variable.
Beide Varianten laufen nicht durch.
Und ja, die Eingabe soll dauerhaft sein, an dem Steuerelement soll sich nichts ändern.
Daher klang dein Vorschlag super, nur leider will Excel das bei mir so nicht umsetzen. -.-
Anzeige
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 20:20:39
Daniel
naja ersten ist:
"ich habe deinen Vorschlag kopiert" immer ganz schlecht, das wissen wir doch spätestens seit Guttenberg.
Besser ist immer Lesen, verstehen, selber programmieren und dabei dann auch auch die Umstände berücksichtigen, die ich nicht kennen kann, weil ich deine Datei nicht prüfe.
ich werde z.B. bei sowas auch nie darauf achten, ob ich jetzt einen Tippfehler z.B. bei der Benennung des Steuerelements habe, weil erstens gar nicht weiß, wie dein Steuerelement in deiner Datei bezeichnet ist und zweites, weil ich davon ausgehe, dass du das selber richtig schreiben kannst, weil du weißt ja, wie es heißt.
und naja, wenn der Fehler passiert, dann interessiert nicht mein Code, sondern dein Code in deiner Datei.
Außerdem ist die Formulierung "eingefügt in die Arbeitsmappe" nicht präzise genug.
die Arbeitsmappe ist die ganze Exceldatei und es gibt viele Stellen, an denen du den Code einfügen kannst. Ich meinte präzise in das Modul "DieseArbeitsmappe".
Weiterhin ist es bei Eventmakros immer wichtig, dass die Kopfzeile genauso geschrieben ist, wie VBA es erfordert.
Daher sollte man so ein Eventmakro immer selbst erstellen.
Hierzu wählt man im VBA-Editor das entsprechende Modul aus, klickt dann in linken Combobox über dem Codefenster das Objekt an, zu dem man das Eventmakro erstellen möchte und wählt dann in der rechten Combobox das Event aus (es werden dort nur die zum Objekt passenden Events angeboten)
VBA erstellt dann im Codefenster das Makro dazu mit der richtigen Schreibweise mit Kopf und Endzeile und du kannst dazwischen den notwendigen Code einfügen.
Gruß Daniel
Anzeige
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 20:33:50
SteinApfel
Da gebe ich dir recht, an sich kopiere ich auch nicht einfach so. Allerdings war alles richtig geschrieben und ich konnte es "einfach so" kopieren und einfügen.
Es soll auch eine globale Einstellung sein, also eine dauerhafte ohne Abhängigkeit von irgendwelchen Tabellen. Die drei untenstehenden Begriffe sollen in das Steuerelement (Combobox) mit dem Namen "DrpSystem" hinzugefügt werden.
Private Sub Workbook_Open()
With Tabelle1.DrpSystem
.AddItem = "ESG"
.AddItem = "VSG"
.AddItem = "Einfachverglasung"
End With
End Sub
in VBA stehen alle Tabellen, die Tabelle in der das Element eingefügt wurde heißt dort links in der Auflistung "Tabelle1 (Voreinstellungen)".
Meine beiden Checkboxen kann ich auch ansteuern darüber und das funktioniert auch ohne Probleme, nur das Dropdownmenü nicht.
Anzeige
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 20:41:26
Daniel
achso, da hatte ich jetzt nicht drauf geachtet:
.AddItem ist keine Eigenschaft, der man einen bestimmten Wert zuweist.
.AddItem ist ein Befehl, daher kein Gleichheitszeichen zwischen .AddItem und dem Wert, nur das Leerzeichen.
Gruß Daniel
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 20:52:58
SteinApfel
:D Aber super, jetzt klappt es wie ich es wollte.
Vielen Dank und ich wünsche noch einen angenehmen Abend.
Es ist gut möglich, dass ich die nächsten Wochen des öfteren hier was erfragen werde, hoffe es funktioniert dann auch so gut. Ich versuche auch das Problem so verständlich wie möglich zu formulieren. :)
Anzeige
AW: Excel ActiveX Kombinationsfeld über VBA füllen
03.10.2018 20:44:18
onur
Private Sub Workbook_Open() startet ja auch nur einmal, und zwar, wenn du die Datei neu gestartet hast.
;
Anzeige
Anzeige

Infobox / Tutorial

Excel ActiveX Kombinationsfeld über VBA füllen


Schritt-für-Schritt-Anleitung

Um ein Excel ActiveX Kombinationsfeld über VBA zu füllen, gehe folgendermaßen vor:

  1. Öffne Excel und erstelle ein neues Arbeitsblatt. Füge ein ActiveX Kombinationsfeld (Combobox) hinzu. Benenne es beispielsweise "DrpSystem".

  2. Öffne den VBA-Editor, indem Du ALT + F11 drückst.

  3. Im VBA-Editor findest Du im Projektfenster Deine Arbeitsmappe. Suche das Modul "DieseArbeitsmappe".

  4. Füge den folgenden Code in das Modul "DieseArbeitsmappe" ein:

    Private Sub Workbook_Open()
        With Tabelle1.DrpSystem
            .AddItem "ESG"
            .AddItem "VSG"
            .AddItem "Einfachverglasung"
        End With
    End Sub
  5. Schließe den VBA-Editor und speichere die Datei als Makro-fähige Arbeitsmappe (*.xlsm).

  6. Schließe und öffne die Arbeitsmappe erneut. Das Kombinationsfeld sollte nun gefüllt sein.


Häufige Fehler und Lösungen

  • Runtime Error: Achte darauf, dass Du den Namen des Kombinationsfeldes korrekt geschrieben hast. Ein Tippfehler kann diesen Fehler verursachen.
  • Nicht definierte Variable: Wenn Du "Tabelle1" durch einen anderen Namen ersetzt, stelle sicher, dass Du den tatsächlichen Namen des Arbeitsblattes verwendest. Excel erkennt nicht automatisch umbenannte Tabellen in VBA.
  • Zuweisung von Konstanten nicht zulässig: Stelle sicher, dass Du das Gleichheitszeichen (=) nicht zwischen .AddItem und dem Wert verwendest. Der richtige Befehl lautet .AddItem "Wert".

Alternative Methoden

Falls Du die Daten im Kombinationsfeld Excel dynamisch füllen möchtest, kannst Du auch andere Events verwenden:

  • DropButtonClick: Dieses Event wird ausgelöst, wenn der Benutzer auf das Kombinationsfeld klickt. Du kannst dort den Code zum Füllen der Combobox hinzufügen.

    Private Sub DrpSystem_DropButtonClick()
        With DrpSystem
            .Clear ' Vorherige Einträge entfernen
            .AddItem "ESG"
            .AddItem "VSG"
            .AddItem "Einfachverglasung"
        End With
    End Sub
  • GotFocus: Fülle das Kombinationsfeld jedes Mal, wenn es den Fokus erhält.


Praktische Beispiele

Hier sind einige Beispiele, wie Du das Excel VBA ActiveX Kombinationsfeld anpassen kannst:

  1. Füllen mit Daten aus einem Bereich:

    Private Sub Workbook_Open()
        Dim cell As Range
        With Tabelle1.DrpSystem
            .Clear
            For Each cell In Tabelle1.Range("A1:A10") ' Beispielbereich
                If cell.Value <> "" Then
                    .AddItem cell.Value
                End If
            Next cell
        End With
    End Sub
  2. Füllen mit einer Liste:

    Private Sub Workbook_Open()
        Dim items As Variant
        items = Array("ESG", "VSG", "Einfachverglasung")
        With Tabelle1.DrpSystem
            .Clear
            Dim i As Integer
            For i = LBound(items) To UBound(items)
                .AddItem items(i)
            Next i
        End With
    End Sub

Tipps für Profis

  • Nutze Debug.Print in Deinen VBA-Codes, um den Status oder Zwischenergebnisse zu überprüfen.
  • Vermeide das Kopieren von Code ohne Verständnis. Es ist wichtig, den Code zu lesen und zu verstehen, um Anpassungen vornehmen zu können.
  • Halte den Code sauber und dokumentiert, so dass Du und andere leicht verstehen, was der Code bewirken soll.

FAQ: Häufige Fragen

1. Wie kann ich die Werte im Kombinationsfeld dynamisch aktualisieren?
Du kannst das DropButtonClick-Event oder das GotFocus-Event nutzen, um das Kombinationsfeld bei jedem Klick oder Fokuswechsel neu zu befüllen.

2. Welche Excel-Version benötige ich?
Das Beispiel in diesem Tutorial funktioniert mit Excel 2016 und späteren Versionen, die ActiveX-Steuerelemente unterstützen.

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