Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Dynamische Userform und Ereignisse

144 views
Skip to first unread message

Norbert Nowotny

unread,
Oct 1, 2001, 6:43:17 AM10/1/01
to
Hallo VBA Profis

Ich erstelle gerade für ein Projekt eine "User form" welche
entsprechend der Situation angepaßt wird.

In diese "Userform" werden während der Laufzeit, mit
".Controls.Add("Forms.CheckBox.1,NAME)" Checkboxen eingefügt.
Ich möchte dann den Checkboxen eine Ereignisprozedur, "bei Click"
hinzufügen.

Ist das überhaupt möglich und wenn ja wie?

Mit ".OnAction" geht es leider nicht, außer ich mache dabei einen
Fehler mit dem Prozedurnamen.

Tschau Norbert

Dr. Eckehard Pfeifer

unread,
Oct 1, 2001, 10:46:45 AM10/1/01
to
Hallo, Du kannst in einem Klassenmodul Checkboxen mit WithEvents
vereinbaren, dann hast Du deren Clickereignis. Nun musst Du nur noch dafuer
sorgen, dass durch

set chkWithEvents = chkAufForm

eine Beziehung zwischen tatsaechlicher und "virtueller" Checkbox hergestellt
wird und somit der Click auf die tatsaechliche an den "Click" der virtuellen
weitergeleitet wird.

--
Mit freundlichen Grüßen
Eckehard Pfeifer

www.dr-e-pfeifer.de
Ein Blick lohnt sich immer: www.vba-magazin.de

Norbert Nowotny

unread,
Oct 1, 2001, 1:34:58 PM10/1/01
to
On Mon, 1 Oct 2001 16:46:45 +0200, "Dr. Eckehard Pfeifer"
<pri...@dr-e-pfeifer.de> wrote:

Hallo, erst einmal Danke für die schnelle Antwort.

>Hallo, Du kannst in einem Klassenmodul Checkboxen mit WithEvents
>vereinbaren, dann hast Du deren Clickereignis. Nun musst Du nur noch dafuer
>sorgen, dass durch

Ich muß gestehen, ich habe von Klassenmodulen absolut keine Ahnung.
Könntest du bitte so freundlich sein und mir ein kleines
Programmbeispiel geben, oder einen Link wo dies erklärt wird.
Ich habe schon selbst gesucht aber nichts vernünftigs gefunden.

Besten Dank
Norbert

Dr. Eckehard Pfeifer

unread,
Oct 1, 2001, 2:22:10 PM10/1/01
to
Hallo, in das Formular schreibst Du:

Public chkBox As msforms.CheckBox
Public WithEvents chk As msforms.CheckBox

Private Sub chk_Click()
MsgBox "so gehts"
End Sub

Private Sub UserForm_Click()
If chkBox Is Nothing Then
Set chkBox = Me.Controls.Add("Forms.Checkbox.1")
Set chk = chkBox
End If
End Sub

Ein Klassenmodul brauchst Du hier nicht unbedingt, da das Formular bereits
eins ist.

Wenn Du es mit einem neuen Klassenmodul machen willst (Klasse1) so schreibst
Du ins Formular

Public cls As Klasse1
Public chkBox As msforms.CheckBox

Private Sub UserForm_Click()
If cls Is Nothing Then
Set cls = New Klasse1
End If
If chkBox Is Nothing Then
Set chkBox = Me.Controls.Add("Forms.Checkbox.1")
Set cls.chk = chkBox
End If
End Sub

und ins Klassenmodul

Public WithEvents chk As msforms.CheckBox

Private Sub chk_Click()
MsgBox "so gehts"
End Sub

Tja, wo stehts? Ich weiss es nicht. Es ist die Adaption der Ausfuehrungen
unter "Automatisierung des Application-Objekts".

Norbert Nowotny

unread,
Oct 1, 2001, 5:16:17 PM10/1/01
to
Hallo," tausend Dank", wie die Schweden so sagen.
Wieder einmal eine superpromte Antwort.
Ehrlich was du in dieser Group an Hilfe leistest ist wirklich
überragend. Bisher habe ich ja immer nur mitgelesen, aber diesmal habe
ich es bei mir selbst erlebt.

Aber jetzt zu deiner Antwort:

Du hast recht es geht wirklich :-)
Mein Ansatz war praktisch gleich, denn ich hatte das auch so, aus
deiner ersten Antwort herausgelesen.

Mein Fehler war, das ich
"Public WithEvents chk As CheckBox"
geschrieben habe.
Also nur "CheckBox" anstelle von "msforms.CheckBox" beim Variablentye

Das führt zur Fehlermeldung:
"Fehler beim Kompilieren: Das Objekt löst keine
Automatisierungsereignisse aus"

Also nochmals vielen Dank

Tschau Norbert

Dr. Eckehard Pfeifer

unread,
Oct 2, 2001, 6:24:46 AM10/2/01
to
Danke fuers Lob, aber es gibt hier nichts Ueberragendes, wenn man die
Leistungen und Kenntnisse von Robert, Frank, den verschiedenen Peters, Jörg,
Bernd usw. beachten will. Und: nur die gezielten und mit Sachkenntnis
vorgetragenen Fragen und die Athmosphäre dieser Gruppe erlauben es vielen
von uns, mit "leichter" Hand auch Antworten zu geben.
Gruss
E. Pfeifer


0 new messages