Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Name der aktuellen ComboBox ermitteln

Forumthread: Name der aktuellen ComboBox ermitteln

Name der aktuellen ComboBox ermitteln
28.02.2017 10:28:40
Kenneth
Moin liebe Profis!
Ich bin neu im Forum, habe hier aber schon sehr viel gelesen und sehr viel Hilfe erhalten!
Ich bin nicht ganz jungfräulich, was Excel und VBA angeht, aber wohl noch weit von einem Profi entfernt :-D
Also zu meinem Problem:
Ich habe ein Excel-Sheet in welchem in mehreren (zufällig ausgewählten) Zeilen untereinander ComboBoxen sind. Diese füge ich Über einen CommandButton und eine Routine ein. Sie besitzen alle die gleiche Art von Bezeichnung, nämlich ("ComboBox_" & Zeile) wobei Zeile die Zeile ist, in der die CB drin steht.
In einer zweiten Routine möchte ich nun bei der Auswahl eines anderen Wertes in den CBs einen Wert in einer von den CBs abhängigen Zelle ändern. Jede CB hat eine abhängige Zelle in der gleichen Zeile.
Dafür möchte ich bei Klicken auf die CB eine Routine starten, die den Namen der aktuellen ComboBox herausfindet, die soeben geändert wurde. Und da hört mein Wissen leider auf, und Google kann mir da wohl auch nicht helfen...
Also: Wie ordne ich einer Variablen den Namen der veränderten CB zu?
Vielen Dank schon einmal im Vorraus für eure Zeit und Mühe!
Gruß,
Kenneth
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Name der aktuellen ComboBox ermitteln
28.02.2017 10:36:59
Rainer
Hallo Kenneth,
bin auch ein blutiger Stümper was VBA betrifft, aber sowas habe ich in dieser Form schon gemacht:
Doppelklick auf die Combobox und dann folgender Code:

Private Sub ComboBox1_Change()
ChangedComboBox = 1
' Hier Link zum anderen Sub Programm
' Variable "ChangedComboBox" global definieren nicht vergessen
End Sub
Gruß,
Rainer
Anzeige
AW: Name der aktuellen ComboBox ermitteln
28.02.2017 12:30:22
Kenneth
Danke Rainer, aber ich glaube das hilft mir noch nicht.
Die ComboBox wird automatisch über einen CommandButton erstellt und bekommt automatisch den Namen ("ComboBox_" & Zeile) zugewiesen, gleichzeitig wird beim Erstellen der ComboBox die Eigenschaft .OnAction = "DropdownChange" zugewiesen.
Diese EINE Prozedur "DropdownChange" soll für ALLE ComboBoxen gelten, d.h. egal welche CB ich ändere, es wird IMMER die EINE Prozedur aufgerufen.
Jetzt möchte ich in der Prozedur DropdownChange () den Namen der ComboBox ermitteln, deren Änderung zum Aufruf der Prozedur geführt hat, um die betreffende Zeile zu ermitteln.
Gruß,
Kenneth
Anzeige
AW: Name der aktuellen ComboBox ermitteln
28.02.2017 13:23:52
Kenneth
So jetzt habe ich die Lösung selbst gefunden:
Application.Caller gibt den Namen der gerade geänderten ComboBox aus!, also z.B.:

Sub CurrentCombo()
MsgBox Application.Caller
End Sub

AW: Name der aktuellen ComboBox ermitteln
28.02.2017 13:23:52
Kenneth
So jetzt habe ich die Lösung selbst gefunden:
Application.Caller gibt den Namen der gerade geänderten ComboBox aus!, also z.B.:

Sub CurrentCombo()
MsgBox Application.Caller
End Sub

Anzeige
AW: Name der aktuellen ComboBox ermitteln
01.03.2017 04:41:06
Rainer
Hallo Kenneth,
ich habe es versucht mit:

Private Sub ComboBox1_Change()
MsgBox Application.Caller
End Sub
aber ich bekomme nur "Fehler 2023" zurück?
Gruß,
Rainer
AW: Name der aktuellen ComboBox ermitteln
01.03.2017 12:48:28
Kenneth
Moin Rainer,
Also wenn ich deine Sub einfüge und der ComboBox_B17 zuweise, bekomme ich folgende meldung:
Userbild
Allerdings habe ich das "Private (Sub)" gestrichen, damit ich sie der ComboBox zuweisen konnte.
Gruß,
Kenneth
Anzeige
AW: Name der aktuellen ComboBox ermitteln
01.03.2017 14:19:36
Mullit
Hallo,
zwei Paar Schuhe: Rainer hat ne ActiveX-ComboBox am Start , da geht's nicht mit der Application.Caller-Eigenschaft, Kenneth eine Formular-Box...
Übrigens könntest Du den Private-Modifier auch stehen lassen und die Prozedur manuell zuweisen, geht dann auch..
Gruß, Mullit
Anzeige
AW: Name der aktuellen ComboBox ermitteln
02.03.2017 02:56:17
Rainer
Hallo Mullit,
kennst du einen Weg, der auch für die ActiveX-ComboBox funktionieren würde?
Danke und Gruß,
Rainer
AW: Name der aktuellen ComboBox ermitteln
02.03.2017 11:26:27
Mullit
Hallo,
hmm ja mit ActiveX-Objekten im TabBlatt ist das schwieriger, da gibt's keine ActiveControl-Eigenschaft analog zur UserForm.
Wenn es Dir reicht einmalig die Prozedur auszulagern, übergibst Du das Objekt:
Option Explicit
Private Sub ComboBox1_Change()
Call prcComboBox(probjComboBox:=ComboBox1)
End Sub
Private Sub ComboBox2_Change()
Call prcComboBox(probjComboBox:=ComboBox2)
End Sub
Private Sub ComboBox3_Change()
Call prcComboBox(probjComboBox:=ComboBox3)
End Sub
Private Sub ComboBox4_Change()
Call prcComboBox(probjComboBox:=ComboBox4)
End Sub

Dann der Aufruf im Standardmodul:
Option Explicit
Public Sub prcComboBox(ByRef probjComboBox As MSForms.ComboBox)
Call MsgBox(probjComboBox.Name)
End Sub

Andernfalls bliebe Dir nur die Klassenprogrammierung mit einer Automatisierungsklasse, in der Du das Change-Event abgreifst.
Gruß, Mullit
Anzeige
AW: Name der aktuellen ComboBox ermitteln
03.03.2017 05:48:41
Rainer
Hallo Mullit,
danke für deine Erklärungen.
Rainer
;
Anzeige
Anzeige

Infobox / Tutorial

Aktuellen Namen der ComboBox in Excel VBA ermitteln


Schritt-für-Schritt-Anleitung

Um den Namen der aktuellen ComboBox in Excel VBA zu ermitteln, kannst Du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Erstelle eine ComboBox: Füge in Deinem Excel-Sheet eine ComboBox hinzu. Dies kann entweder über das Entwicklermenü oder durch das Hinzufügen eines ActiveX-Steuerelements geschehen.

  2. Zuweisen des Namens: Stelle sicher, dass die ComboBox den Namen in der Form ComboBox_<Zeile> hat, wie in Kenneths Beispiel: ComboBox_1, ComboBox_2, usw.

  3. Code für die ComboBox: Doppelklicke auf die ComboBox, um den Code-Editor zu öffnen. Füge den folgenden Code ein, um den Namen der currently geänderten ComboBox zu ermitteln:

    Private Sub ComboBox1_Change()
        MsgBox Application.Caller
    End Sub
  4. Allgemeine Prozedur verwenden: Wenn Du eine einzige Prozedur für alle ComboBoxen verwenden möchtest, kannst Du den OnAction-Parameter nutzen und die folgende Prozedur in ein Standardmodul einfügen:

    Sub DropdownChange()
        MsgBox Application.Caller
    End Sub
  5. Testen: Ändere den Wert in Deiner ComboBox und beobachte, dass der Name der ComboBox in einer MessageBox angezeigt wird.


Häufige Fehler und Lösungen

  • Fehler 2023: Wenn Du beim Aufruf von Application.Caller den Fehler 2023 erhältst, stelle sicher, dass die ComboBox korrekt mit der Change-Prozedur verbunden ist. Überprüfe, ob Du den Private-Modifier entfernt hast, wenn Du die Prozedur manuell zugewiesen hast.

  • ActiveX vs. Formular-ComboBox: Beachte, dass Application.Caller nur für Formular-ComboBoxen funktioniert. Bei ActiveX-ComboBoxen musst Du die Änderung über das Change-Ereignis abfangen, wie in Mullits Beispiel beschrieben.


Alternative Methoden

Wenn Du mit ActiveX-ComboBoxen arbeitest, kannst Du den folgenden Ansatz verwenden:

  1. Prozedur für jede ComboBox: Erstelle eine Change-Prozedur für jede ComboBox und rufe eine Standardprozedur auf, um den Namen zu ermitteln.

    Private Sub ComboBox1_Change()
        Call prcComboBox(probjComboBox:=ComboBox1)
    End Sub
  2. Standardprozedur: Die Standardprozedur könnte so aussehen:

    Public Sub prcComboBox(ByRef probjComboBox As MSForms.ComboBox)
        MsgBox probjComboBox.Name
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, die Dir helfen können, den Umgang mit ComboBoxen in Excel VBA zu verstehen:

  • Beispiel 1: Wenn Du mehrere ComboBoxen in einem Formular hast und den Namen der gewählten ComboBox ermitteln möchtest, kannst Du eine ähnliche Struktur wie oben verwenden.

  • Beispiel 2: Du kannst auch den Wert einer Zelle basierend auf der Auswahl in der ComboBox ändern:

    Sub DropdownChange()
        Dim cell As Range
        Set cell = Range("A" & Mid(Application.Caller, 9)) ' Annahme: ComboBox_1 entspricht Zeile 1
        cell.Value = "Neuer Wert" ' Beispielwert
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Es ist eine gute Praxis, Option Explicit am Anfang Deiner Module hinzuzufügen, um sicherzustellen, dass alle Variablen deklariert sind.

  • Global Variablen: Wenn Du den Namen der ComboBox in mehreren Prozeduren verwenden möchtest, solltest Du die Variablen global definieren.

  • Fehlerbehandlung: Implementiere Fehlerbehandlung in Deinen Prozeduren, um unerwartete Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich den Namen der ComboBox bei einem Doppelklick ermitteln?
Verwende die Application.Caller-Methode innerhalb des Change-Ereignisses, um den Namen der ComboBox zu erhalten.

2. Funktioniert Application.Caller auch bei ActiveX-ComboBoxen?
Nein, Application.Caller funktioniert nicht bei ActiveX-ComboBoxen. Du musst das Change-Ereignis für jede ActiveX-ComboBox separat behandeln.

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