Regionales Rechenzentrum für Niedersachsen
VBA (Visual Basic for Application)
Mit Objekten arbeiten
OpenOffice | | Folie 2Access 2007 – VBA | 06.03.08 | Seite 2
Regionales Rechenzentrum für Niedersachsen
Objektorientierte Programmierung (OOP)
... abstrahiert Gegenstände der realen Welt, um sie in einem Programm abzubilden zu können.
... versucht Daten, die ein Objekt beschreiben und Prozeduren, die die Daten verändern, in einer Struktur zusammenzufassen.
... versucht Daten und Funktionen, die die Daten verändern, in eine Struktur zu kapseln.
In der objektorientierten Programmierung werden ... Klassen erstellt, um Gruppen von Objekten zu beschreiben. Zum Beispiel
die Klasse Form beschreibt die Eigenschaften eines Formulars allgemein. ... Objekte erstellt, um ein Gegenstand aus der realen Wert abzubilden. Das
Formular "Kunde" ist ein Objekt aus der realen Welt und hat bestimmte Ausprägungen der Eigenschaften. Zum Beispiel der Hintergrund ist grau.
... Nachrichten verschickt. Wenn der Nutzer auf eine Schaltfläche klickt, wird eine Nachricht geschickt, auf die entsprechend reagiert wird.
OpenOffice | | Folie 3Access 2007 – VBA | 06.03.08 | Seite 3
Regionales Rechenzentrum für Niedersachsen
... nutzt
... Klassen, um Objekte mit gleichen Eigenschaften und Methoden zusammenzufassen. Zum Beispiel die Klasse Form beschreibt die Eigenschaften eines Formulars allgemein.
... Objekte, die konkret ein realen Gegenstand beschreiben und abstrahieren. Zum Beispiel wird ein Textfeld für Währungseingaben formatiert und gestaltet. Das Textfeld entspricht einem Feld in einem Papierformular.
... Nachrichten als Kommunikationsmittel. Wenn zum Beispiel der Nutzer auf eine Schaltfläche in einem Formular klickt, wird eine Nachricht gesendet. Diese Nachricht wird entsprechend den Anweisungen verarbeitet.
OpenOffice | | Folie 4Access 2007 – VBA | 06.03.08 | Seite 4
Regionales Rechenzentrum für Niedersachsen
Objekte
... stellen eine Abstraktion eines realen Gegenstandes dar. ... sind Akteure in einem abstrakten Modell. ... stellen die Formulare, Berichte, Steuerelemente etc. in Access
dar. ... haben bestimmte Eigenschaften (Attribute) und Methoden
(Funktionen). ... berichten über ihren Zustand und können diesen mit Hilfe von
Anweisunge verändern. ... sind die Instanz einer Klasse.
OpenOffice | | Folie 5Access 2007 – VBA | 06.03.08 | Seite 5
Regionales Rechenzentrum für Niedersachsen
Beispiel
… hat Eigenschaften wie Farbe, Kilometerstand, Motorleistung etc.
… kommuniziert mit anderen Verkehrsteilnehmern.
… beachtet die Verkehrszeichen.
OpenOffice | | Folie 6Access 2007 – VBA | 06.03.08 | Seite 6
Regionales Rechenzentrum für Niedersachsen
Formular in Access
Eigenschaften (Attribute)
Backcolor (Hintergrundfarbe)
Caption (Beschriftung)
Scrollbars (Bildlaufleisten)
usw.
Methoden
Move (Verschieben)
Refresh (Neu Zeichnen)
SetFocus (Setze Fokus)
usw.
Ereignis (Event-Handler)
Click (Mausklick)
Activate (Aktiviert)
MouseUp (Maustaste auf)
usw.
OpenOffice | | Folie 7Access 2007 – VBA | 06.03.08 | Seite 7
Regionales Rechenzentrum für Niedersachsen
Klassen
... fassen Objekte in Kategorien zusammen. ... fassen Objekte mit den gleichen Eigenschaften und Methoden
zusammen. ... stellen Baupläne für konkrete Objekte dar. ... bieten eine Schablone für bestimmte Kategorien von Objekten.
VerkehrsteilnehmerVerkehrszeichen KFZ
OpenOffice | | Folie 8Access 2007 – VBA | 06.03.08 | Seite 8
Regionales Rechenzentrum für Niedersachsen
Klassen in Access
Jede Schaltfläche hat die gleichen Eigenschaften und Methoden. Wie die Schaltfläche aussieht und wie sie auf Benutzeraktionen reagiert, ist unterschiedlich.
Für jedes Formular sind die gleichen Eigenschaften und Methoden vorhanden. Welche Eigenschaften genutzt werden und wie sich das Formular verhält, legt der Entwickler der Datenbank fest.
OpenOffice | | Folie 9Access 2007 – VBA | 06.03.08 | Seite 9
Regionales Rechenzentrum für Niedersachsen
Eine Klasse hat
… Eigenschaften (Attribute). Attribute beschreiben einen Gegenstand. Jeder Gegenstand in einer Gruppe (Klasse) besitzt die gleichen
Eigenschaften. Jedes Objekt hat aber bestimmte Attributwerte, die das Objekt von
anderen Objekten des gleichen Typs unterscheiden. ... Methoden (Memberfunction, Elementfunktion),
Methoden verändern die Eigenschaft eines Objekts. Jedes Objekt in einer Gruppe (Klasse) hat die gleichen Methoden. Objekte nutzen Methoden, um mit anderen Objekten zu
kommunizieren. Objekte reagieren mit Hilfe von Methoden auf bestimmte Ereignisse.
Ereignisse sind zum Beispiel Mausklick, Drücken einer Taste etc.
OpenOffice | | Folie 10Access 2007 – VBA | 06.03.08 | Seite 10
Regionales Rechenzentrum für Niedersachsen
Instanz (Exemplar)
... definiert eine Variable der entsprechenden Klasse. ... ist eine Variable vom Typ einer bestimmten Klasse. ... kann als Standardinstanz angelegt werden.
Die Standardinstanz wird automatisch beim Öffnen eines Formulars oder Berichts erzeugt.
Normalerweise arbeitet man immer mit der Standardinstanz. ... kann als Nicht-Standardinstanz mit Hilfe des Schlüsselwortes New
angelegt. Es ist mehr als eine Instanz eines Formulars oder Berichts geöffnet. Von einem Formular oder Bericht wird temporär eine Kopie erzeugt.
OpenOffice | | Folie 11Access 2007 – VBA | 06.03.08 | Seite 11
Regionales Rechenzentrum für Niedersachsen
Lebenszyklus eines Objekts
... im Programm nutzen ... im Block nutzen
... beim Programmende ... beim Verlassen des Gültigkeitsbereichs
Objekt ... global definiert ... lokal definiert
... beim Programmstart ... bei der Definition... erzeugen
... zerstören
OpenOffice | | Folie 12Access 2007 – VBA | 06.03.08 | Seite 12
Regionales Rechenzentrum für Niedersachsen
Implementierung in VBA
Objekt
Dim frm As Form ' InstanzSet frm = Form_frmKunde
... erzeugen
frm.Move 0, 0, 1000, 1000 frm.Visible = True
Set frm = Nothing' Speicher wird automatisch nach dem ' Verlassen der Prozedur freigegeben.... zerstören
OpenOffice | 11.12.08 | Folie 13Access 2007 – VBA | 06.03.08 | Seite 13
Regionales Rechenzentrum für Niedersachsen
Deklaration von Objektvariablen
Dim objectFrm As Form
Wer kann auf die Variable zugreifen?
Der Variablenname ist frei wählbar. Die Bezeichnung sollte aber die Funktion der Objektvariablen erläutern.
Mit dem Schlüsselwort As wird die Typbezeichnung eingeleitet.Als Datentypen werden Objektklassen genutzt. Hier wird zum Beispiel die Objektklasse für geöffnete Forms genutzt.
OpenOffice | | Folie 14Access 2007 – VBA | 06.03.08 | Seite 14
Regionales Rechenzentrum für Niedersachsen
Standardinstanz zuweisen
Dim frm As Form
Set frm = Form_frmKunde
Set (setze) frm (Objektvariable) auf den Wert (=) Form_frmKunde. Einer Objektvariablen kann nicht mit Hilfe eines Gleichheitszeichens ein
Wert zugewiesen werden. Der Objektvariablen wird ein Verweis auf ein bestimmte Objekt
übergeben. Das Objekt muss VBA bekannt sein. Es muss existieren.
OpenOffice | | Folie 15Access 2007 – VBA | 06.03.08 | Seite 15
Regionales Rechenzentrum für Niedersachsen
Nicht-Standardinstanz zuweisen
Dim frmKopie As Form
Set frmKopie = New Form_frmKunde
New erzeugt automatisch eine neue Instanz von einem Formular. Es wird eine Nicht-Standardinstanz erzeugt. Die Kopie ist unabhängig vom Original. Beide Instanzen können zum
Beispiel unterschiedliche Datensätze für eine Vergleich anzeigen.
OpenOffice | | Folie 16Access 2007 – VBA | 06.03.08 | Seite 16
Regionales Rechenzentrum für Niedersachsen
Variant - Typ
Dim frm As Object
Set frm = New Form_frmKunde
Der Objekttyp Object kann auf jedes Objekt in Access verweisen. Es wird automatisch so viel Speicher bereitgestellt, wie das größte Objekt
benötigt. Eine Typ-Überprüfung ist nicht möglich.
OpenOffice | | Folie 17Access 2007 – VBA | 06.03.08 | Seite 17
Regionales Rechenzentrum für Niedersachsen
Verweis zerstören
Dim frm As Object
Set frm = New Form_frmKunde
Set frm = Nothing
Die Objektvariable wird auf nichts (Nothing) gesetzt. Der Verweis auf ein Objekt wird zerstört. Die Nutzung eines ungültigen Verweises wird vermieden. Wichtig: Nach dem Schließen eines Objekts sollte der Verweis zerstört
werden.
OpenOffice | | Folie 18Access 2007 – VBA | 06.03.08 | Seite 18
Regionales Rechenzentrum für Niedersachsen
Eigenschaften (Attribute)
... beschreiben den aktuellen Zustand eines Objekts. ... beschreiben das Aussehen eines Objekts. Eigenschaftswerte können immer gelesen werden. Einige
Eigenschaftswerte können mit Hilfe von VBA verändert werden. ... werden von der Objektvariablen mit einem Punkt getrennt. ... können genauso wie andere Variablen genutzt werden. ... eines Formulars oder Steuerelements entsprechen den
deutschsprachigen Eigenschaften im Eigenschaftenfenster auf den Registerkarten Format, Daten und Andere. In VBA werden aber die englischsprachigen Namen benötigt. Die englischsprachigen sowie die deutschsprachigen Namen werden in der Hilfe angezeigt.
OpenOffice | | Folie 19Access 2007 – VBA | 06.03.08 | Seite 19
Regionales Rechenzentrum für Niedersachsen
Eigenschaften eines Textfeldes
txtBenutzer.TextAlign = 1 ' Textausrichtung txtBenutzer.Value = "Bestellung" ' Wert txtPasswort.InputMask = "Password" ' Eingabeformat txtPasswort.SetFocus ' Methode
OpenOffice | | Folie 20Access 2007 – VBA | 06.03.08 | Seite 20
Regionales Rechenzentrum für Niedersachsen
Methoden
Memberfunktion, Elementfunktion ... verändern oder lesen Attribute des dazugehörigen Objekts. Die zu implementierenden Methoden ergeben sich aus den Attributen
einer Klasse und deren Nutzung. Für Formulare, Berichte und Controls sind vorgefertigte Methoden vorhanden.
... sind Prozeduren, die an ein Objekt gebunden sind. Die Gesamtheit aller Methoden kann als Schnittstelle (Interface) nach
außen bezeichnet werden. ... ermöglichen die Kommunikation mit anderen Objekten. Als Trennzeichen zwischen der Objektvariablen und der Methode wird
ein Punkt genutzt.
OpenOffice | | Folie 21Access 2007 – VBA | 06.03.08 | Seite 21
Regionales Rechenzentrum für Niedersachsen
Beispiel: Formular verschieben
100, 100
0, 0
frm.Move Left:=0, Top:= 0
OpenOffice | | Folie 22Access 2007 – VBA | 06.03.08 | Seite 22
Regionales Rechenzentrum für Niedersachsen
Erläuterung der Methode Move
Definition: objekt.Move left, top, width, height left ist der einzige Parameter, der übergeben werden muss. Er gibt die
Position der linken, oberen Ecke an. top gibt den Abstand des Objekts relativ zum Access-Arbeitsbereich an. width und height legen die Größe des Objekts fest.
objekt.Move Top:= 0, Width:=1000 Die Namen der Variablen in der Parameterliste werden als Schlüsselworte
genutzt. Der Operator := weist dem Schlüsselwort ein Wert zu. Vorteil: Die gesetzten Parameter sind für den Entwickler sichtbar.
OpenOffice | | Folie 23Access 2007 – VBA | 06.03.08 | Seite 23
Regionales Rechenzentrum für Niedersachsen
Collections (Auflistung)
... sind eine Auflistung von Elementen, die ein und derselben Kategorie zugeordnet werden können.
... sind dynamische Felder von einer bestimmten Objektart. ... sind Behältnisse für eine Sammlung von Objekten mit bestimmten
Eigenschaften. ... sind eine Liste aller Elemente einer Objektart. Die Bezeichnung einer Collection endet immer mit s. Zum Beispiel die
Auflistung Forms enthält alle geöffneten Formulare. ... haben genauso wie Objekte Eigenschaften und Methoden. ... sind nullbasiert. Das erste Element in der Auflistung hat den Index null. Der Index der Elemente einer Collection verändert sich in Abhängigkeit
der Anzahl der Elemente. Der Index ist nicht an ein bestimmtes Element gekoppelt.
OpenOffice | | Folie 24Access 2007 – VBA | 06.03.08 | Seite 24
Regionales Rechenzentrum für Niedersachsen
Beispiel: Alle geöffneten Formulare
Dim frmKunde As FormDim frmStart As FormDim count As Integer
Set frm = Form_frmKundeSet frmStart = Form_frmStart
frmKunde.Visible = TruefrmStart.Visible = True
For count = 0 To Forms.Count – 1Debug.Print Forms.Item(count).Name
Next count
Die Eigenschaft Count gibt die Anzahl der geöffneten
Formulare zurück.
Item(count) ist ein Synonym für ein Element in der Auflistung. Im
Direktfenster wird der Name des Elements ausgegeben.
OpenOffice | | Folie 25Access 2007 – VBA | 06.03.08 | Seite 25
Regionales Rechenzentrum für Niedersachsen
Beispiel: Alle Formulare einer Datenbank
Dim frm As AccessObject Set frm = Application.CurrentProject.AllForms("frmTest") Debug.Print frm.Name
Application bezeichnet die aktuelle Access-Anwendung. CurrentProject ist ein Synonym für das momentan laufende Access-
Projekt. AllForms ist eine Auflistung aller Formulare in dem Access-Projekt. Jede Auflistung hat spezifische Eigenschaften und Methoden.
OpenOffice | | Folie 26Access 2007 – VBA | 06.03.08 | Seite 26
Regionales Rechenzentrum für Niedersachsen
Objektmodell von Access (Ausschnitt)
Application(Aktuelle Access-Anwendung)
Forms(Formulare)
Reports(Bericht)
Screen(Aktiver Bildschirm)
DoCmd(Befehle aus Makros)
OpenOffice | | Folie 27Access 2007 – VBA | 06.03.08 | Seite 27
Regionales Rechenzentrum für Niedersachsen
Hierarchischer Aufbau von Formularen
Forms Forms(0)
Forms(1)
Forms(n)
....
Controls
Properties
Controls
Properties
OpenOffice | 11.12.08 | Folie 28Access 2007 – VBA | 06.03.08 | Seite 28
Regionales Rechenzentrum für Niedersachsen
Verweise auf die Objektmodelle
.... werden mit Hilfe des Menüs Extra – Verweise im VBA-Editor gesetzt.
Suchen Sie aus der Liste die gewünschte Bibliothek aus.
Klicken Sie auf das dazugehörige Kontrollkästchen, um den Verweis für das aktuelle Projekt zu aktivieren.
OpenOffice | 11.12.08 | Folie 29Access 2007 – VBA | 06.03.08 | Seite 29
Regionales Rechenzentrum für Niedersachsen
Dialogfenster "Verweise"
Liste aller möglichen Verweise. Die aktiven Verweise stehen am Anfang der Liste. Durch einen Klick auf das Kontrollkästchen kann ein Verweis aktiviert oder deaktiviert werden.
Zu dem ausgewählten (farbig hinterlegt) Verweis wird der Pfad zu der dazugehörigen Bibliothek angezeigt.
Reihenfolge der aktiven Verweise verändern.
OpenOffice | 11.12.08 | Folie 30Access 2007 – VBA | 06.03.08 | Seite 30
Regionales Rechenzentrum für Niedersachsen
Aktive Verweise in Access
Visual Basic for Application C:\Programme\Gemeinsame Dateien\Microsoft Shared\vba\vba6\vbe6.dll ... definiert die Programmiersprache VBA.
Microsoft Access 12.0 Object Library C:\Programme\Microsoft Office\Office12\msacc.dll ... ist ein Verweis auf das Objektmodell von Access.
Microsoft Office 12.0 Access database engine Object Library C:\Programme\Microsoft Office\Office12\acedao.dll ... ersetzt die Microsoft DAO 3.x Object Library. ... stellt eine Verbindung zu Daten in Tabellen und Abfragen her.
OLE Automation C:\Windows\System32\stdole.tbl O(bject) L(inking) E(mbedding) ... ermöglicht das Bearbeiten von fremden Daten wie zum Bildern in einer
anderen Anwendung. ...ermöglicht die Nutzung eines Objektmodells aus einer anderen Anwendung.
OpenOffice | | Folie 31Access 2007 – VBA | 06.03.08 | Seite 31
Regionales Rechenzentrum für Niedersachsen
Ungültige Verweise ermitteln
Dim verweis As ReferenceDim strText As String
If Application.BrokenReference ThenstrText = "Folgende Verweis sind ungültig:
For Each verweis In Application.References
If verweis.IsBroken ThenstrText = strText & " " & verweis.Name & vbCrLf
End If
Next VerweisEnd If
Wenn Bibliotheksdateien gelöscht oder verschoben
werden, wird die Eigenschaft BrokenReference der
Application true gesetzt. Der Verweis ist ungültig.
In der for-Schleife werden alle Verweise auf Gültigkeit
geprüft.
OpenOffice | | Folie 32Access 2007 – VBA | 06.03.08 | Seite 32
Regionales Rechenzentrum für Niedersachsen
Objektkatalog
... wird mit Hilfe von Ansicht – Objektkatalog geöffnet. ... enthält Bibliotheken und deren Inhalte. Die verschiedenen Objekte von Access werden hierarchisch angezeigt.
OpenOffice | | Folie 33Access 2007 – VBA | 06.03.08 | Seite 33
Regionales Rechenzentrum für Niedersachsen
Aufbau
Auswahl der Bibliothek.
Verschiedene Schaltflächen zum Suchen und Arbeiten in Bibliotheken.
Alle Klassen in der Bibliothek. Klassen stellen die Bücher dar.
In Abhängigkeit der ausgewählten Klasse werden Eigenschaften, Methoden und Ereignisse angezeigt.
Informationen zum ausgewählten Element.
OpenOffice | | Folie 34Access 2007 – VBA | 06.03.08 | Seite 34
Regionales Rechenzentrum für Niedersachsen
Nach Klassen suchen
Wählen Sie aus dem oberen Kombinationsfeld eine Bibliothek aus. Folgende Möglichkeiten: <Alle Bibliotheken> Access durchsucht die zu Access gehörenden Bibliotheken. In der Bibliothek
werden die Formulare, Berichte und Steuerelemente definiert. DAO enthält alle Klassen, die für die Datenverbindung zu Tabellen und
Abfragen benötigt werden. stdole enthält alles zur OLE-Automation, VBA enthält die internen Klassen von Visual Basic for Application.
Geben Sie in dem darunter stehenden Kombinationsfeld ein Suchtext ein und klicken auf das Fernglas.
Anschließend werden Ihnen alle Klassen in der rechten Liste angezeigt, die das Suchmuster enthalten.
Zu jeder Klasse werden die darin enthaltenen Elemente in der linken Liste angezeigt.
OpenOffice | | Folie 35Access 2007 – VBA | 06.03.08 | Seite 35
Regionales Rechenzentrum für Niedersachsen
Genutzte Symbole
Bibliothek
Module
Collections
Klassen
Konstanten
Eigenschaften
Standard-Eigenschaften
Methoden
Ereignisse
OpenOffice | | Folie 36Access 2007 – VBA | 06.03.08 | Seite 36
Regionales Rechenzentrum für Niedersachsen
Makrobefehle in VBA nutzen
Mit Hilfe des Objekts DoCmd können verschiedene Aktionen wie Öffnen Formular, Datenbank schließen etc. angestoßen werden.
Alle Befehle sind englischsprachig. Einige Befehle entsprechen den deutschsprachigen Makro-Befehlen.
Folgende Makrobefehle werden in VBA nicht unterstützt: HinzufügenMenü. Warnmeldung wird mit Hilfe einer MsgBox() ausgegeben. AusführenAnwendung wird durch den Befehl Shell ersetzt. AusführenCode wird durch den Aufruf von Prozeduren etc. nicht benötigt. Tastaturbefehle werden durch SendKeys ersetzt. SetzenWert. Der Wert eines Steuerelements kann direkt in VBA gesetzt
werden. StoppAlleMakros oder StopMakro.
Eine Auflistung der der Methoden von DoCmd finden Sie in der Hilfe von VBA.
OpenOffice | | Folie 37Access 2007 – VBA | 06.03.08 | Seite 37
Regionales Rechenzentrum für Niedersachsen
Beispiel
Private Sub cmdCopyPaste_Click()
If Not (IsNull(txtTextEingabe.Value)) Then txtTextEingabe.SetFocus txtTextEingabe.SelStart = markStart txtTextEingabe.SelLength = markLength DoCmd.RunCommand acCmdCopy txtTextCopy.SetFocus DoCmd.RunCommand acCmdPaste Else txtTextCopy.Value = "" End If
End Sub
Mit Hilfe von RunCommand können Befehle aus der
Menüleiste genutzt werden. In diesem Beispiel wird aus dem aktiven Steuerelement
ein Text kopiert.
... und anschließend in ein anderes aktives
Steuerelement eingefügt werden.
OpenOffice | | Folie 38Access 2007 – VBA | 06.03.08 | Seite 38
Regionales Rechenzentrum für Niedersachsen
Formulare (Forms)
... zeigen Daten aus Tabellen oder Abfragen an. ... bieten eine Eingabemaske für die gesteuerte Sammlung von Daten. ... ermöglichen eine Kommunikation zwischen dem Benutzer und Access. ... in VBA:
Mit Hilfe von DoCmd können Formulare geöffnet und geschlossen werden. Mit Hilfe der Eigenschaften kann das Formular dynamisch angepasst werden. Mit Hilfe der Methoden können schreibgeschützte Eigenschaften des
Formulars verändert werden. Es sind Event-Handler vorhanden, um auf Aktionen der Nutzer zu reagieren.
OpenOffice | | Folie 39Access 2007 – VBA | 06.03.08 | Seite 39
Regionales Rechenzentrum für Niedersachsen
Formular öffnen
DoCmd.OpenForm "frmKunde", _
acNormal, _
, , _
acFormReadOnly, _
acDialog
Welches Formular wird geöffnet?
Wie wird das Formular geöffnet? Hier wird das Formular in der Formularansicht geöffnet.
Die zwei Parameter zur Filterung der Daten sind nicht gesetzt.
Das Formular ist schreibgeschützt. Es wird zum Lesen der Daten geöffnet.
Wie verhält sich das Formular? Als Dialogfenster kann die Größe nicht verändert werden. Das Fenster kann nicht verschoben werden.
OpenOffice | | Folie 40Access 2007 – VBA | 06.03.08 | Seite 40
Regionales Rechenzentrum für Niedersachsen
Verhalten des Formulars
acWindowNormal: Das Fenster wird, wie in den Eigenschaften festgelegt, geöffnet.
acIcon: Das Fenster wird minimiert dargestellt. Die Titelleiste des Formulars wird in der Taskleiste angezeigt.
acHidden: Das Fenster wird nicht sichtbar dargestellt. Die Eigenschaft .Visible in VBA ist auf false gesetzt.
acDialog: Die Eigenschaft Gebunden und PopUp haben den Wert true. Solange das Formular geöffnet ist, kann keine andere Aktion ausgeführt
werden. Das Formular blockiert alle anderen Aktionen. Das Formular überdeckt alle anderen Formulare. Die Größe des Formulars kann nicht verändert werden.
OpenOffice | | Folie 41Access 2007 – VBA | 06.03.08 | Seite 41
Regionales Rechenzentrum für Niedersachsen
Datenmodus
acFormAdd Der Nutzer kann neue Daten eingeben. Bestehende Datensätze können nicht verändert werden.
acFormEdit Der Nutzer kann neue Daten eingeben und bestehende verändern.
acPropertySettings Der Nutzer kann nur die Eigenschaften des Formulars verändern.
acReadOnly Die Daten werden angezeigt. Sie können vom Nutzer gelesen werden. Die Daten besitzen einen Schreibschutz. Der Nutzer kann keine Daten ändern.
OpenOffice | | Folie 42Access 2007 – VBA | 06.03.08 | Seite 42
Regionales Rechenzentrum für Niedersachsen
Verweis auf das aktive Formular
Screen ... beschreibt den aktuellen Bildschirm. ... bietet einen Zugriff auf die aktiven Elementen in der Access-Anwendung.
ActiveForm ... beschreibt das Formular, welches aktuell im Vordergrund des Bildschirms
angezeigt wird. ... besitzt eine farbige Titelleiste. ... hat den Fokus.
Dim frm As Form Set frm = Screen.ActiveForm
OpenOffice | | Folie 43Access 2007 – VBA | 06.03.08 | Seite 43
Regionales Rechenzentrum für Niedersachsen
Me
... kann nur in einem Klassenmodulen eines Formulars oder Berichts genutzt werden.
... bezieht sich immer auf die aktuelle Instanz eines Objekts, in der der Code momentan ausgeführt wird.
... ist ein Synonym für ein Formular oder Bericht, welches an den Code gebunden ist.
Dim ctl As Control Set ctl = Me.Controls("txtTextCopy")
OpenOffice | | Folie 44Access 2007 – VBA | 06.03.08 | Seite 44
Regionales Rechenzentrum für Niedersachsen
Formular schließen
Dim frm As Form Set frm = Screen.ActiveForm
Set frm = Nothing
Was wird geschlossen?
Name des Objekts. Hier wird über ein Verweis der Name ermittelt.
Das Formular wird ohne Speicherung der Daten geschlossen.
DoCmd.Close acForm, frm.Name, acSaveNo
OpenOffice | | Folie 45Access 2007 – VBA | 06.03.08 | Seite 45
Regionales Rechenzentrum für Niedersachsen
Formular nach einer bestimmten Zeitspanne ...
Const spanne = 5.0Dim frm As FormDim zeit As Single Set frm = Screen.ActiveFormzeit = Timer ' Anzahl der Sekunden seit Mitternacht
Do' Die Kontrolle wird an das Betriebssystem übergeben
' Das Betriebssystem kann andere Ereignisse verarbeiten.DoEvents
Loop Until (Timer – zeit > spanne)
DoCmd.Close acForm, frm.Name, acSaveNo Set frm = Nothing
OpenOffice | | Folie 46Access 2007 – VBA | 06.03.08 | Seite 46
Regionales Rechenzentrum für Niedersachsen
... mit Hilfe des Zeitgeberintervalls schließen
Sub Form_Load()' Zeitgeberintervall wird gesetzt.Me.TimerInterval = 1000
End Sub
Sub Form_Timer()' ... wird aufgerufen, wenn das Zeitgeberintervall
' abgelaufen ist.Dim frm As Form
Set frm = Me
DoCmd.Close acForm, frm.Name, acSaveNo Set frm = Nothing
OpenOffice | | Folie 47Access 2007 – VBA | 06.03.08 | Seite 47
Regionales Rechenzentrum für Niedersachsen
Suche nach einem Formular
Dim strName As StringDim projekt As ObjectDim frmObjekt As AccessObject
strName = "frmKunde"' Das aktuelle Projekt...Set projekt = Application.CurrentProject' Alle geöffneten und ungeöffneten Formularefor Each frmObjekt in projekt.AllForms
If frmObjekt.Name Like strName thenDebug.Print "Das Formular ist vorhanden."
If frmObjekt.IsLoaded = True thenDebug.Print "Das Formular ist geöffnet."
End IfEnd If
Next frmObjekt
OpenOffice | | Folie 48Access 2007 – VBA | 06.03.08 | Seite 48
Regionales Rechenzentrum für Niedersachsen
Aktuelle Projekt und Datenbank
Application.CurrentProject bezieht sich auf das aktuelle Projekt der Access-Anwendung. .FullName gibt den Namen und den Pfad des Projekts zurück. .Path gibt nur den Speicherort des Projekts zurück. .Name gibt den Namen des Projekts zurück. .AllForms ist eine Auflistung aller Formulare in einem Projekt. .AllReports ist eine Auflistung aller Berichte in einem Projekt.
Application.CurrentDb bezieht sich auf die aktuell geöffnete Datenbank. .Close schließt die Datenbank. .Version gibt die Version der Microsoft Access-Datebank-Engine zurück. .Name enthält die Bezeichnung der Datenbank.
OpenOffice | | Folie 49Access 2007 – VBA | 06.03.08 | Seite 49
Regionales Rechenzentrum für Niedersachsen
Zugriffsmöglichkeiten auf geöffnete Formulare
Me ... bezieht sich immer auf das Objekt, an dem das Module gebunden ist. ... bezeichnet das zum Code gehörende Objekt.
Screen.ActiveForm ... bezieht sich immer auf das Formular, welches am Bildschirm im
Vordergrund liegt. ... ist ein Synonym für das aktive Formular.
Forms("frmKunde") ... bezieht sich auf die Auflistung aller geöffneten Formulare. Als Index wird der Name des Formulars genutzt.
Forms(1) ... sollte nie genutzt werden. Die Indizes sind nicht an ein bestimmtes Formular gebunden! Der Index
verändert sich in Abhängigkeit der geöffneten Formulare. Forms!frmKunde
Die Auflistung wird vom benutzerdefinierten Namen mit einem Ausrufezeichen getrennt.
OpenOffice | | Folie 50Access 2007 – VBA | 06.03.08 | Seite 50
Regionales Rechenzentrum für Niedersachsen
Eigenschaften und Methoden nutzen
Beispiele: Me.Visible = true txtName = Screen.ActiveForm.Name Forms("frmKunde").Move Top:=0, Left:=0 Forms!frmKunde.SetFocus
Eigenschaften und Methoden werden immer von der Objektvariablen mit einem Punkt getrennt.
OpenOffice | | Folie 51Access 2007 – VBA | 06.03.08 | Seite 51
Regionales Rechenzentrum für Niedersachsen
Formular vergrößern und verschieben
Const breite = 400Const hoehe = 200
' Die Höhe kann nur über die Bereiche eingestellt werden.Forms!frmKunde.Section(acDetail).Height = hoehe
' Die Breite eines Formulars...Forms!frmKunde.Width = breite
' Verschieben eines Formulars.' Top, Left kann nur über die Methode gesetzt werdenForms!frmKunde.Move 0, 0, breite, hoehe
OpenOffice | | Folie 52Access 2007 – VBA | 06.03.08 | Seite 52
Regionales Rechenzentrum für Niedersachsen
Twips per Pixel
Tw(entieh of a) I(nch) P(oint) werden für alle Größen verwendet. Umrechnung:
1 Punkt = 20 Twips 1 cm = 567 Twips 1 Zoll = 72 Punkt = 1440 Twips
In VBA sind kein Funktionen für die Umrechnung vorhanden. Mit Hilfe der Windows API kann eine eigene Prozedur für die Umrechnung erstellt werden.
OpenOffice | | Folie 53Access 2007 – VBA | 06.03.08 | Seite 53
Regionales Rechenzentrum für Niedersachsen
Bereiche eines Formulars
.Section(acHeader)
.Section(1)
.Section(acDetail)
.Section(0)
.Section(acFooter)
.Section(2)
OpenOffice | | Folie 54Access 2007 – VBA | 06.03.08 | Seite 54
Regionales Rechenzentrum für Niedersachsen
Höhe eines Formulars
Win
dow
Hei
ght
Win
dow
Hei
ght
Ihsi
deH
eigh
t
Section(0).H
eight
OpenOffice | | Folie 55Access 2007 – VBA | 06.03.08 | Seite 55
Regionales Rechenzentrum für Niedersachsen
Breite eines Formulars
Width
InsideWidth
WindowWidth
OpenOffice | | Folie 56Access 2007 – VBA | 06.03.08 | Seite 56
Regionales Rechenzentrum für Niedersachsen
Left und Top eines Formulars
Top0, 0
Left
OpenOffice | | Folie 57Access 2007 – VBA | 06.03.08 | Seite 57
Regionales Rechenzentrum für Niedersachsen
Weitere Eigenschaften und Methoden
.Visible Wenn der Wert false ist, wird der Bereich oder das gesamte Formular
ausgeblendet. Wenn der Wert true ist, wird der Bereich oder das gesamte Formular
eingeblendet. .Refresh
... aktualisiert die angezeigten Datensätze aufgrund ihrer Datenherkunft. Neue Datensätze werden nicht angezeigt.
.Repaint ... aktualisiert die Darstellung eines Formulars am Bildschirm. Berechnete Steuerelemente werden aktualisiert.
.Requery Die Datenquelle wird neu abgefragt. Neue Datensätze werden angezeigt.
.Recalc Alle berechneten Steuerelemente werden aktualisiert.
OpenOffice | | Folie 58Access 2007 – VBA | 06.03.08 | Seite 58
Regionales Rechenzentrum für Niedersachsen
Steuerelemente (Controls)
... zeigen Daten in einem Formular oder Bericht an. ... werden immer in einem Container abgelegt. Ein Steuerelement kann
nie ohne Formular oder Bericht existieren. ... werden in der Auflistung Controls eines geöffneten Formulars oder
Berichts aufgelistet. Beispiele:
Textfelder zeigen Daten an. Optionsfelder gruppieren eine bestimmte Auswahl zu einem Thema. Der
Benutzer kann ein Element aus der Gruppe auswählen. Listenfelder zeigen eine Auswahl zu einem Thema in Form einer Liste an. Der
Nutzer kann ein oder mehrere Elemente auswählen. Befehlsschaltflächen starten eine Aktion.
OpenOffice | | Folie 59Access 2007 – VBA | 06.03.08 | Seite 59
Regionales Rechenzentrum für Niedersachsen
Zugriffsmöglichkeiten auf Steuerelemente
txtField Das Steuerelement befindet sich in dem Formular, welches an den Code
gebunden ist. Me!txtField
In dem Formular Me befindet sich ein Steuerelement txtField. Me ist ein Synonym für das Formular, welches an den gegenwärtig ausgeführten Code gebunden ist.
Forms("frmKunde").Controls(txtField) Jedes Objekt vom Typ Form hat die Auflistung Controls. In dieser Auflistung
werden alle zu dem Objekt gehörenden Steuerelemente aufgelistet. Hier wird als Index einen Steuerelementname genutzt.
Me.Controls!txtField Benutzerdefinierte Objektnamen werden von der Auflistung mit Hilfe eines
Ausrufezeichens getrennt. Me.Controls(varName)
Als Index kann auch eine Variable genutzt werden. Die Variable hat als Wert den Namen eines Controls oder eine Ganzzahl.
OpenOffice | | Folie 60Access 2007 – VBA | 06.03.08 | Seite 60
Regionales Rechenzentrum für Niedersachsen
Steuerelement-Arten
Dim ctrl As ControlFor Each ctrl In Me.Controls
If ctrl.ControlType = acTextBox Thentemp = ctrl.Name
End IfNext ctrl
Me.Controls enthält eine Auflistung aller Steuerelemente auf dem dazugehörigen Formular.
ControlType gibt die Art des Steuerelements wieder. Hier wird nach Textfeldern gesucht. Für jede Art des Steuerelements wird eine Konstante definiert.
Name gibt die Bezeichnung des Steuerelements zurück.
OpenOffice | | Folie 61Access 2007 – VBA | 06.03.08 | Seite 61
Regionales Rechenzentrum für Niedersachsen
Eigenschaften oder Methoden nutzen
Beispiele: txtField.Text = 12 Me!txtField.ForeColor = RGB(255,0,0) Forms("frmKunde").Controls(txtField).Requery Me.Controls!txtField.SetFocus.
Eigenschaften und Methoden eines Steuerelements werden von der Objektvariablen mit einem Punkt getrennt.
OpenOffice | | Folie 62Access 2007 – VBA | 06.03.08 | Seite 62
Regionales Rechenzentrum für Niedersachsen
Eigenschaften
Viele Steuerelemente haben folgende Eigenschaften. Name gibt die Bezeichnung des Steuerelements zurück. BackColor legt die Hintergrundfarbe des Steuerelements fest. ForeColor legt die Vordergrundfarbe des Steuerelements fest. Häufig wird
die Schriftfarbe damit festgelegt. BorderColor, BorderWidth und BorderStyle wird für die Darstellung des
Rahmens genutzt. Die Rahmenbreite kann nur eingestellt werden, wenn die Eigenschaft SpecialEffect den Wert Flach oder Schattiert sowie BorderStyle nicht auf Transparent eingestellt ist.
Height und Width legt die Höhe und Breite eines Steuerelements fest. Top und Height ermittelt die Position des Steuerelements. Visible blendet ein Steuerelement ein oder aus. Alignment richtet den Text aus. Font legt die Schriftart fest und FontSize die Schriftgröße.
OpenOffice | | Folie 63Access 2007 – VBA | 06.03.08 | Seite 63
Regionales Rechenzentrum für Niedersachsen
Methoden
Move positioniert Steuerelement auf dem Formular. Requery fragt die Datenquelle ab und aktualisiert die Daten. SetFocus übergibt den Fokus an ein Steuerelement. Das Steuerelement
ist aktiv. Es hat die Einfügemarke.
OpenOffice | | Folie 64Access 2007 – VBA | 06.03.08 | Seite 64
Regionales Rechenzentrum für Niedersachsen
Farben setzen
Mit Hilfe der Funktion RGB(red, blue, green) werden den Eigenschaften ForeColor oder BackColor RGB-Farben zugewiesen.
Andere Möglichkeit: Für die Standardfarben schwarz (vbBlack), weiß (vbWhite), rot (vbRed), grün (vbGreen), gelb (vbYellow), blau (vbBlue), blaugrün (vbCyan) und magenta (vbMagenta) sind Farbkonstanten vordefiniert.
txtPlz.ForeColor = RGB(255, 0, 0)Me.Section(acDetail).BackColor = vbBlue
OpenOffice | | Folie 65Access 2007 – VBA | 06.03.08 | Seite 65
Regionales Rechenzentrum für Niedersachsen
RGB-Farben
... werden für die Darstellung von Farben am Bildschirm genutzt.
Das RGB-Farbsystem addiert (mischt) Licht in verschiedenen Farben.
Jede Farbe (Rot, Grün, Blau) wird in 256 Helligkeitsstufen unterteilt. Zum Beispiel: RGB(255, 255, 255) stellt die
Farbe weiß dar. RGB(0, 0, 0) stellt die Farbe
schwarz dar. RGB(255, 255, 0) stellt die
Farbe gelb dar. Um so mehr sich eine Farbe Weiß
annährt, um so heller wird sie.
OpenOffice | | Folie 66Access 2007 – VBA | 06.03.08 | Seite 66
Regionales Rechenzentrum für Niedersachsen
Gebundene und ungebundene Steuerelemente
Ungebundene Steuerelemente ... sind an keine Datenquelle gebunden. ... können feste Werte oder Werte, die durch einen Ausdruck berechnet
werden, enthalten. ... können Hilfetext oder Beschreibungen für den Nutzer enthalten.
Gebundene Steuerelemente … spiegeln immer die Daten eines Feldes aus einer Tabelle oder Abfrage
wieder. .. … sind immer mit einer Spalte aus einer Tabelle oder Abfrage verbunden. .. … filtern mit Hilfe einer SQL-Anweisung Daten aus einer Tabelle heraus.
OpenOffice | | Folie 67Access 2007 – VBA | 06.03.08 | Seite 67
Regionales Rechenzentrum für Niedersachsen
Werte eines Textfeldes
.Value enthält den gespeicherten Wert des Textfeldes. .Text enthält den formatierten Text eines Steuerelements. Die
Eigenschaft kann nur genutzt werden, wenn das Textfeld den Fokus hat. Die Eigenschaft kann einen anderen Wert besitzen als .Value.
.OldValue enthält den ursprünglichen Wert eines gebundenen Textfeldes. Der Wert ist schreibgeschützt.
OpenOffice | | Folie 68Access 2007 – VBA | 06.03.08 | Seite 68
Regionales Rechenzentrum für Niedersachsen
Steuerelemente aktivieren oder sperren
Falls Enabled true (wahr) ist, kann das Steuerelement den Fokus bekommen. Die Einfügemarke kann in das Steuerelement gesetzt werden.
Falls Locked true ist, können die Daten nicht bearbeitet oder gelöscht werden. Für die Daten besteht ein Schreibschutz.
Schreibschutz Abgeblendet Fokus
Enabled (Aktiviert)
Locked (Gesperrt)
True FalseTrue TrueFalse FalseFalse True
OpenOffice | | Folie 69Access 2007 – VBA | 06.03.08 | Seite 69
Regionales Rechenzentrum für Niedersachsen
Zugriffsrechte für die Datensätze
Falls AllowEdits true ist, ist eine Bearbeitung der Datensätze möglich. Falls AllowDeletions true ist, können Datensätze gelöscht werden. Falls AllowAdditions true ist, können Datensätze angefügt werden. Falls DataEntry true ist, werden keine vorhandenen Datensätze
angezeigt. Es wird ein leerer Datensatz angezeigt. Es können neue Datensätze eingegeben werden.
Forms("frmKunde").AllowEdits = True
Forms("frmKunde").AllowDeletions = False
Forms("frmKunde").AllowAdditions = True
Forms("frmKunde").DataEntry = True
OpenOffice | | Folie 70Access 2007 – VBA | 06.03.08 | Seite 70
Regionales Rechenzentrum für Niedersachsen
Formular mit Schreibschutz öffnen
Das Formular wird nur zum Lesen der Daten geöffnet. Die vorhandenen Daten können nicht verändert werden. Neue Daten können nicht hinzugefügt werden.
DoCmd.OpenForm "frmKunde", acNormal, _
, , _ acFormReadOnly, _
acWindowNormal
OpenOffice | | Folie 71Access 2007 – VBA | 06.03.08 | Seite 71
Regionales Rechenzentrum für Niedersachsen
Ereignis (Event)
... tritt immer in Verbindung mit einem Objekt auf. ... wird vom Nutzer des Formulars oder Steuerelements ausgelöst. ... ist eine Reaktion auf eine Benutzeraktion. Beispiele für Ereignisse:
Die Größe eines Formulars wird verändert. Ein weiteres Fenster wird mit Hilfe einer Schaltfläche geöffnet. Ein Optionsfeld wird mit Hilfe der Maus aktiviert. Ein Textfeld wird nach der Eingabe von Zeichen verlassen. In ein Textfeld werden Zeichen mit Hilfe der Tastatur eingegeben. Aus einer Liste werden Elemente ausgewählt.
OpenOffice | | Folie 72Access 2007 – VBA | 06.03.08 | Seite 72
Regionales Rechenzentrum für Niedersachsen
Ereignis-Gruppen in Access
Fenster- und Fokus-Ereignis: Die Größe eines Formulars wird verändert. Ein Formular wird geöffnet.
Tastatur- und Maus-Ereignis: Ein Optionsfeld wird mit Hilfe der Maus aktiviert. Es werden Zeichen in ein Textfeld eingegeben.
Daten- und Filter-Ereignisse: Die angezeigten Daten werden verändert. Ein Datensatz wird gelöscht.
Fehler-Ereignisse oder zeitabhängige Ereignisse: Nach einer bestimmten Zeitspanne wird ein Formular geschlossen.
OpenOffice | 11.12.08 | Folie 73Access 2007 – VBA | 06.03.08 | Seite 73
Regionales Rechenzentrum für Niedersachsen
Ereignisprozeduren (Event-Handler)
... fangen ein Ereignis ab. ... reagieren mit Hilfe von Anweisungen auf das ausgelöste Ereignis. ... enthalten häufig keine Anweisungen. Der Aufruf des Ereignisses bleibt
ohne Folgen. ... bestehen genauso wie selbstdefinierte Prozeduren aus einem
Prozedurenkopf und -rumpf. ... geben kein Wert zurück. ... sind immer privat. Sie können nur innerhalb des Moduls, in dem sie
definiert sind, aufgerufen werden.
Private Sub plz_BeforeUpdate (Cancel As Integer)End Sub
Private Sub Form_Load()End Sub
OpenOffice | | Folie 74Access 2007 – VBA | 06.03.08 | Seite 74
Regionales Rechenzentrum für Niedersachsen
Aufbau des Prozedurkopfs
Private Sub Form_Load ()
Private Sub plz_BeforeUpdate (Cancel As Integer)
Jede Prozedur beginnt mit diesem Schlüsselwort und endet dementsprechend mit End Sub.
Der Bezeichner eines Event-Handler setzt sich aus dem Namen des Steuerelements oder Form (Formular) und dem Ereignis zusammen.
In Abhängigkeit des Ereignisses werden dem Event-Handler Informationen übergeben.
Auf ein Event-Handler kann nur innerhalb des Moduls zugegriffen werden.
OpenOffice | | Folie 75Access 2007 – VBA | 06.03.08 | Seite 75
Regionales Rechenzentrum für Niedersachsen
Formular-Ereignisse
Load, wenn das Formular geöffnet wird und die Datensätze angezeigt werden.
Open, wenn das Formular geöffnet wird und bevor die Datensätze angezeigt werden.
Close, wenn das Formular geschlossen wird. Current, wenn von einem Datensatz zum anderen gesprungen wird. Der
Datensatzzeiger wird bewegt. Activate, wenn das Formular den Fokus bekommt. Deactivate, wenn das momentan aktuelle Formular den Fokus abgibt. Resize, wenn die Größe des Fensters geändert wird. Timer, sobald das ZeitgeberIntervall abgelaufen ist.
OpenOffice | | Folie 76Access 2007 – VBA | 06.03.08 | Seite 76
Regionales Rechenzentrum für Niedersachsen
Beispiel
Das Ereignis Form_Load wird häufig genutzt, um das Formular anzupassen.
Beispiele: Standardeinstellungen der Elemente werden gesetzt. Steuerelemente, die in Abhängigkeit eines Ereignisses eingeblendet werden,
werden ausgeblendet.
Private Sub Form_Load() chkBananen.Value = False chkBirne.Value = False chkAepfel.Value = False txtSumme.Value = "0.00 €"End Sub
OpenOffice | | Folie 77Access 2007 – VBA | 06.03.08 | Seite 77
Regionales Rechenzentrum für Niedersachsen
Öffnen eines Formulars
Open(Beim Öffnen)
Load(Beim Laden)
Resize(Bei Größenänderung)
Activate(Bei Aktivierung)
Current(Beim Anzeigen)
DoC
md.
Ope
nFor
m
OpenOffice | | Folie 78Access 2007 – VBA | 06.03.08 | Seite 78
Regionales Rechenzentrum für Niedersachsen
Schließen eines Formulars
Unload(Beim Entladen)
Deactivate(Bei Deaktivierung)
Close(Beim Schließen)
DoC
md.C
lose
OpenOffice | | Folie 79Access 2007 – VBA | 06.03.08 | Seite 79
Regionales Rechenzentrum für Niedersachsen
Daten- und Filter-Ereignisse des Formulars
BeforeDelConfirm und AfterDelConfirm werden durch das Löschen eines Datensatzes ausgelöst, aber bevor oder nach dem Anzeigen der Warnmeldung.
Delete wird ausgelöst, wenn ein Datensatz gelöscht wird. Das Ereignis entspricht der Aktion Datensatz löschen.
BeforeUpdate und AfterUpdate werden vor oder nach der Aktualisierung der Daten ausgelöst.
Dirty und DataChange bei Änderungen an den Daten.
OpenOffice | | Folie 80Access 2007 – VBA | 06.03.08 | Seite 80
Regionales Rechenzentrum für Niedersachsen
Dateneingabe und -speicherung
BeforeUpdate(Vor Aktualisierung)
AfterUpdate(Nach Aktualisierung)
AfterInsert(Nach Eingabe)
Current(Beim Anzeigen)
Daten validieren, prüfen
Datensatz speichern
OpenOffice | | Folie 81Access 2007 – VBA | 06.03.08 | Seite 81
Regionales Rechenzentrum für Niedersachsen
Löschbestätigung anpassen
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Const strClear As String = "Möchten Sie den Datensatz löschen?"Dim result As VbMsgBoxResult
result = MsgBox(strClear, vbYesNo + vbCritical, _ "Datensatz löschen")
if result = vbNo ThenCancel = True
End if
End SubDie Löschung des Datensatzes wird
abgebrochen.
OpenOffice | | Folie 82Access 2007 – VBA | 06.03.08 | Seite 82
Regionales Rechenzentrum für Niedersachsen
Ereignisse von Steuerelementen
BeforeUpdate wird ausgelöst, wenn ein Datensatz geändert wurde, aber noch nicht gespeichert wurde.
AfterUpdate wird ausgelöst, wenn ein Datensatz geändert wurde und in der Datenbank gespeichert wurde.
Change wird ausgelöst, wenn der Inhalt des Steuerelements geändert wird.
Enter wird ausgelöst, wenn in das Steuerelement hineingegangen wird. Exit wird ausgelöst, wenn das Steuerelement verlassen wird.
OpenOffice | | Folie 83Access 2007 – VBA | 06.03.08 | Seite 83
Regionales Rechenzentrum für Niedersachsen
Steuerelemente betreten und verlassen
Enter(Beim Hingehen)
GotFocus(Bei Fokuserhalt)
Exit(Beim Verlassen)
LostFocus(Bei Fokusverlust)
OpenOffice | | Folie 84Access 2007 – VBA | 06.03.08 | Seite 84
Regionales Rechenzentrum für Niedersachsen
Auswertung eines Optionsfeldes
Private Sub fraAmpel_AfterUpdate() Select Case fraAmpel.Value Case 1 rectFarbe.BackColor = RGB(255, 0, 0) Case 2 rectFarbe.BackColor = RGB(0, 255, 0) Case 3 rectFarbe.BackColor = RGB(255, 200, 0) Case Else rectFarbe.BackColor = RGB(0, 0, 0) End Select Me.RefreshEnd Sub
OpenOffice | | Folie 85Access 2007 – VBA | 06.03.08 | Seite 85
Regionales Rechenzentrum für Niedersachsen
Ziffern aus einem Textfeld filtern
Private Sub fraWaehrung_AfterUpdate() Const komma As String = "," Const punkt As String = "." Dim betrag As String Dim curBetrag As Currency betrag = txtGeld.Value ' Problem: Mehrere Kommatas If InStr(betrag, komma) Then betrag = Replace(betrag, komma, punkt) End If ' Problem: Erstes Zeichen ist ein Buchstaben... curBetrag = Val(betrag) 'Besser: Nach der Eingabe wird jedes Zeichen überprüft
OpenOffice | | Folie 86Access 2007 – VBA | 06.03.08 | Seite 86
Regionales Rechenzentrum für Niedersachsen
Daten formatieren
Private Sub fraWaehrung_AfterUpdate() Dim betrag As String Dim curBetrag As Currency Dim sumBetrag As Currency betrag = txtGeld.Value If IsNumeric(betrag) Then curBetrag = CCur(betrag) Select Case fraWaehrung Case 1: sumBetrag = curBetrag * 0.7992 txtnewGeld.Value = Format$(sumBetrag * 1000, "0\.000 £") Case 2: sumBetrag = curBetrag * 7.4576 txtnewGeld.Value = Format$(sumBetrag * 1000, "0\.000 DKK") Case 3: sumBetrag = curBetrag * 3.3486 txtnewGeld.Value = Format$(sumBetrag * 1000, "0\.000 PLN") End Select Else txtnewGeld.Value = "Falsche Eingabe" End If
OpenOffice | | Folie 87Access 2007 – VBA | 06.03.08 | Seite 87
Regionales Rechenzentrum für Niedersachsen
Tastatur- und Maus-Ereignisse
KeyDown, wenn die Taste gedrückt wird. KeyPress, wenn die Taste gehalten wird. KeyUp, wenn die Taste losgelassen wird. Click, wenn auf eine Schaltfläche etc. mit der Maus geklickt wird. MouseDown, wenn die Maustaste gedrückt wird. MouseUp, wenn die Maustaste losgelassen wird. MouseMove, wenn der Maus bewegt wird. Falls die Eigenschaft Me.KeyPreview = True ist, werden
Tastatureingaben zuerst vom Formular empfangen und dann an das aktive Steuerelement weitergeleitet. Bei der Standardeinstellung False empfängt nur das aktive Steuerelement die Tastatureingaben.
OpenOffice | | Folie 88Access 2007 – VBA | 06.03.08 | Seite 88
Regionales Rechenzentrum für Niedersachsen
Reihenfolge der Tastatur-Ereignisse
KeyDown(Bei Taste Ab)
KeyPress(Bei Taste)
KeyUp(Bei Taste Auf)
OpenOffice | | Folie 89Access 2007 – VBA | 06.03.08 | Seite 89
Regionales Rechenzentrum für Niedersachsen
Beispiel: KeyPress
Private Sub plz_KeyPress(KeyAscii As Integer)
If (KeyAscii < 48) Or (KeyAscii > 57) ThenKeyAscii = 0
End If
End Sub
Jedes ANSI-Zeichen wird mit Hilfe einer Ganzzahl codiert. Diese Ganzzahl kann für die Überprüfung der eingegebenen Zeichen
genutzt werden. Falls das eingegebene Zeichen keine Ziffer ist, wird das Zeichen mit der
Anweisung KeyAscii = 0 unterdrückt.
OpenOffice | 11.12.08 | Folie 90Access 2007 – VBA | 06.03.08 | Seite 90
Regionales Rechenzentrum für Niedersachsen
ANSI-Zeichen; 0 bis 125
OpenOffice | 11.12.08 | Folie 91Access 2007 – VBA | 06.03.08 | Seite 91
Regionales Rechenzentrum für Niedersachsen
ANSI-Zeichen; 126 bis 255
OpenOffice | | Folie 92Access 2007 – VBA | 06.03.08 | Seite 92
Regionales Rechenzentrum für Niedersachsen
Beispiel: KeyUp
Private Sub plz_KeyUp(KeyCode As Integer, Shift As Integer)
If (KeyCode < 48) Or (KeyCode > 57) ThenKeyCode = 0
End If
End Sub
Jedes ANSI-Zeichen wird mit einen virtuellen Tastencode von Windows versehen. Das Alphabet sowie die Ziffern haben die gleiche Codierung wie in der ANSI-
Tabelle. Zusätzlich können Funktions- und Navigationstasten abgefragt werden.
Der Parameters KeyCode enthält die Codierung des Zeichens. Shift: Sind die Tasten <UMSCHALT>, <STRG> oder <ALT> mit einer
anderen Taste gedrückt wurden?
OpenOffice | | Folie 93Access 2007 – VBA | 06.03.08 | Seite 93
Regionales Rechenzentrum für Niedersachsen
Focus setzen
With txtGedicht.Valueautor = Instr(.Value, "Autor")
if autor Then.SetFocus.SelStart = autor - 1
End ifEnd With
Mit Hilfe von .SetFocus bekommt das angegebene Steuerelement den Fokus.
Das Steuerelement wird aktiv. In einem Textfeld wird die Einfügemarke angezeigt.
OpenOffice | | Folie 94Access 2007 – VBA | 06.03.08 | Seite 94
Regionales Rechenzentrum für Niedersachsen
Einfügemarke in einem Textfeld setzen
With txtGedicht.Valueautor = Instr(.Value, "Autor")
if autor Then.SetFocus.SelStart = autor - 1
End ifEnd With
.SelStart setzt die Einfügemarke an eine bestimmte Position. .SelStart = 0 setzt die Einfügemarke an den Anfang eines Textes. .SelStart = Len(text) setzt die Einfügemarke an das Ende des
Textes. In diesem Beispiel wird die Einfügemarke in Abhängigkeit der Position des
Suchtextes gesetzt.
OpenOffice | | Folie 95Access 2007 – VBA | 06.03.08 | Seite 95
Regionales Rechenzentrum für Niedersachsen
Markierter Text
With txtGedicht.Valueautor = Instr(.Value, "Autor")
if autor Then.SetFocus.SelLength = Len("Ringelnatz")temp = .SelText
End ifEnd With
.SelLength markiert eine bestimmte Anzahl von Zeichen ab der Einfügemarke. Falls der Nutzer Text markiert hat, wird die Anzahl der markierten Zeichen zurück gegeben.
.SelText enthält die markierten Zeichen.
OpenOffice | | Folie 96Access 2007 – VBA | 06.03.08 | Seite 96
Regionales Rechenzentrum für Niedersachsen
Kontrollkästchen
... ermöglichen eine Mehrfach-Auswahl aus einer Gruppe von Möglichkeiten. Anforderung von Informationsmaterial. Bestellung von Waren.
... werden als Quadrate dargestellt. Rechts vom Quadrat befindet sich ein Bezeichnungsfeld, welches die Auswahlmöglichkeit beschreibt.
... arbeiten wie ein Schalter. Wenn ein Kontrollkästchen aktiv ist, wird es mit einem Mausklick deaktiviert und umgekehrt.
Ein Häkchen im Quadrat kennzeichnet ein aktives Kontrollkästchen. .Value gibt True (aktiv) oder False (deaktiv) zurück.
OpenOffice | | Folie 97Access 2007 – VBA | 06.03.08 | Seite 97
Regionales Rechenzentrum für Niedersachsen
Kontrollkästchen abfragen
If chkBananen.Value = True Then ergebnis = ergebnis + 1.99End If If chkBirne.Value = True Then ergebnis = ergebnis + 2.99End If If chkAepfel.Value = True Then ergebnis = ergebnis + 2.33End If
OpenOffice | | Folie 98Access 2007 – VBA | 06.03.08 | Seite 98
Regionales Rechenzentrum für Niedersachsen
Optionsgruppen
Der Nutzer kann eine Möglichkeit aus vielen wählen. Beispiel: Getränkeautomat. Kleidergrößen für einen bestimmten Artikel.
... bestehen aus Optionsfeldern, die als runde Kreise dargestellt werden. Rechts vom Quadrat befindet sich ein Bezeichnungsfeld, welches die Auswahlmöglichkeit beschreibt.
Falls ein Optionsfeld in einer Gruppe aktiviert wird, werden alle anderen Optionsfelder deaktiviert. Es kann immer nur eine Möglichkeit aus einer Gruppe ausgewählt werden.
Ein aktives Optionsfeld wird durch einen schwarzen Kreis im Kreis gekennzeichnet.
.Value der Optionsgruppe gibt eine Ganzzahl zurück, die das aktive Optionsfeld eindeutig identifiziert.
OpenOffice | | Folie 99Access 2007 – VBA | 06.03.08 | Seite 99
Regionales Rechenzentrum für Niedersachsen
Optionsgruppe abfragen
Select Case fraWaehrung Case 1: sumBetrag = curBetrag * 0.7992 txtnewGeld.Value = Format$(sumBetrag * 1000, "0\.000 £") Case 2: sumBetrag = curBetrag * 7.4576 txtnewGeld.Value = Format$(sumBetrag * 1000, "0\.000 DKK") Case 3: sumBetrag = curBetrag * 3.3486 txtnewGeld.Value = Format$(sumBetrag * 1000, "0\.000 PLN")End Select
OpenOffice | | Folie 100Access 2007 – VBA | 06.03.08 | Seite 100
Regionales Rechenzentrum für Niedersachsen
.Value
Ein Klick auf ein Optionsfeld innerhalb einer Gruppe löst das OnClick-Ereignis der Optionsgruppe aus.
OptionValue ist eine Eigenschaft des Optionsfeldes. Die Eigenschaft enthält einen Integer-Wert, der das Optionsfeld eindeutig identifiziert.
Value ist eine Eigenschaft der Optionsgruppe. Die Eigenschaft enthält die ID des aktiven Optionsfeldes. Der Eigenschaft wird der Wert in der Eigenschaft OptionValue eines Optionsfeldes übergeben.
OpenOffice | | Folie 101Access 2007 – VBA | 06.03.08 | Seite 101
Regionales Rechenzentrum für Niedersachsen
Listenfelder
... bestehen aus mehreren Zeilen von Elementen. ... können mehrspaltig sein. ... ermöglichen eine Auswahl aus einer großen Anzahl von Möglichkeiten. ... erlauben eine Mehrfachauswahl. Das Auswählen von mehreren
Elementen ist aber für viele Nutzer ungewöhnlich und führt zur Verwirrung.
OpenOffice | | Folie 102Access 2007 – VBA | 06.03.08 | Seite 102
Regionales Rechenzentrum für Niedersachsen
Eigenschaften der Spalten und Elemente
With lstKleidung.ColumnCount = 1.ColumnWidths = "2 cm".AllowValueListEdits = False.BoundColumn = 1
End With
ColumnCount: Aus wie vielen Spalten besteht das Listenfeld? ColumnWidths: Wie groß ist jede Spalte? Die Angabe "0cm; 2 cm"
blendet die erste Spalte aus und die zweite Spalte ist zwei Zentimeter breit.
BoundColumn bezeichnet die gebundene Spalte. Hier wird der Wert der ersten Spalte der markierten Zeile gespeichert.
AllowValueListEdits sperrt das Editieren von Listenelementen.
OpenOffice | | Folie 103Access 2007 – VBA | 06.03.08 | Seite 103
Regionales Rechenzentrum für Niedersachsen
Datenquelle: Wertliste
With lstKleidung.RowSourceType = "Value List".RowSource = "Pullover; Bluse; Hose"
End With
Die Art der angezeigten Daten wird durch RowSourceType festgelegt. Hier wird eine Wertliste genutzt. Das heißt, die Daten kommen nicht aus einer Tabelle oder Abfrage, sondern werden direkt vom Entwickler eingegeben.
RowSource legt die Daten in Abhängigkeit von RowSourceType fest.. Hier wird eine Liste von Werten in der Formularansicht angezeigt. Die einzelnen Elemente der Liste werden durch das Semikolon getrennt.
OpenOffice | | Folie 104Access 2007 – VBA | 06.03.08 | Seite 104
Regionales Rechenzentrum für Niedersachsen
Daten hinzufügen
With lstKleidung.RowSourceType = "Value List".RowSource = "".AddItem "Pullover".AddItem "Hemd", .ListCount - 1
End With
Voraussetzung: Die Datenquelle muss eine Wertliste sein. Die Datenquelle wird geleert (.RowSource = ""). Anschließend wird ein Element an das Ende der Liste eingefügt
(.AddItem "Pullover"). Der Methode kann auch ein Index übergeben bekommen
(.AddItem "Hemd", .ListCount - 1). Der Index legt die Zeile fest, an der das neue Element eingefügt wird. Alle vorhandenen Elemente werden ab dieser Position um eine Zeile nach unten verschoben.
OpenOffice | | Folie 105Access 2007 – VBA | 06.03.08 | Seite 105
Regionales Rechenzentrum für Niedersachsen
Daten in mehrspaltigen Listen hinzufügen
With lstKleidung.ColumnCount = 1.ColumnWidths = "2 cm; 3cm".AllowValueListEdits = False.BoundColumn = 1.RowSourceType = "Value List".RowSource = "".AddItem "Pullover;Baumwolle".AddItem "Pullover;Mischgewebe"
End With
Die verschiedenen Listenelemente werden durch ein Semikolon getrennt.
OpenOffice | | Folie 106Access 2007 – VBA | 06.03.08 | Seite 106
Regionales Rechenzentrum für Niedersachsen
Ausgewähltes Element löschen
With lstKleidung.RemoveItem(.Column(.BoundColumn – 1, .ListIndex).RemoveItem(.ListCount - 1)
End With
RemoveItem ... löscht den angegebenen Wert und damit das Element aus der Liste. In
diesem Beispiel wird der Wert aus der gebundenen Spalte in der markierten Zeile für das Löschen des Listenelements genutzt. ListIndex gibt die Zeile des ausgewählten Elements zurück.
... löscht in Abhängigkeit des Index ein Listenelement. In diesem Beispiel wird in Abhängigkeit der Anzahl (.ListCount) das letzte Element in der Liste gelöscht.
... kann nur Elemente aus einer Wertliste löschen.
OpenOffice | | Folie 107Access 2007 – VBA | 06.03.08 | Seite 107
Regionales Rechenzentrum für Niedersachsen
Alle Elemente löschen
With lstKleidungDo While .ListCount > 0
.RemoveItem(0)Loop
End With
Es wird immer das erste Element gelöscht. Der Index des letzten Elements würde sich in Abhängigkeit der Anzahl der Elemente immer verändern.
Das erste Element wird so lange gelöscht bis die Anzahl der Elemente gleich null ist.
OpenOffice | | Folie 108Access 2007 – VBA | 06.03.08 | Seite 108
Regionales Rechenzentrum für Niedersachsen
Daten aus einer Tabelle
With lstKleidung.ColumnCount = 2.ColumnWidths = "1cm; 2cm".AllowValueListEdits = False.BoundColumn = 1.RowSourceType = "Table/Query".RowSource = "tblKleidung"
End With
Als Grundlage wird in dem Beispiel eine Tabelle genutzt. RowSourceType wird dementsprechend angepasst.
RowSource enthält den Namen einer Tabelle oder Abfrage als String.
OpenOffice | 11.12.08 | Folie 109Access 2007 – VBA | 06.03.08 | Seite 109
Regionales Rechenzentrum für Niedersachsen
Ausflug zu SQL (Structured Query Language)
Strukturierte Abfragesprache für relationale Datenbanken. Datendefinition, -manipulation, -abfrage. ... definiert Kriterien, um nach Daten zu suchen. ... kann eine Menge von Datensätze automatisch aktualisieren oder
löschen. ... besteht aus sehr wenigen Kommandos, sehr vielen Schlüsselwörter
und einfachen Funktionen. In SQL sind keine Schleifen, bedingte Anweisungen oder die Nutzung von
Variablen implementiert.
OpenOffice | 11.12.08 | Folie 110Access 2007 – VBA | 06.03.08 | Seite 110
Regionales Rechenzentrum für Niedersachsen
Werte in der Tabelle ansehen
Durch das Sternchen werden alle Datensätze aus einer Tabelle angezeigt. SELECT (Wähle aus, Selektierte) alle FROM (Wo?, von) tabelle.
SELECT * FROM tabellenname
OpenOffice | 11.12.08 | Folie 111Access 2007 – VBA | 06.03.08 | Seite 111
Regionales Rechenzentrum für Niedersachsen
Bestimmte Spalten auswählen
Das Sternchen kann durch Spaltennamen in der Tabelle ersetzt werden. Es werden nur die Daten in den angegebenen Spalten angezeigt. Die Spaltennamen
... werden durch ein Kommata getrennt. ... müssen in der angegebenen Tabelle vorkommen. Andernfalls wird ein
Fehler angezeigt. Die Reihenfolge der Spaltennamen spielt keine Rolle.
SELECT datenfeld1, datenfeld2, ... FROM tabellenname
OpenOffice | 11.12.08 | Folie 112Access 2007 – VBA | 06.03.08 | Seite 112
Regionales Rechenzentrum für Niedersachsen
Daten sortieren
Hier werden die Daten sortiert. ... ORDER BY datenfeld ASC.
ASC entspricht einer aufsteigenden Sortierung (A bis Z und 0 bis 9). ... ist die Standardsortierung.
... ORDER BY datenfeld DESC. DESC entspricht einer absteigenden Sortierung (Z bis A und 9 bis 0).
Es kann mit Hilfe von ORDER BY feld1, feld2 mehrere Felder sortiert werden. Die Daten werden zuerst nach feld1 sortiert und anschließend nach feld2.
SELECT * FROM tabellenname ORDER BY datenfeld
OpenOffice | | Folie 113Access 2007 – VBA | 06.03.08 | Seite 113
Regionales Rechenzentrum für Niedersachsen
SQL als Datenquelle in Listen nutzen
Dim sqlString As StringsqlString = "SELECT * FROM tblKleidung"sqlString = sqlString & " ORDER BY Kleidung"With lstKleidung
.ColumnCount = 2
.ColumnWidths = "0cm; 2cm"
.AllowValueListEdits = False
.BoundColumn = 1
.RowSourceType = "Table/Query"
.RowSource = sqlStringEnd With ... entspricht der SQL-Ansicht
einer Abfrage. Jede Abfrage in Access wird intern in SQL
gespeichert.
OpenOffice | | Folie 114Access 2007 – VBA | 06.03.08 | Seite 114
Regionales Rechenzentrum für Niedersachsen
Auswahl der Elemente einschränken
Dim sqlString As StringsqlString = "SELECT * FROM tblKleidung"sqlString = " WHERE Kleidung LIKE 'H*'"sqlString = sqlString & " ORDER BY Kleidung"With lstKleidung
.ColumnCount = 2
.ColumnWidths = "0cm; 2cm"
.AllowValueListEdits = False
.BoundColumn = 1
.RowSourceType = "Table/Query"
.RowSource = sqlStringEnd With
WHERE leitet die Bedingung ein. Die
Bedingung steht immer im Anschluss an der Auswahl der
Felder. Die Bedingung werden ähnlich wie in der Zeile Kriterien in der Abfrage gebildet.
OpenOffice | | Folie 115Access 2007 – VBA | 06.03.08 | Seite 115
Regionales Rechenzentrum für Niedersachsen
Listenelemente
liste.Column(0) gibt den Wert in der ersten Spalte der markierten Zeile wieder. Die erste Spalten hat den Index 0.
liste.Column(1, 2) gibt den Wert in der zweiten Spalte der dritten Zeile wieder. Die erste Zeile hat den Index 0.
Falls der Spalten- oder Zeilenindex der maximalen Anzahl der Spalten oder Zeilen überschreitet, wird keine Fehlermeldung ausgegeben. Der Rückgabewert ist null.
Mit Hilfe von liste.ColumnCount() kann die Anzahl der Spalten ermittelt werden.
Mit Hilfe von liste.ListCount() kann die Anzahl der Zeilen ermittelt werden.
OpenOffice | | Folie 116Access 2007 – VBA | 06.03.08 | Seite 116
Regionales Rechenzentrum für Niedersachsen
Ausgewähltes Element
auswahl = lstKleidung.Valueauswahl = lstKleidung.Column(1, lstKleidung.ListIndex)
.Value liefert den Wert der gebundenen Spalte der markierten Zeile. .ListIndex liefert den Index der ausgewählten Zeile. Beide Eigenschaften können nur bei einer Auswahl von einem Element
genutzt werden.
OpenOffice | | Folie 117Access 2007 – VBA | 06.03.08 | Seite 117
Regionales Rechenzentrum für Niedersachsen
Ausgewähltes Element
With lstKleidungFor count = 0 To .ListCount – 1
If .Selected(count)auswahl = .Column(.BoundColumn – 1, count)Exit For
End IfNext count
End With
Die Liste wird vollständig durchlaufen. Mit Hilfe von .Selected wird überprüft, ob die Zeile markiert ist.
Falls die Zeile markiert ist, wird die gebundene Spalte gespeichert und die Schleife verlassen.
Falls mehr als ein Element ausgewählt werden kann, darf die Schleife nicht vorzeitig abgebrochen werden.
OpenOffice | | Folie 118Access 2007 – VBA | 06.03.08 | Seite 118
Regionales Rechenzentrum für Niedersachsen
Kombinationsfelder
... sind eine Kombination aus einem Textfeld und einem Listenfeld. Das Textfeld ist sichtbar. Das Listenfeld wird mit dem Pfeil nach unten am rechten Rand des Textfeldes
geöffnet. Der Nutzer kann
... Elemente aus der Liste auswählen. ... Werte in das Textfeld eingeben.
Das ausgewählte Element wird im Textfeld angezeigt.
OpenOffice | | Folie 119Access 2007 – VBA | 06.03.08 | Seite 119
Regionales Rechenzentrum für Niedersachsen
Textfeld leeren und Liste automatisch öffnen
With cmbMitarbeiterNew
.Value = ""
.SetFocus
.DropdownEnd With
Das Textfeld wird geleert. Es ist kein Listenelement markiert. Der eingegebene Text wird entfernt.
Die Liste des Kombinationsfeldes wird automatisch geöffnet.
OpenOffice | | Folie 120Access 2007 – VBA | 06.03.08 | Seite 120
Regionales Rechenzentrum für Niedersachsen
With nutzen
Private Sub Form_Load() Dim sqlSource As String sqlSource = "SELECT [tblGroesse].[IDGroesse], " sqlSource = sqlSource & "[tblGroesse].[groesse] " sqlSource = sqlSource & "FROM tblGroesse " sqlSource = sqlSource & " ORDER BY [groesse]" With cboGroesse .RowSourceType = "Table/Query" .RowSource = sqlSource .ColumnCount = 2 .ColumnWidths = "0cm; 2cm" .BoundColumn = 1 .LimitToList = True .AllowValueListEdits = False End WithEnd Sub
OpenOffice | | Folie 121Access 2007 – VBA | 06.03.08 | Seite 121
Regionales Rechenzentrum für Niedersachsen
Bearbeitung der Listenelemente sperren
LimitToList beschränkt die Eingabe in das Textfeld nur auf Elemente, die in der Liste vorkommen. Falls Text eingegeben wird, der nicht mit einem Listenelement übereinstimmt, wird eine Fehlermeldung ausgegeben.
AllowValueListEdits erlaubt die Bearbeitung vorhandener Listenelemente. Voraussetzung: Als Datenquelle wird eine Wertliste genutzt.
Mit Hilfe von ListItemsEditForm wird ein Formular zur Speicherung und Bearbeitung von nicht, in der Liste vorhandenen, Elementen angegeben. Die Quelle der Liste muss eine Wertliste sein.
OpenOffice | | Folie 122Access 2007 – VBA | 06.03.08 | Seite 122
Regionales Rechenzentrum für Niedersachsen
Daten im Textfeld nicht in der Tabelle vorhanden
Private Sub cboGroesse_NotInList(NewData As String, Response As Integer) Dim strError As String Dim result As VbMsgBoxResult Dim count As Integer Dim element As String strError = "Der Wert ist nicht in der Liste vorhanden." strError = strError & vbCrLf & "Möchten Sie den Wert übernehmen?" result = MsgBox(strError, vbInformation + vbYesNo) If result = vbNo Then MsgBox "Bitte wählen Sie ein Element aus der Liste aus" cboGroesse.Text = "" 'Textfeld leeren Response = acDataErrContiune 'Standard-Meldung unterdrücken Else DoCmd.SetWarnings False 'Warnmeldungen ausstellen DoCmd.RunSQL "INSERT INTO tblGroesse (groesse) " & _ "VALUES (" & NewData & ");" DoCmd.SetWarnings True Response = acDataErrAdded 'Standard-Meldung unterdrücken
'Liste automatisch aktualisieren End If End Sub
OpenOffice | 11.12.08 | Folie 123Access 2007 – VBA | 06.03.08 | Seite 123
Regionales Rechenzentrum für Niedersachsen
SQL-Anweisung "Einfügen"
INSERT INTO tabellenname(Spaltenname, Spaltenname, ...)
VALUES (Wert1, Wert2, ...);
In welche Tabelle sollen die Daten eingefügt werden?
Liste von Spaltennamen, in der die Daten abgelegt werden. Die Listenelemente werden durch Kommata getrennt.
Mit welchen Werten werden die Spalten belegt?
Werte <-> Spalten.
OpenOffice | | Folie 124Access 2007 – VBA | 06.03.08 | Seite 124
Regionales Rechenzentrum für Niedersachsen
Mauszeiger
Mit Hilfe von Screen.MousePointer können folgende Icons genutzt werden: 0 Standardeinstellung. 1 Auswahlpfeil. 3 Einfügemarke. 7 Vertikale Größe ändern. 8 Horizontale Größe ändern. 11 Sanduhr.
DoCmd.Hourglass blendet die Sanduhr als Mauszeiger ein oder aus.
Screen.MousePointer = 11DoCmd.Hourglass = True...Screen.MousePointer = 0DoCmd.Hourglass = False
OpenOffice | | Folie 125Access 2007 – VBA | 06.03.08 | Seite 125
Regionales Rechenzentrum für Niedersachsen
Bericht (Report)
... haben folgende Aufgaben: Ausdruck von Informationen in Listenform. Präsentation von Daten mit Hilfe von Diagrammen etc. Serien- und Etikettendruck.
... bestehen aus Bezeichnungsfeldern und Textfeldern. ... haben sehr viele grafische Eigenchaften. Die Daten in einem Bericht
... werden häufig als Liste dargestellt. ... können vom Nutzer nicht verändert werden. ... können berechnet werden. ... können nach bestimmten Kriterien sortiert und gruppiert werden.
... nutzen als Grundlage immer eine Tabelle oder Abfrage. ... haben viele Eigenschaften und Methoden, die auch Formulare besitzen.
OpenOffice | | Folie 126Access 2007 – VBA | 06.03.08 | Seite 126
Regionales Rechenzentrum für Niedersachsen
Zugriffsmöglichkeiten auf geöffnete Formulare
Me ... bezieht sich immer auf das Objekt, an dem das Module gebunden ist. ... bezeichnet das zum Code gehörende Objekt.
Screen.ActiveReport ... bezieht sich immer auf den Bericht, welcher am Bildschirm im Vordergrund
liegt. ... ist ein Synonym für den aktiven Bericht.
Reports("repListeKunde") ... bezieht sich auf die Auflistung aller geöffneten Berichte. Als Index wird der Name des Berichts genutzt.
Reports(1) ... sollte nie genutzt werden. Die Indizes sind nicht an einen bestimmten Bericht gebunden! Der Index
verändert sich in Abhängigkeit der geöffneten Berichte. Reports!repListeKunde
Die Auflistung wird vom benutzerdefinierten Namen mit einem Ausrufezeichen getrennt.
OpenOffice | | Folie 127Access 2007 – VBA | 06.03.08 | Seite 127
Regionales Rechenzentrum für Niedersachsen
Eigenschaften und Methoden nutzen
Beispiele: Me.Visible = true txtName = Screen.ActiveReport.Name Reports("repListeKunde").Move Top:=0, Left:=0 Reports!repListeKunde.SetFocus
Eigenschaften und Methoden werden immer von der Objektvariablen mit einem Punkt getrennt.
OpenOffice | | Folie 128Access 2007 – VBA | 06.03.08 | Seite 128
Regionales Rechenzentrum für Niedersachsen
Bericht öffnen
DoCmd.OpenReport "repKunde", _
acViewLayout, _
, , _
acWindowNormal
Welcher Bericht wird geöffnet?
In welcher Ansicht wird der Report geöffnet? Hier wird die Layout-Ansicht genutzt.
Die zwei Parameter zur Filterung der Daten sind nicht gesetzt.
Wie wird der Bericht geöffnet?Wie verhält sich der Bericht?
OpenOffice | | Folie 129Access 2007 – VBA | 06.03.08 | Seite 129
Regionales Rechenzentrum für Niedersachsen
Verhalten des Formulars
acWindowNormal: Der Bericht wird, wie in den Eigenschaften festgelegt, geöffnet.
acIcon: Das Fenster wird minimiert dargestellt. Die Titelleiste des Berichts wird in der Taskleiste angezeigt.
acHidden: Der Bericht wird nicht sichtbar dargestellt. Die Eigenschaft .Visible in VBA ist auf false gesetzt.
acDialog: Die Eigenschaft Gebunden und PopUp haben den Wert true. Solange der Bericht geöffnet ist, kann keine andere Aktion ausgeführt werden.
Der Bericht blockiert alle anderen Aktionen. Der Bericht überdeckt alle anderen Objekte der Datenbank. Die Größe des Berichts kann nicht verändert werden.
OpenOffice | | Folie 130Access 2007 – VBA | 06.03.08 | Seite 130
Regionales Rechenzentrum für Niedersachsen
Ansichten eines Berichts
acViewDesign, um den Bericht in der Entwurfsansicht zu öffnen. acViewLayout, um den Bericht in der Layoutansicht zu öffnen. Die
Layoutansicht bietet eine Vorschau auf die Daten. acViewPreview, um den Bericht in der Seitenansicht zu öffnen. acViewReport, um den Bericht in der Berichtsansicht zu öffnen. acViewNormal, um den Bericht zu drucken. acViewPivotChart, um die Daten in einem Pivot-Diagramm
darzustellen. acViewPivotTable, um die Daten in einem Pivot-Tabelle darzustellen.
OpenOffice | | Folie 131Access 2007 – VBA | 06.03.08 | Seite 131
Regionales Rechenzentrum für Niedersachsen
Bericht öffnen
DoCmd.OpenReport "repBuchInfo", _
acViewPreview, _
, _
"[nachname] LIKE 'W*'", _
acWindowNormal
Der Bericht wird in der Vorschau geöffnet
Als Parameter wird eine Bedingung ähnlich wie in Abfragen; Zeile Kriterien übergegeben. Die Anführungszeichen innerhalb des Kriterienausdrucks werden durch Apostrophs ersetzt.In diesem Beispiel wird die Spalte nachname auf Daten überprüft, die mit dem Buchstaben W beginnen.
OpenOffice | | Folie 132Access 2007 – VBA | 06.03.08 | Seite 132
Regionales Rechenzentrum für Niedersachsen
Bericht auswählen
DoCmd.OpenReport "repKunde", acViewNormal, , , _ acWindowHidden
DoCmd.SelectObject acReport, "repKunde", false
Mit Hilfe von SelectObject wird ein Objekt ausgewählt. Die Art des Objekts wird durch den ersten Parameter bestimmt. Als zweiter Parameter wird eine Objektbezeichnung übergeben. Falls der dritte Parameter true ist, wird das Objekt im Navigationsfenster
markiert. Ein verstecktes Objekt wird aber nicht eingeblendet. Falls der Wert false (Standardeinstellung) ist, wird das Objekt markiert und ausgeblendete Objekte eingeblendet.
OpenOffice | | Folie 133Access 2007 – VBA | 06.03.08 | Seite 133
Regionales Rechenzentrum für Niedersachsen
Anzahl der Seiten
Caption legt den Text in der Titelleiste eines Berichts fest. Page gibt die aktuell angezeigte Seitenzahl an. Pages gibt die Anzahl der Seiten in einem Bericht an.
Me.Caption = "Seite " & Me.Page & " von " & Me.Pages
OpenOffice | | Folie 134Access 2007 – VBA | 06.03.08 | Seite 134
Regionales Rechenzentrum für Niedersachsen
Keine Datensätze vorhanden
Das Ereignis NoData tritt ein, wenn der Bericht keine Datensätze enthält, aber nicht gedruckt ist.
Ein Drucken des leeren Berichts kann mit der Anweisung Cancel = True verhindert werden.
Private Sub Report_NoData(Cancel As Integer)MsgBox "Der Bericht ist leer."Cancel = True
End Sub
OpenOffice | | Folie 135Access 2007 – VBA | 06.03.08 | Seite 135
Regionales Rechenzentrum für Niedersachsen
Bericht schließen
Dim rep As Report Set rep = Screen.ActiveReport
Set rep = Nothing
Was wird geschlossen?
Name des Objekts. Hier wird über ein Verweis der Name ermittelt.
Der Bericht wird ohne Speicherung der Daten geschlossen.
DoCmd.Close acReport, rep.Name, acSaveNo
OpenOffice | | Folie 136Access 2007 – VBA | 06.03.08 | Seite 136
Regionales Rechenzentrum für Niedersachsen
Bereiche eines Berichts
.Section(acHeader)
.Section(1)
.Section(acPageHeader)
.Section(2)
.Section(acDetail)
.Section(0)
.Section(acPageFooter)
.Section(3)
.Section(acFooter)
.Section(4)
OpenOffice | | Folie 137Access 2007 – VBA | 06.03.08 | Seite 137
Regionales Rechenzentrum für Niedersachsen
Bereiche ausblenden
.Visible = False blendet Bereiche aus. Die Bereiche werden aber nicht entfernt.
Private Sub Report_Load()Me.Section(acHeader).Visible = False
End Sub
OpenOffice | | Folie 138Access 2007 – VBA | 06.03.08 | Seite 138
Regionales Rechenzentrum für Niedersachsen
Bereiche ausblenden
Das Ereignis ... wird vor der Formatierung des Bereichs ausgelöst. ... wird nur in der Seitenansicht gesendet. ... wird abgebrochen und die Seite nicht gedruckt.
In diesem Beispiel werden Bereiche in Abhängigkeit der Seitenzahl aus- oder eingeblendet.
Private Sub Berichtskopf_Format(Cancel As Integer, FormatCount As Integer)
If Me.Page = 1 ThenMe.Section(acHeader).Visible = TrueMe.Section(acFooter).Visible = False
ElseMe.Section(acHeader).Visible = FalseMe.Section(acFooter).Visible = True
End If
End Sub
OpenOffice | | Folie 139Access 2007 – VBA | 06.03.08 | Seite 139
Regionales Rechenzentrum für Niedersachsen
Jede zweite Zeile im Detailbereich einfärben
Das Ereignis wird durch ein Neuzeichnen des Detailbereichs ausgelöst. In Abhängigkeit der Variablen isColor wird die Zeile eingefärbt.
Dim isColor As Boolean
Private Sub Detailbereich_Paint()If isColor Then
Me.Section(acDetail).BackColor = RGB(0,0, 180)Else
Me.Section(acDetail).BackColor = RGB(255, 255, 255)End If
isColor = Not isColor
End Sub
OpenOffice | | Folie 140Access 2007 – VBA | 06.03.08 | Seite 140
Regionales Rechenzentrum für Niedersachsen
... seit Access 2007
BackColor setzt die Hintergrundfarbe im Detailbereich. AlternateBackColor setzt eine alternative Farbe für Färben jeder
zweiten Zeile im Detailbereich eines Berichts.
Private Sub Report_Load()Me.Section(acDetail).BackColor = RGB(255,255, 255)Me.Section(acDetail).AlternateBackColor = RGB(0, 0, 180)
End Sub
OpenOffice | | Folie 141Access 2007 – VBA | 06.03.08 | Seite 141
Regionales Rechenzentrum für Niedersachsen
Zoomfaktor eines Berichts
Der Bericht wird mit Hilfe einer Schaltfläche oder in einem Modul geöffnet. Mit Hilfe von RunCommand können Befehle aus dem Ribbon gestartet
werden. acCmdZoom%% zeigt den Bericht in der Vorschau mit einem bestimmten
Zoomfaktor an. acCmdFitToWindow verkleinert den Bericht so weit, dass er vollständig im
Fenster der Application angezeigt werden kann. Der Zoom kann nicht in dem Modul gesetzt werden, der zu dem
zoomenden Bericht gehört.
Sub openBericht()DoCmd.OpenReport "repAutomat", acViewPreview, , ,acWindowNormalDoCmd.RunCommand acCmdZoom25DoCmd.RunCommand acCmdFitToWindow
End Sub
OpenOffice | | Folie 142Access 2007 – VBA | 06.03.08 | Seite 142
Regionales Rechenzentrum für Niedersachsen
Bericht maximieren
DoCmd.Maximize zeigt das aktive Objekt im Vollbild an. DoCmd.Minimize verkleinert das aktive Objekt auf die Größe der
Titelleiste. Die Titelleiste des Berichts wird angezeigt. DoCmd.Restore stellt die ursprüngliche Größe wieder her. DoCmd.SetWarnings(False) unterdrückte alle Standard-
Warnmeldungen von Access.
Private Sub Report_activate()DoCmd.SetWarnings(False)DoCmd.Maximize
End SubPrivate Sub Report_Close()
DoCmd.RestoreEnd Sub
OpenOffice | | Folie 143Access 2007 – VBA | 06.03.08 | Seite 143
Regionales Rechenzentrum für Niedersachsen
Daten gruppieren
.Section(acGroupLevel1Header) und .Section(acGroupLevel1Footer) definiert den Gruppenkopf und Gruppenfuß in der ersten Ebene.
Mit Hilfe von .Section("GroupKategorie") kann der Bereich direkt über den Namen angesprochen werden.
OpenOffice | | Folie 144Access 2007 – VBA | 06.03.08 | Seite 144
Regionales Rechenzentrum für Niedersachsen
Eigenschaften setzen
.GroupLevel(index) verweist auf eine bestimmte Gruppierungsebene. Der Index 0 bezeichnet die erste Gruppierungsebene.
.GroupOn legt die Art der Gruppierung in Abhängigkeit des Datentyps fest. In diesem Beispiel wird Text in Abhängigkeit des Wertes gruppiert.
.GroupIntervall gibt ein Intervall für die Gruppierung in Abhängigkeit des Datentyps vor. Hier wird nach dem vollständigen Wert gruppiert.
.KeepTogether hält eine Gruppe auf einer Seite zusammen. In diesem Beispiel wird die erste Gruppierungsebene immer auf eine Seite gedruckt.
Private Sub Report_Open(Cancel As Integer) With Me.GroupLevel(0) .GroupOn = 0
.GroupInterval = 1 .KeepTogether = 1
End WithEnd Sub
OpenOffice | | Folie 145Access 2007 – VBA | 06.03.08 | Seite 145
Regionales Rechenzentrum für Niedersachsen
Neue Seite einfügen
In Abhängigkeit der Seitenansicht (.CurrentView) wird eine neue Seite (.ForceNewPage) vor dem dem Gruppenkopf eingefügt.
Private Sub Report_Open(Cancel As Integer) If Me.CurrentView = 5 Then
Me.Section(acGroupLevel1Header).ForceNewPage = 1 End If
End Sub
OpenOffice | | Folie 146Access 2007 – VBA | 06.03.08 | Seite 146
Regionales Rechenzentrum für Niedersachsen
Bericht drucken
Public Sub PrintOut() On Error GoTo Fehlercode DoCmd.RunCommand acCmdPrint Exit SubFehlercode: If Err.Number = 2501 Then Exit Sub Else MsgBox Err.Number & vbCRLF & Err.Description End IfEnd Sub
Öffnen des Drucken-Dialogs. Der Dialog bezieht sich immer auf das
aktive Objekt.
Abbruch des Drucken-Dialogs.
OpenOffice | | Folie 147Access 2007 – VBA | 06.03.08 | Seite 147
Regionales Rechenzentrum für Niedersachsen
Mehrere Kopien eines Berichts drucken
Public Sub PrintOut() On Error GoTo Fehlercode DoCmd.PrintOut acPrintAll,,,acMedium, 2, True Exit SubFehlercode: MsgBox Err.Number & vbCRLF & Err.DescriptionEnd Sub
DoCmd.PrintOut druckt alle Seiten (acPrintAll) des aktiven Berichts in einer mittleren Druckqualität (acMedium) zweimal sortiert (True) aus.
OpenOffice | | Folie 148Access 2007 – VBA | 06.03.08 | Seite 148
Regionales Rechenzentrum für Niedersachsen
Seite von bis ausdrucken
Public Sub PrintOut() On Error GoTo Fehlercode DoCmd.PrintOut acPages,1,2,acMedium Exit SubFehlercode: MsgBox Err.Number & vbCRLF & Err.DescriptionEnd Sub
DoCmd.PrintOut druckt die Seiten (acPages) eins bis zwei des aktiven Berichts in einer mittleren Druckqualität (acMedium) aus.
OpenOffice | | Folie 149Access 2007 – VBA | 06.03.08 | Seite 149
Regionales Rechenzentrum für Niedersachsen
Printer-Objekt
... ist seit Access 2002 implementiert. ... ermöglicht eine Konfiguration der installierten Drucker. ... ist eine Eigenschaft des Berichts oder der Anwendung. ... verfügt über Eigenschaften, die die Druckeinstellungen beeinflussen. ... verfügt aber über keine Methoden, um einen Druck zu starten.
OpenOffice | | Folie 150Access 2007 – VBA | 06.03.08 | Seite 150
Regionales Rechenzentrum für Niedersachsen
Welche Drucker sind vorhanden?
Private Sub Form_Load()Dim objDrucker As PrinterFor Each objDrucker In Printers
Me.lstDrucker.AddItem objPrinter.DeviceNameNext objDrucker
End Sub
Die Auflistung Printers enthält alle Drucker, die auf dem System installiert sind.
Der Name (DeviceName) jeden Druckers wird einer Liste hinzugefügt.
OpenOffice | | Folie 151Access 2007 – VBA | 06.03.08 | Seite 151
Regionales Rechenzentrum für Niedersachsen
Drucker des Berichts
Private Sub cmdDruckReport_Click() Const repName As String = "repKunde" Dim objDrucker As Printer Dim whichDrucker As Integer
DoCmd.OpenReport repName, acViewPreviewIf (Not IsNull(Me.lstDrucker)) Then
whichDrucker = Me.lstDrucker.ValueSet objPrinter = Application.Printers(whichDrucker)Set Reports(repName).Printer = objPrinter
DoCmd.OpenReport repName, acViewNormalEnd If
End Sub