Forums Neueste Beiträge
 

VBA: Wo muss eine Methode eines globalen Objektes stehen?

28/09/2007 - 16:20 von Dirk Noack | Report spam
Hallo Group!

ich bin sonst eigentlich im VC++ zuhause und hoffe ihr konnt mir beim
meinem (kleinen) VBA-Problem helfen.

Ich verwende ein ocx-Steuerelement ("Dctl" von SIEMENS) im Excel.

Bisher habe ich das Element in einem Tabellenblatt eingebettet. Damit
landeten auch dessen "Notify"-Ereignisse (die von extern angesprungen
werden) in der selben Tabelle.

Nun möchte/habe ich das ocx-Control aber zur Laufzeit angelegen (einfach
als globales Obkjekt im Modul1) um flexibler in Hinsicht der Anzahl der
Steuerlemente zu sein. Auf diese globalen Objekte kann ich auch schon
aus allen Tabellen, z.B. per MouseDown-Ereignis von irgendwelchen
CommandButtons, zugreifen. Nun will ich aber nicht nur Mehtoden des
Objektes aufrufen, also Aktionen auslössen, sondern möchte auch die
Ereignisse die mir das Steuerelement schickt abfangen und dann
dementsprechend darauf reagieren (z.B. CommandButton grün fàrben etc.)

Wo und wie lege ich diese "Notify"-Ereignisse denn jetzt an? Da die
Objekte jetzt ja nicht mehr in einer Tabelle eingebettet sind, kann ich
auch nicht im Entwurfsmodus irgendwelche Ereignisroutinen dem
VBA-Projekt hinzufügen. Auf jeden Fall werden die Ereignis-Routinen die
ich vorher in einer Tabelle des VBA-Projekts nicht mehr angesprungen,
ist ja auch logisch da die Objekt nicht mehr zur Tabelle gehören sondern
zum Modul.

_________________________________________________________________
MfG
Dirk
 

Lesen sie die antworten

#1 Reiner Wolff
28/09/2007 - 23:37 | Warnen spam
Moin Dirk,

*Dirk Noack* schrieb:
ich bin sonst eigentlich im VC++ zuhause und hoffe ihr konnt mir beim
meinem (kleinen) VBA-Problem helfen.



Ich hoffe mit Dir :-)

Ich verwende ein ocx-Steuerelement ("Dctl" von SIEMENS) im Excel.


[Steuerelement wird zur Laufzeit erstellt]
Nun will ich aber nicht nur Mehtoden des
Objektes aufrufen, also Aktionen auslössen, sondern möchte auch die
Ereignisse die mir das Steuerelement schickt abfangen und dann
dementsprechend darauf reagieren (z.B. CommandButton grün fàrben etc.)



Ich weiß zwar nicht, ob das auch mit Deinem Steuerelement funktioniert,
aber ...
... definiere dazu eine Objektvariable für Dein hinzugefügtes Steuerlement
wie folgt in einem _Klassenmodul_:
Dim WithEvents objVariable As Siemens.Steuerelement

Nun sollest Du dafür sorgen, dass diese Variable auch einen Verweis Deines
Steuerelementes erhàlt und diese Variable wie ein Steuerelement zur
Entwurfszeit inkl. Ereignissen ansprechen können.
Du kannst an dieser Stelle die Klassenmodule wunderbar zum Erweitern von
Steuerelementmöglichkeiten (allerdings ohne Vererbung) nutzen.

Das ganze funktioniert aber auf einfache Art nur, wenn Du mit EarlyBinding
leben kannst. Beim LateBinding funktioniert diese Deklaration nicht, dann
wird's VB-technisch deutlich komplizierter.

Wo und wie lege ich diese "Notify"-Ereignisse denn jetzt an?



Bei den Ereignissen, die eine mit WithEvents deklarierten Variable Dir
bietet.

Auf jeden Fall werden die Ereignis-Routinen die ich vorher in einer
Tabelle des VBA-Projekts nicht mehr angesprungen, ist ja auch logisch da
die Objekt nicht mehr zur Tabelle gehören sondern zum Modul.



Das hast Du absolut richtig erkannt.
Als Klassenmodul gelten übrigens auch die "TabellenModule".

Wennst dazu Fragen hast, nur zu.

Gruß aus Kiel
Reiner
Es gibt nichts schöneres als in trauter Zweisamkeit mit seinem inneren
Schweinehund auf der faulen Haut zu liegen

Ähnliche fragen