BEISPIEL
HINWEIS
BEISPIEL
Wird New bei der Deklaration nicht verwendet, existiert momentan keine Instanz des Objekts, sondern
lediglich eine Referenz auf den Typ des Objekts (Klasse). Sollte trotzdem ein Zugriff versucht werden, folgt
eine Fehlermeldung.
Abhilfe schafft hier die nachfolgende Set-Anweisung in Verbindung mit New. Allgemein sollten Sie diese
Vorgehensweise (d.h. Referenzieren und Instanziieren in zwei getrennten Schritten) gegenüber einer
Deklaration mit New bevorzugen, da sich die so erzeugten Objekte im Allgemeinen problemloser wieder
aus dem Speicher entfernen lassen.
Der folgende Code führt zum gleichen Ergebnis wie das Vorgängerbeispiel.
Dim obj1 As Form ' Referenzierung der Klasse
Dim obj2 As Form
Private Sub Form_Load()
Set obj1 = New Form_Formular1 ' Instanziierung des Objekts
obj1.Visible = True
Set obj2 = New Form_Formular1
obj2.Visible = True
End Sub
Die ersten beiden
Zeilen hätte man hier auch folgendermaßen notieren können (Late Binding):
Dim obj1 As Object
Dim obj2 As Object
Eine Nicht-Standardinstanz des Formulars kann nicht erstellt werden, wenn das Formular in der Entwurfsan-
sicht geöffnet ist.
Benutzerdefinierte Form-/Report-Objekte
Allgemein erstellen Sie ein benutzerdefiniertes Objekt, indem Sie eine neue Instanz eines Klassenmoduls
erzeugen. Jede innerhalb dieses Moduls definierte öffentliche Prozedur oder Funktion bzw. Variable/
Konstante entspricht einer Methode bzw. Eigenschaft des benutzerdefinierten Objekts. Zunächst beschrän-
ken wir uns nur auf Formular- bzw. Berichts-Klassenmodule. Ein analoges Vorgehen gilt aber auch für die
anschließend behandelten eigenständigen Klassenmodule.
Benutzerdefinierte Methoden
... sind relativ problemlos zu erstellen.
Im Codefenster eines Formulars
Form1
mit einer Befehlsschaltfläche
Befehl0
deklarieren Sie
eine öffentliche
Prozedur:
Public Sub verschiebeButton ' Button wird in linke obere Ecke bewegt
Befehl0.Left = 0
Befehl0.Top = 0
End Sub
247
Formular- und Berichtsmodule
BEISPIEL
BEISPIEL
Kapitel 5: Programmieren mit Objekten
Auf
die Methode
verschiebeButton
des Klassenmoduls
Form1
kann z.B. im Code eines zweiten Formulars
For-
m2
zugegriffen werden:
Dim frm As Form
Set frm = Form_Form1
frm.verschiebeButton
Form1
muss vorher
geöffnet worden sein (Standardinstanz), andernfalls hätte
frm
mit
New
deklariert werden
müssen.
Benutzerdefinierte Eigenschaften
... sind nicht ganz so trivial wie benutzerdefinierte Methoden zu erzeugen.
Obiges Klassenmodul soll eine Eigenschaft
buttonFarbe
erhalten. Dazu ist auf Modulebene von
Form1
eine
entsprechende öffentliche Variable zu deklarieren:
Public buttonFarbe As Long ' Farbe der Beschriftung des Buttons
Dieser Eigenschaft muss ein Wert zugewiesen werden, z.B. im
Resize
-Ereignis:
Sub Form_Resize()
Befehl0.ForeColor = buttonFarbe
End Sub
Vom Formular
Form2
aus kann dann die Eigenschaft
buttonFarbe
von
Form1
wie folgt geändert werden:
frm.buttonFarbe = QBColor(12) ' setzt Beschriftung auf rot
Damit die Änderung wirksam wird, muss in unserem Beispiel noch das Resize-Ereignis von Form1 ausgelöst
werden (Formulargröße verändern).
Während die Deklaration benutzerdefinierter Methoden einfach und schlüssig erscheint, erkennen Sie am
obigen Beispiel die Problematik bei der Deklaration von Eigenschaften. Zum einen kann die Zuweisung der
Eigenschaft nicht sofort erfolgen, sondern muss in eine geeignete Ereignisprozedur verpackt werden (in
unserem Fall Resize). Zum anderen ist auch die Vergabe von Lese- und Schreibrechten (Read-only) nur
umständlich zu realisieren. Aus diesem Grund stellt VBA für benutzerdefinierte Eigenschaften spezielle
Prozeduren bereit, auf die im Folgenden näher eingegangen werden soll.
Property Let und Property Get
Beides sind so genannte »Eigenschaftsprozeduren« zum Schreiben bzw. Lesen von Eigenschaften.
Die umständliche Programmierung der Eigenschaft
buttonFarbe
im Klassenmodul
Form1
des Vorgängerbei-
spiels ersetzen Sie einfach durch folgenden Code:
Public Static Property Let buttonFarbe(farbe As Long)
Befehl0.ForeColor = farbe
End Property
248

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.