Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Application.Caller | Herbers Excel-Forum


Betrifft: Application.Caller von: uli
Geschrieben am: 20.10.2008 15:57:10

Hallo Experten,

ich habe eine Userform mit 23 Checkboxen. Wenn eine Checkbox aktiviert/deaktiviert wird (z.B. Checkbox1) wird der Code Checkbox1_Click() ausgeführt. Während dieser Code durchlaufen wird, wird das Makro "Test" über "Call Test" aufgerufen. In diesem Makro sollen nun in Abhängigkeit der gedrückten Checkbox unterschiedliche Dinge passieren. Dafür muss ich natürlich in Makro "Test" wissen, welche Checkbox gedrückt worden ist. Das Makro "Test" öffnet sich beim Drücken von allen Checkboxen.
Ich glaube, dass ich das irgendwie mit dem Befehl "Application.Caller" machen muss. Weiß allerdings nicht genau wie.

Kann mir da vielleicht jemand auf die Sprünge helfen?

Gruß
Uli

  

Betrifft: AW: Application.Caller von: Rudi Maintaire
Geschrieben am: 20.10.2008 16:37:24

Hallo,
Caller geht nicht, da Test durch die Ereignisprozedur aufgerufen wird.
übergib die Checkbox als Prameter an Test.

Checkbox1_Click() 
Call Test(Me.checkbox1)
End Sub


Sub test(cbx As Object)
  MsgBox cbx.Caption
End Sub


Alternativ kannst du die Checkboxen auch in eine eigene Klasse packen.

Gruß
Rudi


  

Betrifft: AW: Application.Caller von: uli
Geschrieben am: 20.10.2008 16:46:42

Hallo Rudi

vielen Dank,
funktioniert perfekt.
ICh übergebe die Checkboxen als Parameter.
Den Unterschied zwischen Klassenmodulen und Modulen hab ich leider noch nicht verstanden. Kann ich die Checkboxen_Click() Prozedur in ein Modul eintragen? Wie mach ich vba dann klar, welche Checkbox1 aus welcher USerform ich meine?

Gruß
Uli


  

Betrifft: AW: Application.Caller von: Rudi Maintaire
Geschrieben am: 20.10.2008 16:49:51

Hallo,

Kann ich die Checkboxen_Click() Prozedur in ein Modul eintragen? 


Nein! Die müssen im Klassenmodul der UF stehen.

Gruß
Rudi


  

Betrifft: AW: Application.Caller von: JogyB
Geschrieben am: 20.10.2008 16:39:30

Hallo.

Geht meines Wissens nur auf Arbeitsblättern, nicht in Userforms (lasse mich aber gerne eines besseren belehren).

In Deinem Fall wäre ein Klassenmodul die beste Lösung. Ein gutes Einstiegsbeispiel findest Du hier.

In Deinem konkreten Fall holft dann, dass innerhalb des Klassenmoduls die Checkbox als Objekt vorhanden ist und dann auch an "Test" übergeben werden kann.

Kleiner Tipp: Bei der Deklaration musst Du MSForms.CheckBox als Variablentyp verwenden, CheckBox alleine reicht nicht.

Gruss, Jogy


  

Betrifft: AW: Application.Caller von: Tino
Geschrieben am: 20.10.2008 16:45:17

Hallo,
übergebe den Namen oder eine Zahl an die Sub Test und werte diese im Makro entsprechend aus.

Beispiel:

Option Explicit

Private Sub CheckBox1_Click()
 If Me.CheckBox1 = True Then
  Call Test(1)
 End If
End Sub
Private Sub CheckBox2_Click()
 If Me.CheckBox2 = True Then
  Call Test(2)
 End If
End Sub

Sub Test(meBox As Integer)
Select Case meBox
 Case 1: MsgBox "mach was mit CheckBox" & meBox
 Case 2: MsgBox "mach was mit CheckBox" & meBox
End Select
End Sub



Bei sovielen Checkboxen, kannst Du Dir mal Gedanken darüber machen
dies über ein Klassenmodul zu lösen, dann brauchst du den Code nicht für jede Box zu schreiben.
Beispiele findest Du hier im Forum und im Archiv.

Gruß Tino


  

Betrifft: AW: Application.Caller von: uli
Geschrieben am: 20.10.2008 17:03:14

Hallo Tino und Jogi,

hmmmm, da ist wohl Beitrag verloren gegangen. Dann nochmal:

vielen Dank euch beiden für die Tipps. Hab schon den Tipp von Rudi ausprobiert. Werde mich jetzt aber mal mit Klassenmodulen auseinandersetzen. Bin denen bis jetzt immer aus dem Weg gegangen. Hab auch noch nicht den Unterschied zu normalen Modulen vestanden.

Gruß
Uli