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

Mehrere Steuerelemente gleichzeit ansprechen

Forumthread: Mehrere Steuerelemente gleichzeit ansprechen

Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 11:43:21
Gast1008
Hallo zusammen,
wie kann ich in einem Tabellenblatt mehrere Steuerelemente gleichzeitig ansprechen und voneinander abhängig machen.
Habe folgenden Code, der leider nicht funktioniert:

Private Sub Test()
With Worksheet("Tabelle1")
If CLng(.ComboBox1) = 1
Or .OptionButton1 = True _
Or .OptionButton3 = True Then
Worksheets("Tabelle1").Range("A1") = "Text"
Else:
Worksheets("Alternativen").Range("A1") = ""
End If
End With
End Sub

Wenn ich jetzt hinter "Private Sub" statt "Test" "ComboBox1_Change" schreibe, spricht der Code zumindest die ComboBox1 an. Wenn ich diesen Befehl mit "OptionButton1_Click" ersetze, dann spricht er diese an usw. Die anderen werden jedoch nie mit einbezogen.
Wie schaffe ich es, dass ich alle Steuerelemente mit einbeziehen kann?
Danke im Voraus für eure Hilfe! :)
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 12:04:32
Daniel
Hi
ein automatisches Eventmakro, welches für mehrere Steuerelemente gleichzeitig gilt, gibt es nicht.
Jedes Steuerelement benötigt sein eigenes Makro.
Nur dann kann die Aktion auch automatisch bei allen drei Steuerelementen ausgeführt werden.
wenn bei allen drei Steuerelementen immer die gleiche Aktion ausgeführt werden soll, dann braucht man den Code trotzdem nicht 3x wiederholen.
dann schreibt man den Code in ein eigenes Makro und ruft dieses dann aus allen drei Eventmakros heraus auf:

Private Sub ComboBox1_Change()
Call Test
End Sub
Private Sub OptionButton1_Click()
Call Test
End Sub
Private Sub OptionButton3_Click()
Call Test
End Sub
Private Sub Test()
With Worksheet("Tabelle1")
If CLng(.ComboBox1) = 1
Or .OptionButton1 = True _
Or .OptionButton3 = True Then
Worksheets("Tabelle1").Range("A1") = "Text"
Else:
Worksheets("Alternativen").Range("A1") = ""
End If
End With
End Sub
Gruß Daniel
Anzeige
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 12:45:28
Gast1008
Danke für deine schnelle Antwort! :)
Funktioniert bei mir leider trotzdem noch nicht ganz. Jetzt erscheint in Bezug auf "private Sub Test" folgende Fehlermeldung :-/
"Fehler beim Kompilieren: Sub nicht definiert"
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 12:49:01
Werner
Hallo,
dann zeig doch mal deinen kompletten Code der Sub.
Gruß Werner
Anzeige
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 12:54:53
Gast1008
Der komplette Code sieht aktuell so aus:
Private Sub ComboBox3_Change()
Call Test
End Sub

Private Sub OptionButton1_Click()
Call Test
End Sub

Private Sub OptionButton3_Click()
Call Test
End Sub
Private Sub Test()
With Worksheet("Alternativen")
If CLng(.ComboBox3) > Worksheets("Stammdaten").Cells(.Range("O4") + 2, 28) _
Or .OptionButton1 = True _
Or .OptionButton3 = True Then
Worksheets("Alternativen").Range("H24") = "Text1"
Worksheets("Alternativen").Range("H25") = "Text2"
Else:
Worksheets("Alternativen").Range("H24:H25") = ""
End If
End With
End Sub

Anzeige
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 12:58:32
Werner
Hallo,
deine Private Sub Test() befindet sich auch in einem allgemeinen Modul?
Gruß Werner
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 13:02:49
Gast1008
Die Codes stehen allesamt unter "Microsoft Excel Objekte" unter dem dazugehörigen Tabellenblatt.
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 13:06:37
Daniel
Hi
Makros, die du mit "Private" deklariert hast, sind nur innerhalb des Moduls sichtbar, in dem sie stehen.
Steht das aufgerufene Makro in einem anderen Modul als die aufrufenden Makros, so muss es als "Public" deklariert werden.
Public Sub Test()
Wenn das Makro nicht in einem allgemeinen Modul steht (Modul1) sondern in einem Tabellenblattmodul (Tabelle1), dann musst du bei Call aus einem anderen Modul heraus nicht nur den Makronamen, sondern auch das Modul angeben, in welchem das Makro steht:
Call Tabelle1.Test
nur wenn das aufgerufene Makro in einem allgemeinen Modul steht, kann man es direkt aufrufen, ohne den Modulnamen davor schreiben zu müssen.
Der Grund hierfür ist die Eindeutigkeit.
Auch wenn du mehrere allgemeine Module hat, kann es in allen allgemeinen Modulen immer nur ein Makro "Test" geben.
In den Tabellenblattmodulen ist diese Eindeutigkeit nicht gegeben, hier kann jedes Tabellenblattmodul ein Makro "Test" enthalten, daher muss man dann angeben, welches man meint.
Gruß Daniel
Anzeige
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 13:23:32
Gast1008
Hi Daniel,
wenn ich jetzt den kompletten Code aber in einem Tabellenblattmodul stehen habe, also auch den Code, den ich mit Call aufrufe, müsste es doch trotzdem klappen?
Habe es jetzt trotzdem mal in Public abgeändert, und auch das Makro in ein anderes Modul geschrieben welches ich aufrufe, klappt aber leider immer noch nicht :-/
Danke
Anzeige
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 13:28:55
Daniel
Hi
lade bitte die Datei mit dem Fehler hoch.
da muss man schon genau sehen, was du programmiert hast.
Gruß Daniel
AW: Mehrere Steuerelemente gleichzeit ansprechen
01.09.2016 15:14:09
Gast1008
Frag nicht wie, aber ich habs irgendwie hinbekommen.
Danke euch für eure Hilfe! :)
AW: Mehrere Steuerelemente gleichzeit ansprechen
02.09.2016 09:39:05
Gast1008
Guten Morgen :)
Jetzt muss ich euch leider trotzdem nochmal etwas fragen. Der Code an sich funktioniert zwar nun, scheinbar stimmt aber im logischen Aufbau etwas noch nicht.
Das Makro sieht jetzt wie folgt aus:
Public Sub Test()
With Worksheets("Tabelle1")
If CLng(.ComboBox3) > Worksheets("Stammdaten").Cells(.Range("O4") + 2, 28) _
Or .OptionButton1 = True _
Or .OptionButton3 = True Then
.Range("H24") = "Text
Else: Worksheets("Tabelle1").Range("H24") = ""
End If
End With
End Sub
Es sollen quasi die ComboBox3, und die beiden Button abgeprüft werden und wenn die Bedingungen erfüllt sind, soll ein Text erscheinen, für die anderen Fälle soll kein Text erscheinen. Dies funktioniert nun so weit bis ich an meinen Eingaben nochmals Änderungen vornehme.
Wenn also z.B. keine der Bedingungen mehr zutrifft, soll der Text wieder erlöschen, dies funktioniert aber leider nicht richtig. Es müsste also immer wieder abgeprüft werden ob die Bedinungen noch korrekt sind.
Wie müsste ich den Code dann umschreiben?
Ich hoffe ihr versteht was ich meine
Danke euch schon mal und viele Grüße :)
Anzeige
AW: Mehrere Steuerelemente gleichzeit ansprechen
02.09.2016 09:45:46
Gast1008
Im Falle der Combobox funktioniert es übrigens, nur bzgl. der Optionbutton hapert es noch ;)
;
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Steuerelemente in Excel VBA gleichzeitig ansprechen


Schritt-für-Schritt-Anleitung

Um mehrere Steuerelemente in Excel gleichzeitig anzusprechen, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge deine Steuerelemente hinzu: Stelle sicher, dass du die benötigten Steuerelemente (ComboBox, OptionButton) auf deinem Arbeitsblatt platziert hast.

  3. Erstelle die Event-Handler: Für jedes Steuerelement musst du einen Event-Handler definieren. Du kannst den Code von Daniel verwenden, um die Steuerelemente miteinander zu verknüpfen:

    Private Sub ComboBox1_Change()
       Call Test
    End Sub
    
    Private Sub OptionButton1_Click()
       Call Test
    End Sub
    
    Private Sub OptionButton3_Click()
       Call Test
    End Sub
  4. Definiere die Hauptfunktion: Erstelle eine Funktion, die die Logik für die Überprüfung der Steuerelemente enthält. Hier ist ein Beispiel:

    Public Sub Test()
       With Worksheets("Tabelle1")
           If CLng(.ComboBox1) = 1 Or .OptionButton1 = True Or .OptionButton3 = True Then
               .Range("A1") = "Text"
           Else
               .Range("A1") = ""
           End If
       End With
    End Sub
  5. Teste dein Makro: Nachdem du den Code eingefügt hast, gehe zurück zu Excel und teste die Funktionalität deiner Steuerelemente.


Häufige Fehler und Lösungen

  • Fehlermeldung: "Sub nicht definiert"

    • Lösung: Stelle sicher, dass die aufgerufene Subroutine im richtigen Modul (allgemeines Modul vs. Tabellenblattmodul) definiert ist. Wenn du die Funktion in einem Tabellenblattmodul hast, verwende Call Tabelle1.Test.
  • Steuerelemente reagieren nicht:

    • Lösung: Überprüfe, ob die Event-Handler korrekt mit den Steuerelementen verbunden sind. Achte darauf, dass die Namen übereinstimmen.
  • Code funktioniert nicht wie erwartet:

    • Lösung: Überprüfe die Bedingungen in der If-Anweisung, um sicherzustellen, dass sie korrekt formuliert sind.

Alternative Methoden

Eine Möglichkeit, mehrere Steuerelemente effizient anzusprechen, besteht darin, alle Event-Handler in einer einzigen Funktion zu kombinieren. Du kannst die Test-Funktion so anpassen, dass sie alle Bedingungen prüft:

Public Sub Test()
    Dim ws As Worksheet
    Set ws = Worksheets("Tabelle1")

    If CLng(ws.ComboBox1) = 1 Or ws.OptionButton1 = True Or ws.OptionButton3 = True Then
        ws.Range("A1") = "Text"
    Else
        ws.Range("A1") = ""
    End If
End Sub

Praktische Beispiele

Angenommen, du hast eine ComboBox und zwei OptionButtons. Du möchtest, dass in Zelle H24 ein Text erscheint, wenn eine der Bedingungen zutrifft. Hier ist ein Beispiel:

Public Sub Test()
    With Worksheets("Tabelle1")
        If .ComboBox3.Value > Worksheets("Stammdaten").Cells(.Range("O4") + 2, 28) Then
            .Range("H24") = "Text1"
        Else
            .Range("H24") = ""
        End If
    End With
End Sub

Tipps für Profis

  • Verwende Public für Makros: Wenn du sicherstellen möchtest, dass deine Subroutinen aus verschiedenen Modulen aufgerufen werden können, deklariere sie als Public.

  • Fehlerbehandlung einfügen: Baue Fehlerbehandlungsroutinen in deinen Code ein, um unerwartete Fehler zu erfassen und zu beheben.

  • Nutze Option Explicit: Setze am Anfang jedes Moduls Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Code effizient ist? Vermeide redundante Codezeilen, indem du häufig verwendete Logik in eine separate Funktion auslagerst.

2. Was muss ich tun, wenn ein Steuerelement nicht reagiert? Überprüfe die Verknüpfung des Event-Handlers und die Eigenschaften des Steuerelements, um sicherzustellen, dass es korrekt konfiguriert ist.

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