Microsoft Excel

Herbers Excel/VBA-Archiv

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
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen

Klick-Event in Klassenmodul


Betrifft: Klick-Event in Klassenmodul von: Martin
Geschrieben am: 15.08.2016 09:22:20

In einem Klassenmodul wird dynamisch ein Button erzeugt. Das Klick-Ereignis auf den Button soll in der Klasse bearbeitet werden. Das funktioniert leider nicht. Folgendes habe ich probiert:

Ich habe eine Userform mit einem Frame Frame1. Beim Initialisieren wird die Methode AddIntoFrame aus meiner Klasse CTimePicker aufgerufen, die in Frame1 einen Button einfügt:

Option Explicit
Private Sub UserForm_Initialize()
    Dim TP As New CTimePicker
    TP.AddIntoFrame Me.Frame1
End Sub

Die Klasse sieht so aus:
Option Explicit

Private WithEvents B As MSForms.CommandButton

Public Sub AddIntoFrame(ByVal F As MSForms.Frame)
    Set B = F.Controls.Add("Forms.CommandButton.1", "cmd1")
    B.Caption = "Taste B"
End Sub

Private Sub B_Click()
    MsgBox B.Caption & " was pressed!"
End Sub

Die Methode AddIntoFrame fügt wie gewünscht einen Button B in den als Parameter übergebenen Frame F ein. Klickt man auf den Button, sollte B_Click ausgeführt werden. Das klappt leider nicht, obwohl B als WithEvents deklariert ist. Wo liegt der Fehler?

  

Betrifft: AW: Klick-Event in Klassenmodul von: Hajo_Zi
Geschrieben am: 15.08.2016 09:29:30

die CommandButton werden nicht in der Klasse erstellet sondern in der UserForm, oder sehe ich das falsch?
Die Klasse macht die Verarbeitung der Aktionen, oder sehe ich das auch falsch?


GrußformelHomepage


  

Betrifft: AW: Klick-Event in Klassenmodul von: Nepumuk
Geschrieben am: 15.08.2016 09:49:22

Hallo,

du musst im Userform eine Instanz der Klasse erstellen und den Commandbutton zuweisen. Dein Ansatz ist daher falsch.

Gruß
Nepumuk


  

Betrifft: AW: Klick-Event in Klassenmodul von: snb
Geschrieben am: 15.08.2016 14:18:09

Und das alles scheint mir viel zu kompliziert für eine einfache Aufgabe.


  

Betrifft: AW: Klick-Event in Klassenmodul von: Martin
Geschrieben am: 15.08.2016 14:21:07

Richtig. Es gibt eine Userform, darin ein Frame. Die Methode im Klassenmodul erhält als Parameter den Frame und schreibt dort dynamisch einen Button rein (in der finalen Anwendung natürlich mehr). Das Klick-Ereignis auf dem Button soll im Klassenmodul verarbeitet werden.

Hintergrund: Es gab füher in Excel standardmäßig die Klasse "DateTimePicker". Die hat in einem Rahmen in einer userform einen Kalender reingeschrieben (31 Tasten) und die Klicks verarbeitet. Ähnlich soll meine Anwendung laufen: Die Klasse schreibt in einen Rahmen der Userform Tasten und reagiert auf deren Klick.


  

Betrifft: AW: Klick-Event in Klassenmodul von: Planlos
Geschrieben am: 15.08.2016 14:30:13

Hallo
eigentlich haste es ja schon, nur musst du deine Klasse in der Userform auch am Leben erhalten, denn so wie jetzt wird sie ja am Ende von UserForm_Initialize() wieder zerstört.

Option Explicit
Private TP As CTimePicker

Private Sub UserForm_Initialize()
        Set tp = new CTimePicker
        TP.AddIntoFrame Me.Frame1
    End Sub



  

Betrifft: AW: Klick-Event in Klassenmodul von: Martin
Geschrieben am: 15.08.2016 16:42:14

Ganz herzlichen Dank an "Planlos". Genau das war das Problem, dass die Deklaration der Klasse natürlich außerhalb der Init-Prozedur erfolgen muss, damit sie später für den Event noch vorhanden ist. Vollkommen logisch und leicht zu fixen. Problem gelöst.


Beiträge aus den Excel-Beispielen zum Thema "Klick-Event in Klassenmodul"