Thema Datum  Von Nutzer Rating
Antwort
28.03.2023 08:27:00 Gast85739
NotSolved
28.03.2023 11:01:11 Mase
NotSolved
28.03.2023 11:28:54 Zwenn
NotSolved
28.03.2023 13:34:35 Gast58474
NotSolved
Rot OOP: Event Handling aus Objekt in einer Collection
28.03.2023 12:51:41 Gast11171
NotSolved
28.03.2023 13:51:09 Gast42008
NotSolved
28.03.2023 13:28:00 Gast28247
NotSolved

Ansicht des Beitrags:
Von:
Gast11171
Datum:
28.03.2023 12:51:41
Views:
287
Rating: Antwort:
  Ja
Thema:
OOP: Event Handling aus Objekt in einer Collection

Als erstes halten wir mal fest, das VBA keine objektorientierte Sprache ist, sondern objektbasiert (für ersteres fehlt ihr Vererbung).


Du willst scheinbar eine Klasse schreiben, die einen Event auslöst.

'Klassenmodul: clsModule
Option Explicit

Private Const E_NOT_INITIALIZED As Long = &H1

Public Event MyEvent(ByVal Module As clsModule, ByVal Message As String)

Private m_strName As String
Private m_blnInitialized As Boolean

Public Sub Initialize(Name As String)
  m_strName = Trim$(Name)
  m_blnInitialized = m_strName <> ""
End Sub

Public Property Get Name() As String
  Name = m_strName
End Property

Public Sub Notify()
  
  If m_blnInitialized = False Then
    Call Err.Raise(vbObjectError + E_NOT_INITIALIZED, Description:="Klasse ist nicht initialisiert.")
  End If
  
  RaiseEvent MyEvent(Me, "Hallo, ich bin """ & Me.Name & """.")
  
End Sub

Test:

Option Explicit

Private WithEvents m_objModule As clsModule

Sub Test()
  
  If m_objModule Is Nothing Then
    Set m_objModule = New clsModule
  End If
  
  Call m_objModule.Initialize("Module-0A5")
  Call m_objModule.Notify
  
End Sub

Private Sub m_objModule_MyEvent(ByVal Module As clsModule, ByVal Message As String)
  
  Call MsgBox(Message, vbInformation)
  
End Sub

Wenn du jetzt möchtest, dass sich verschiedene Modul-Instanzen untereinander benachrichtigen können, dann brauchst du so etwas wie einen ModuleManager - in einem spezielleren Fall einen Mediator - der alle Module kennt und wenn eines davon sich meldet, leitet er es an alle restlichen weiter. Über einen kleinen Trick kann man in VBA diesen als Singleton implementieren.

- Ich vermute das ist es, was du vor hast?


Ganz so "sauber" wie man es von OOP Sprachen her kennt, wirst du es in VBA nicht hinbekommen, denn VBA gibt das teilweise nicht her oder wird schnell unschön.

 

Grüße


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
28.03.2023 08:27:00 Gast85739
NotSolved
28.03.2023 11:01:11 Mase
NotSolved
28.03.2023 11:28:54 Zwenn
NotSolved
28.03.2023 13:34:35 Gast58474
NotSolved
Rot OOP: Event Handling aus Objekt in einer Collection
28.03.2023 12:51:41 Gast11171
NotSolved
28.03.2023 13:51:09 Gast42008
NotSolved
28.03.2023 13:28:00 Gast28247
NotSolved