Discussion:
Ereignisse per VBA-Code
(zu alt für eine Antwort)
Torsten Hansen
2003-10-03 12:13:55 UTC
Permalink
Hallo,

ich würde gerne ein Ereignis mit entsprechenden Anweisungen per VBA Code
dynamisch erzeugen. Beispiel: Ich habe eine aktuelle Arbeitsmappe in der ich
per Makro das BeforeSave-Ereignis mit Code füllen möchte. Also nicht
statisch im VBA-Editor, sondern dynamisch generiert zur Laufzeit. So dass es
möglich ist bei dem aktuell geöffneten Dokument jederzeit ein Ereignis zu
erstellen.
Geht sowas?

Viele Grüße,

Torsten Hansen
Melanie Breden
2003-10-03 12:26:26 UTC
Permalink
Hallo Torsten,
Post by Torsten Hansen
ich würde gerne ein Ereignis mit entsprechenden Anweisungen per VBA Code
dynamisch erzeugen. Beispiel: Ich habe eine aktuelle Arbeitsmappe in der ich
per Makro das BeforeSave-Ereignis mit Code füllen möchte. Also nicht
statisch im VBA-Editor, sondern dynamisch generiert zur Laufzeit. So dass es
möglich ist bei dem aktuell geöffneten Dokument jederzeit ein Ereignis zu
erstellen.
Geht sowas?
wenn ich dich richtig verstehe, willst du in allen geöffneten Arbeitsmappen
das BeforeSave-Ereignis überwachen und entsprechenden Code ausführen?

Dazu muss der Code nicht in der jeder der geöffneten Arbeitsmappe hinterlegt sein.
Es gibt dafür Application-Ereignisse welche in eigenen Klassen entweder in
der PERSONL.xls oder einem Add-In gespeichert sind.
Dadurch sind sie dann in allen Dateien verfügbar.

Wenn du daran Interesse hast, kann ich dir den entsprechenden Code schicken.

--
Mit freundlichen Grüßen
Melanie Breden

_____________________
[Microsoft MVP für Excel]
Peter Rieper
2003-10-03 13:14:25 UTC
Permalink
Hallo Melanie,

ich hätte auch Interessen an dem Code

Peter
Post by Melanie Breden
Hallo Torsten,
Post by Torsten Hansen
ich würde gerne ein Ereignis mit entsprechenden Anweisungen per VBA Code
dynamisch erzeugen. Beispiel: Ich habe eine aktuelle Arbeitsmappe in der ich
per Makro das BeforeSave-Ereignis mit Code füllen möchte. Also nicht
statisch im VBA-Editor, sondern dynamisch generiert zur Laufzeit. So dass es
möglich ist bei dem aktuell geöffneten Dokument jederzeit ein Ereignis zu
erstellen.
Geht sowas?
wenn ich dich richtig verstehe, willst du in allen geöffneten
Arbeitsmappen
Post by Melanie Breden
das BeforeSave-Ereignis überwachen und entsprechenden Code ausführen?
Dazu muss der Code nicht in der jeder der geöffneten Arbeitsmappe hinterlegt sein.
Es gibt dafür Application-Ereignisse welche in eigenen Klassen entweder in
der PERSONL.xls oder einem Add-In gespeichert sind.
Dadurch sind sie dann in allen Dateien verfügbar.
Wenn du daran Interesse hast, kann ich dir den entsprechenden Code schicken.
--
Mit freundlichen Grüßen
Melanie Breden
_____________________
[Microsoft MVP für Excel]
Torsten Hansen
2003-10-03 13:38:58 UTC
Permalink
Hallo Melanie,

den Code würd' ich gerne inspizieren...
Bitte an: ***@gmx.de

Ansonsten würde mich aber dennoch interessieren, ob man dynamisch Ereignisse
erzeugen kann?!

Vielen Dank schonmal,

Torsten
Melanie Breden
2003-10-03 16:58:25 UTC
Permalink
Hallo Torsten, Hallo Peter,
Post by Torsten Hansen
den Code würd' ich gerne inspizieren...
mit 'schicken' meinte ich den Code hierher posten :-)

In 'DieseArbeitsmappe' folgende Ereignisprozedur:
Es wird eine neue Instanz der Klasse clsEvent erstellt.

'####DieseArbeitsmappe ######
Private Sub Workbook_Open()
Set pEvents = New clsEvent
End Sub
'##########################

In ein Standardmodul die Deklarierung der Ereignisvariablen:
'########Modul##########
Public pEvents As clsEvent
'#######################

Erstelle ein Klassenmodul mit dem Namen 'clsEvent'
Dort folgende globale Deklarierung und Prozedur zur Initialisierung der Application-Ereignisse:

'######Klassenmodul clsEvent##########
Public WithEvents xlApp As Application

Private Sub Class_Initialize()
Set xlApp = Application
End Sub
'##################################

Wähle im linken DropDownfeld des Klassenmoduls den Eintrag 'xlApp'
Im rechten DropDownfeld erhälst du nun eine Liste der verfügbaren Application-Ereignisse.
Bei Auswahl eines Eintrages wird dessen Codeschablone mit den Parametern erstellt.

Nun nur noch deinen Code dazwischen schreiben. Z.B:

Private Sub xlApp_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
MsgBox Wb.Name & " hat zum Speichern aufgerufen"
' Speichervorgang abbrechen
Cancel = True
End Sub

Die hinterlegten Ereignisse werden in allen geöffneten Arbeitsmappen erst überwacht,
nachdem der Verweis im Workbook_Open gesetzt wurde.

Wenn du zwischendurch Änderungen im Klassenmodul vornimmst, muss der Verweis
evtl. neu gesetzt werden. Das kannst du auch über das Direktfenster ausführen:
Folgende Zeile hineinschreiben und mit 'Enter' bestätigen:
Set pEvents = New clsEvent

Kommst du damit weiter?

--
Mit freundlichen Grüßen
Melanie Breden

_____________________
[Microsoft MVP für Excel]

Lesen Sie weiter auf narkive:
Loading...