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

Forumthread: ComboBox mit Variable ansprechen

ComboBox mit Variable ansprechen
03.12.2016 21:30:58
Sigi
Hallo,
ich möchte über eine Variable ansprechen.
Danke.
Gruß
Sigi
Option Explicit
Dim sBox As String
Sub Probe()
UserForm1.Controls(sBox).Clear
End Sub
Private Sub ComboBox1_Change()
sBox = "ComboBox1"
Call Probe
End Sub
Private Sub ComboBox2_Change()
sBox = "ComboBox2"
Call Probe
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox mit Variable ansprechen
03.12.2016 21:51:20
Gerd
Hallo Sigi,
das geht. Nur solltest du aus dem Change-Ereignis heraus die Items des selben Steuererlementes nicht mit Clear weghauen.
Option Explicit
Dim sBox As String
Sub Probe()
MsgBox UserForm1.Controls(sBox).Name & vbLf & UserForm1.Controls(sBox)
End Sub
Private Sub ComboBox1_Change()
sBox = "ComboBox1"
Call Probe
End Sub
Private Sub ComboBox2_Change()
sBox = "ComboBox2"
Call Probe
End Sub
Gruß Gerd
Anzeige
AW: ComboBox mit Variable ansprechen
03.12.2016 22:01:30
Sigi
Hallo Gerd,
Danke für Deine Antwort,
ich habe leider einen Fehler geschrieben.
Es sollte ComboBox3 geleert werden, nur das funktioniert nicht.
Es muß lauten
Sub Probe()
UserForm1.Controls(sBox).Clear
End Sub
Private Sub ComboBox1_Change()
sBox = "ComboBox3"
Call Probe
End Sub
Private Sub ComboBox2_Change()
sBox = "ComboBox3"
Call Probe
End Sub

Anzeige
AW: ComboBox mit Variable ansprechen
04.12.2016 07:05:21
Matthias
Hallo
Sollte ComboBox3 mit Daten per RowSource gefüllt werden, kannst Du auch das probieren:
Option Explicit
Public sBox$
Sub Probe()
If sBox  "" Then
With UserForm1.Controls(sBox)
.RowSource = ""
.Text = ""
End With
End If
End Sub
https://www.herber.de/bbs/user/109868.xlsm
Gruß Matthias
Anzeige
AW: ComboBox mit Variable ansprechen
04.12.2016 08:44:29
Sigi
Hallo Matthias
Danke für Deine Antwort, doch leider funktioniert es nicht so wie ich es benötige.
Die ComboBox3 wird nicht über RowSource eingelesen sondern über
Private Sub UserForm_Initialize()
Dim ii As Long
With UserForm1.ComboBox3
For ii = 2 To Cells(Rows.Count, 3).End(xlUp).Row
.AddItem Cells(ii, 3)
Next ii
End With
End Sub

Sub Probe()
If sBox "" Then
With UserForm1.Controls(sBox)
.Clear
Dann kommt ein Makro, dass die ComboBox neu einliest, je nachdem welche Box angesprochen wird
End With
End If
End Sub
Sinn und Zewck ist es, dass ich ca. 40 ComboBoxen in mehreren MultiPages habe, welche immer das
gleiche Makro benötigen.
Hier ein Muster da funtioniert es
Es git eine Haupt Form = UFStart
UFTextNeu = eine eigene Form
Die ComboBox cboKD01 wird mit Anreden eingelesen
Wenn ListIndex = 0 Dann wird UFTextNeu augerufen.
Diese hat eine Textbox UFTextNeu.txtDataNeu
Hier wird eine neue Anrede eingetragen
Ist der Eintrag nicht vorhandenwird dieser in die Tabelle (P) eigenes Workbook.Sheets
Die Einträge in ComboBox "cboKD01" werden gelöscht und neu eingelesen.
Private Sub cboKD01_Change()
With UFStart  'Rem HauptForm
If .cboKD01.Value = "" Then Exit Sub
If .cboKD01.ListIndex = 0 Then
sDataNeu = "T_ANREDE"
strBoxDataNeu = "cboKD01"
sTextNeu1 = "Anredetext hinzufügen!"
sTextNeu2 = "Anredetext löschen?"
Application.Run "Cbo_Texte_Aendern"
End If
End Sub
Sub Cbo_Texte_Aendern()
Dim lSp As Long
Set WkbD = Workbooks(sD)
Set WksP = WkbD.Worksheets(P)
With UFTextNeu
.cmdDataNeu.Locked = True
.cmdDataloeschen.Locked = True
.lblDataNeu.Caption = sTextNeu1
.lblDataLoeschen.Caption = sTextNeu2
.cboDataloeschen.Clear
End With
With WksP
lSp = .Rows(1).Find(what:=sDataNeu, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows).Column
UFTextNeu.cboDataloeschen.List = .Range(.Cells(3, lSp), .Cells(Rows.Count, lSp).End(xlUp)).Value
End With
UFTextNeu.Show
End Sub Rem UFTextNeu wird aufgerufen
Rem Text in UFTextNeu.txtDataNeu.Text
Private Sub cmdDataNeu_Click()
Dim lSp As Long
Set WkbD = Workbooks(sD)
Set WksP = WkbD.Worksheets(P)
With WksP
Rem Spalte suchen
lSp = .Rows(1).Find(what:=sDataNeu, LookIn:=xlValues, lookat:=xlWhole).Column
For ii = 2 To .Cells(Rows.Count, lSp).End(xlUp).Row + 1
If .Cells(ii, lSp) = UFTextNeu.txtDataNeu.Text Then 'Rem prüfen ob Text vorhanden ist
MsgBox "Text bereits vorhanden", vbExclamation, "Eingabe"
UFTextNeu.txtDataNeu.Text = ""
UFTextNeu.txtDataNeu.SetFocus
Exit Sub
End If
Next ii
.Cells(ii, lSp).Value = UFTextNeu.txtDataNeu.Text
'  Application.Run "P_sortieren"
End With
Rem ComboBox in UF löschen, neu einlesen und neuen Text anzeigen
UFStart.Controls(strBoxDataNeu).Clear
With WksP
lSp = .Rows(1).Find(what:=sDataNeu, LookIn:=xlValues, lookat:=xlWhole).Column
For ii = 2 To .Cells(Rows.Count, lSp).End(xlUp).Row
UFStart.Controls(strBoxDataNeu).AddItem .Cells(ii, lSp)
Next ii
End With
UFStart.Controls(strBoxDataNeu).Value = UFTextNeu.txtDataNeu.Text
UFTextNeu.txtDataNeu.Text = ""
sDataNeu = ""
strBoxDataNeu = ""
sTextNeu1 = ""
sTextNeu2 = ""
Unload UFTextNeu
End Sub
Hoffe Du kannst mir helfen.
Gruß
Sigi
Anzeige
AW: ComboBox mit Variable ansprechen
04.12.2016 09:12:15
Matthias
Hallo
Die ComboBox3 wird doch mit Clear korrekt gelöscht wenn Du sie mit AddItem füllst.
Funktioniert doch.
Gruß Matthias
AW: ComboBox mit Variable ansprechen
04.12.2016 09:36:41
Sigi
Hallo Matthias,
bis vorher nicht, habe Excel neu gestart und jetzt funktioniert es.
Danke!
Gruß
Sigi
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

ComboBox mit Variable ansprechen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Erstelle eine UserForm: Öffne den VBA-Editor (ALT + F11) und füge eine neue UserForm hinzu. Platziere zwei ComboBoxen (z.B. ComboBox1 und ComboBox2) und eine dritte ComboBox (ComboBox3), die später verwendet wird.

  2. Definiere die Variable: Im Code hinter der UserForm, definiere eine öffentliche Variable, um die ComboBox dynamisch anzusprechen.

    Option Explicit
    Dim sBox As String
  3. Implementiere das Change-Ereignis: Für jede ComboBox, die Du hast, implementiere das Change-Ereignis, um die Variable sBox entsprechend zu setzen.

    Private Sub ComboBox1_Change()
       sBox = "ComboBox1"
       Call Probe
    End Sub
    
    Private Sub ComboBox2_Change()
       sBox = "ComboBox2"
       Call Probe
    End Sub
  4. Schreibe die Probe-Funktion: In der Probe-Funktion kannst Du die ComboBox basierend auf der Variable sBox anwenden. Hier ein Beispiel, um die ComboBox zu leeren:

    Sub Probe()
       UserForm1.Controls(sBox).Clear
    End Sub
  5. Fülle die ComboBox: Um die ComboBox3 mit Daten zu füllen, kannst Du den UserForm_Initialize-Prozess benutzen:

    Private Sub UserForm_Initialize()
       Dim ii As Long
       With UserForm1.ComboBox3
           For ii = 2 To Cells(Rows.Count, 3).End(xlUp).Row
               .AddItem Cells(ii, 3)
           Next ii
       End With
    End Sub

Häufige Fehler und Lösungen

  • Fehler beim Leeren der ComboBox: Wenn die ComboBox nicht geleert wird, überprüfe, ob die richtige ComboBox angesprochen wird. Stelle sicher, dass sBox korrekt gesetzt ist und keine Leerzeichen oder Tippfehler enthält.

  • RowSource funktioniert nicht: Wenn Du versuchst, die ComboBox über RowSource zu füllen und es nicht funktioniert, stelle sicher, dass die Datenquelle korrekt definiert ist. Prüfe auch, ob die Zellen die richtigen Werte enthalten.


Alternative Methoden

Eine alternative Methode zum Leeren und Füllen von ComboBoxen ist die Verwendung von RowSource anstelle von AddItem. Dies kann die Handhabung von großen Datenmengen erleichtern.

With UserForm1.ComboBox3
    .RowSource = "A1:A10" ' Beispiel: Fülle ComboBox3 mit Werten von A1 bis A10
End With

Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Verwendung von mehreren ComboBoxen zeigt:

Private Sub ComboBox1_Change()
    sBox = "ComboBox3"
    Call Probe
End Sub

Private Sub ComboBox2_Change()
    ' Hier könnte eine andere Logik stehen, z.B. eine andere ComboBox leeren
    sBox = "ComboBox3"
    Call Probe
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Tippfehler in Variablennamen zu vermeiden und sorgt für eine bessere Lesbarkeit des Codes.

  • Nutze Error Handling: Implementiere Fehlerbehandlung, um Probleme beim Zugriff auf die ComboBoxen zu erkennen und zu lösen.

Sub Probe()
    On Error Resume Next
    UserForm1.Controls(sBox).Clear
    On Error GoTo 0 ' Fehlerbehandlung zurücksetzen
End Sub

FAQ: Häufige Fragen

1. Warum wird die ComboBox nicht geleert?
Stelle sicher, dass die Variable sBox korrekt gesetzt ist und dass die ComboBox existiert.

2. Wie kann ich mehrere ComboBoxen gleichzeitig leeren?
Du kannst eine Schleife verwenden, um alle ComboBoxen durchzugehen und sie zu leeren.

Sub ClearAllComboBoxes()
    Dim ctrl As Control
    For Each ctrl In UserForm1.Controls
        If TypeOf ctrl Is MSForms.ComboBox Then
            ctrl.Clear
        End If
    Next ctrl
End Sub

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