vba (visual basic for application) - luis.uni-hannover.de · regionales rechenzentrum für...
TRANSCRIPT
Regionales Rechenzentrum für Niedersachsen
VBA (Visual Basic for Application)
Variablen und Konstanten
OpenOffice | | Folie 2Access 2007 – VBA | 25.06.08 | Seite 2
Regionales Rechenzentrum für Niedersachsen
Operanden und Operatoren
Operanden können ... Variablen sein. Werte für Variablen können mit Hilfe der Tastatur
eingegeben werden und durch das Programm verändert werden. ... Konstanten sein. Konstanten bekommen einen Wert zugewiesen, der nicht
durch das Programm verändert werden kann. Operatoren
Arithmetische Operatoren berechnen Werte. Vergleichsoperatoren vergleichen zwei Werte. Logische Operatoren verknüpfen Werte oder Ausdrücke.
OpenOffice | | Folie 3Access 2007 – VBA | 25.06.08 | Seite 3
Regionales Rechenzentrum für Niedersachsen
Ausdruck
... besteht aus Operanden und Operatoren, die nach bestimmten Regeln zusammengesetzt werden.
... formuliert einzelne Schritte eines Programms. ... ist eine Verarbeitungsvorschrift, die einen Wert als Ergebnis liefert. ... verändert den Wert von Variablen entsprechend des angegebenen
Datentyps. Beispiele:
Arithmetische Berechnung: preis * 0.16 Vergleichsopratoren nutzen: messpunkt > 0 Ausdrücke miteinander verknüpfen: (a >= b) AND (a >= c) Prozeduren aufrufen: addition(1,2)
OpenOffice | | Folie 4Access 2007 – VBA | 25.06.08 | Seite 4
Regionales Rechenzentrum für Niedersachsen
Anweisungen
Pro Zeile steht eine Anweisung, die aus einem Ausdruck gebildet wird. ... werden meist sequentiell ausgeführt. ... symbolisieren eine bestimmte Aktion. ... sind die kleinste Einheit in einem VBA-Programm. Beispiele:
steuerelement.Value = 4 rabatt = preis * 0.01 summe = preis * menge button = MsgBox("Eingabe von ...")
OpenOffice | 10.12.08 | Folie 5Access 2007 – VBA | 25.06.08 | Seite 5
Regionales Rechenzentrum für Niedersachsen
Konstanten
... sind fest mit einem bestimmten Wert verankert. Dieser Wert darf nicht innerhalb des Gültigkeitsbereichs der Konstanten
verändert werden. ... sind Platzhalter für einen bestimmten Wert in einem Modul oder in einer
Prozedur. ... werden auch als Literale bezeichnet. Der Name einer Konstanten ist frei wählbar. Laut der VBA-
Namenskonvention sollte aber eine Konstante mit einem Großbuchstaben beginnen.
OpenOffice | 10.12.08 | Folie 6Access 2007 – VBA | 25.06.08 | Seite 6
Regionales Rechenzentrum für Niedersachsen
Konstanten definieren
... werden durch das Schlüsselwort Const gekennzeichnet. ... werden gleichzeitig deklariert und initialisiert. Initialisierung: Beschriftung = "Speichern".
Der Wert rechts vom Gleichheitszeichen wird der Konstanten links vom Gleichheitszeichen zugewiesen.
Die Konstante hat einen definierten Wert, der nicht verändert werden kann. Deklaration: Const Beschriftung As String.
Mit Hilfe des Schlüsselwortes As wird der Konstanten ein bestimmtes Format zugewiesen.
Von welchen Typ ist die Konstante. Diese Konstante kann nur Strings (Zeichenketten) speichern. Falls der Typ nicht angegeben wird, wird dieser in Abhängigkeit des Wertes
rechts vom Gleichheitszeichen bestimmt.
Const PI = 3.14159265Const Beschriftung As String = "Speichern"
OpenOffice | 10.12.08 | Folie 7Access 2007 – VBA | 25.06.08 | Seite 7
Regionales Rechenzentrum für Niedersachsen
Systemdefinierte Konstanten
... oder integrierte Konstanten sind vordefiniert. Das Präfix der Konstanten ist immer ein Hinweis auf seine Herkunft.
vb.. sind Konstanten, die direkt von der Programmiersprache definiert sind. Mso... sind Konstanten, die von Microsoft Office bereitgestellt werden. ac... sind Konstanten, die in der Access-Bibliothek definiert sind.
MsgBox "Guten Tag", vbInformation + vbOkOnly
OpenOffice | 10.12.08 | Folie 8Access 2007 – VBA | 25.06.08 | Seite 8
Regionales Rechenzentrum für Niedersachsen
Variablen
Zahlen und Zeichen werden in Variablen gespeichert. ... werden durch das Programm verarbeitet. ... können durch Ausdrücke verändert werden. ... können mit Hilfe der Tastatur ein Wert zugewiesen bekommen. ... sind Platzhalter für einen bestimmten Typ von Wert. ... sind
... in einem Kochrezept die Zutaten. ... beim Waschen die Wäsche sowie das Pulver. ... sind bei der Suche der zu durchsuchende Text, das Suchwort, der
Positionszähler sowie die Anzeige "Gefunden oder nicht". Zu einer Variablen gehören die folgenden Informationsbestandteile:
Der Name, der den Wert symbolisiert. Dem Wert, für den die Variable als Platzhalter genutzt wird. Dem Datentyp, der das Format für den Wert sowie den Speicherbedarf
festlegt.
OpenOffice | 10.12.08 | Folie 9Access 2007 – VBA | 25.06.08 | Seite 9
Regionales Rechenzentrum für Niedersachsen
Variablen deklarieren und initialisieren
Sub varDef()Dim faktor As SingleDim wert As Integer
Dim multi As SingleDim suchwort As StringDim gefunden As Boolean
faktor = 0.5wert = 4multi = faktor * wert
suchwort = "VBA"gefunden = False
End Sub
Pro Zeile wird eine Variable deklariert.Jede Variable ist von einem bestimmtenDatentyp.
Mit Hilfe des Gleichheitszeichen wird derVariablen ein Wert zugewiesen.Dieser Wert kann direkt angegeben odermit Hilfe anderer Variablen berechnetwerden.
OpenOffice | 10.12.08 | Folie 10Access 2007 – VBA | 25.06.08 | Seite 10
Regionales Rechenzentrum für Niedersachsen
Deklaration
Dim gefunden As Boolean
Wer kann auf die Variable zugreifen?
Der Variablenname ist frei wählbar. Die Bezeichnung sollte aber die Funktion der Variablen erläutern.
Mit dem Schlüsselwort As wird die Typbezeichnung eingeleitet.Hier wird ein Datentyp genutzt, der nur den Wert falsch oder wahr besitzt.
OpenOffice | 10.12.08 | Folie 11Access 2007 – VBA | 25.06.08 | Seite 11
Regionales Rechenzentrum für Niedersachsen
Variablennamen
... müssen mit einem Buchstaben beginnen. Folgende Zeichen dürfen nicht in einem Variablennamen
vorkommen: Punkt [ . ], Prozentzeichen [ % ], Dollar-Zeichen [ $ ], Ausrufezeichen [ ! ], Hash-Zeichen [ # ], Add-Zeichen [ @ ] oder kaufmännnisches Und [ & ].
Umlaute, Satzzeichen oder Sonderzeichen sollten nicht in Variablennamen genutzt werden.
... müssen aus einer zusammenhängenden Zeichenfolge bestehen. ... sind einzigartig. Sie kommen nur einmal in ihrem
Gültigkeitsbereich vor. Als Bezeichnung dürfen keine Schlüsselworte aus VBA genutzt
werden. ... können bis 255 Zeichen lang sein.
OpenOffice | 10.12.08 | Folie 12Access 2007 – VBA | 25.06.08 | Seite 12
Regionales Rechenzentrum für Niedersachsen
Hinweise zur Auswahl von Variablennamen
Der Variablenname sollte über die Art und Nutzung des Wertes Auskunft geben. Beispiel: Für die Berechnung eines Kreisradius wird eine Variable mit dem Namen radius erzeugt. Ungeeignete Variablennamen sind x2, a22 oder ähnlich kryptische Bezeichner.
Ein Variablenname sollte den Sachverhalt, den die Variable repräsentiert vollständig und genau beschreiben. Auf diese Weise ergeben sich oft bereits gute Namen. Gute Namen sind einfach zu lesen, da sie keine geheimnisvollen
Abkürzungen enthalten und eindeutig sind. Verzichten Sie auf Namen, die keinerlei Beziehung zum Inhalt der Variablen
erkennen lassen. Variablennamen sollten keine Tätigkeitsworte wie zum Beispiel "Get"
enthalten. "Get" ist Prozeduren von Objekten vorbehalten, die einen Eigenschaftswert des Objekts zurückgeben.
Variablennamen, die nur aus einem einzelnen Zeichen bestehen, sollten nur als Zähler oder Indizes genutzt werden.
OpenOffice | 10.12.08 | Folie 13Access 2007 – VBA | 25.06.08 | Seite 13
Regionales Rechenzentrum für Niedersachsen
Hinweise zur Schreibweise von Variablen
Variablennamen sollten, zur Unterscheidung von Konstanten, immer mit einem Kleinbuchstaben beginnen.
Variablennamen werden teilweise aus mehreren Namen zusammengesetzt. In der ungarischen Notation beginnt der Variablennamen mit einem kleinen Buchstaben. Alle Teilnamen beginnen mit einem Großbuchstaben.Beispiel: lineBuffer, nErrFlag. Andere Möglichkeit: line_buffer, n_err_flag.
Als Präfix (erste Buchstabe des Variablennamens) wird häufig eine Abkürzung für den Datentyp genutzt. Beispiel: booAusdruck für einen boolschen Ausdruck, intKM für eine Integer-Variable oder curPreis für einen Währungswert.
OpenOffice | 10.12.08 | Folie 14Access 2007 – VBA | 25.06.08 | Seite 14
Regionales Rechenzentrum für Niedersachsen
Beispiele für Variablennamen
Aufgabe ... sollte den Namen haben: ... nie den Namen haben:Bestellnummer
Rechnungsdatum
Kundenname
Farbe eines Autos
Farbe Eines Autos
bestellNr, bnrbestellnummer bstnrbestellung_Nr bnrechnungDatum rgDatebonDatum rech_Datum
rgDrechnungRechnungMaerz
kunde bezeichnungkundeName kndNameKunde namefarbeAuto faAufarbe_Auto faAuto
au_fa
AutoGelb
OpenOffice | 10.12.08 | Folie 15Access 2007 – VBA | 25.06.08 | Seite 15
Regionales Rechenzentrum für Niedersachsen
Finden Sie die Variable, die nicht mit den zwei anderen übereinstimmteyechartl eyechartl eyechartICONFUSION C0NFUSION CONFUSIONhard2read hardZread hard2readGRANDTOTAL GRANDTOTAL GRANDT0TAL
Folgende Zeichen sind sich sehr ähnlich: 1 und l (Kleines L) l und I (kleines L und großes L) 1 und I (1 und kleines L) 0 und O 2 und Z S und 5 G und 6
Machen Sie einen Bogen um Variablennamen, die Verwechslungen herausfordern.
Beispiele für Verwechselungen
OpenOffice | 10.12.08 | Folie 16Access 2007 – VBA | 25.06.08 | Seite 16
Regionales Rechenzentrum für Niedersachsen
Datentypen
... sind Baupläne für die Art der Variablen. ... geben über das Format eines Wertes, der in einer Variablen
gespeichert wird, Auskunft. ... legen Regeln für die Interpretation und Verwendung eines Wertes fest. Folgende Kategorien sind in VBA vorhanden:
Ganze Zahlen (Integer) und boolsche Werte. Fließkommazahlen oder Dezimalzahlen (Floating Point). Datumswerte. Zeichenfolgen.
OpenOffice | 10.12.08 | Folie 17Access 2007 – VBA | 25.06.08 | Seite 17
Regionales Rechenzentrum für Niedersachsen
Ganze Zahlen
Datentyp Datenbereich
AS Byte 1 0 0 – 255AS Integer [zahl%] 2 0 -32.768 – 32.767
[zahl&] 4 0 -2.147.483.648 -2.147.483.6472
Größe (Bytes)
Standard- wert
AS LongAS Boolean False -1 (True) und 0 (False)
OpenOffice | 10.12.08 | Folie 18Access 2007 – VBA | 25.06.08 | Seite 18
Regionales Rechenzentrum für Niedersachsen
Dezimalzahlen
Datentyp Wertebereich
[zahl!] 4 0
AS Double [zahl#] 8 0
8 0
Größe (Bytes)
Standard- wert
AS Single Negativer Wertebereich: -3,4E+ 38 bis -1,4E-45 Positiver Wertebereich: +1,4E-45 bis +3,4E38 Einfache Genauigkeit (ca. 7 Stellen) Negativer Wertebereich: -1,8E308 bis -4,94E-324 Positiver Wertebereich: +4,94E-324 bis +1,8E308 Doppelte Genauigkeit (ca. 15 Stellen)
AS Currency [zahl@] -9.22 E+14 bis 9.22E+15 (Der Datentyp besitzt 15 Vor- und 4 Nachkommastellen)
K02_variablen.accdb:Modul exampleVariablenProzedur: dezimalzahlen
OpenOffice | 10.12.08 | Folie 19Access 2007 – VBA | 25.06.08 | Seite 19
Regionales Rechenzentrum für Niedersachsen
Hinweise
In VBA wird als Dezimaltrennzeichen ein Punkt genutzt. Das Dezimaltrennzeichen der Daten in Access ist aber von den Ländereinstellungen des Systems abhängig.
Es können Rundungsfehler auftreten. Dezimalzahlen werden einem Wert nur angenährt.
Führende Nullen werden entfernt. VBA berücksichtigt keine Maßeinheiten oder Gewichte. Die Zahl 4.5 kann
für den Nutzer ein Geldbetrag oder aber auch die Breite eines bestimmten Objekts darstellen. Im Code spielen diese Beziehungen aber keine Rolle. Sie als Entwickler müssen für die korrekte Umrechnungen zwischen den verschiedenen Einheiten sorgen.
OpenOffice | 10.12.08 | Folie 20Access 2007 – VBA | 25.06.08 | Seite 20
Regionales Rechenzentrum für Niedersachsen
Datums- und Zeitwerte
Datumswerte werden in der Form #monat/tag/jahr# eingegeben. Zeitwerte werden in der Form #hh:mm:ss AM/PM# eingegeben. In Access selber werden aber Datums- und Zeitwerte in der Abhängigkeit
der Ländereinstellungen des Betriebssystems interpretiert. Konstante Datums- und Zeitwerte werden durch Hash-Zeichen begrenzt. Jedem Datumswert wird eine Integer-Zahl, beginnt am 30.12.1899
zugeordnet. Zum Beispiel das Datum 09.07.08 wird intern als 39638 interpretiert.
Jeder Zeitwert wird als prozentualen Anteil eines Tages interpretiert. Zum Beispiel wird Mitternacht als 0.5 interpretiert.
Dim heute As DateDim zeit As Date
heute = #11/30/2007#zeit = #11:30:00 AM#
OpenOffice | 10.12.08 | Folie 21Access 2007 – VBA | 25.06.08 | Seite 21
Regionales Rechenzentrum für Niedersachsen
Hinweise zu Datumswerten
Es können nur Daten zwischen den 01.01.0100 und 31.12.9999 verarbeitet werden.
Es wird für Europa der Gregorianischen Kalender genutzt. Microsoft setzt als Anfangsjahr für diesen Kalender das Jahr 1582 fest.
Zweistellige Datumangaben sollten sehr vorsichtig genutzt werden. Die zweistelligen Zahlen 0 bis 30 bezeichnen Jahre im 21. Jahrhundert
(2000 bis 2030). Die zweistelligen Zahlen 30 bis 99 bezeichnen Jahre im 20. Jahrhundert
(1930 bis 1999).
K02_variablen.accdb:Modul exampleVariablenProzedur: datumZeit und aktuellesDatum
OpenOffice | 10.12.08 | Folie 22Access 2007 – VBA | 25.06.08 | Seite 22
Regionales Rechenzentrum für Niedersachsen
Zeichenketten
... sind ab Version 4 nur durch die Größe der Festplatte begrenzt. ... werden immer durch Anführungszeichen begrenzt. ... können alle ANSI-Zeichen enthalten. Viele Druck- und
Steuerungszeichen sind als Konstanten vorhanden. ... können seit Access 2000 auch Unicode-Zeichen verarbeiten. ... müssen für Postleitzahlen oder Telefon-Vorwahlnummern genutzt
werden.
Dim satz As StringDim plz As String * 5
satz = "Hello World"plz = "123456"
OpenOffice | 10.12.08 | Folie 23Access 2007 – VBA | 25.06.08 | Seite 23
Regionales Rechenzentrum für Niedersachsen
Zeichenketten fester Länge
... As String * 5. Der String ist immer fünf Zeichen lang. Die Länge wird immer mit einer Ganzzahl angegeben. Falls mehr Zeichen eingegeben werden, wird die Zeichenkette ohne
Warnmeldung beschnitten. Falls weniger Zeichen eingegeben werden, wird die Zeichenkette mit
Leerzeichen aufgefüllt.
Dim satz As StringDim plz As String * 5
satz = "Hello World"plz = "123456"
OpenOffice | 10.12.08 | Folie 24Access 2007 – VBA | 25.06.08 | Seite 24
Regionales Rechenzentrum für Niedersachsen
ANSI-Zeichen; 0 bis 125
OpenOffice | 10.12.08 | Folie 25Access 2007 – VBA | 25.06.08 | Seite 25
Regionales Rechenzentrum für Niedersachsen
ANSI-Zeichen; 126 bis 255
OpenOffice | 10.12.08 | Folie 26Access 2007 – VBA | 25.06.08 | Seite 26
Regionales Rechenzentrum für Niedersachsen
Deklaration erzwingen
Die Anweisung Option Explicit wird am Anfang eines Moduls geschrieben. Die Anweisung gilt für das gesamte Modul. Jede Variable muss deklariert werden. Eine nicht deklarierte Variable kann
nicht genutzt werden. Vorteile:
Es kann keine Variablen mit dem gleichen Namen, aber unterschiedlichen Datentyp geben.
Falls die Variablen am Anfang eines Moduls oder einer Prozedur deklariert werden, erhöht sich die Lesbarkeit und Wartbarkeit eines Programms.
... kann automatisch gesetzt werden. Wählen Sie das Menü Extras – Optionen aus. Die Registerkarte Editor wird geöffnet. Das Kontrollkästchen Variablendeklaration erforderlich bekommt durch einen
Mausklick ein Häkchen, falls nicht vorhanden. Alle Module, die anschließend neu erstellt werden, besitzen am Anfang die
Anweisung Option Explicit.
OpenOffice | 10.12.08 | Folie 27Access 2007 – VBA | 25.06.08 | Seite 27
Regionales Rechenzentrum für Niedersachsen
Informationen zu Variablen
Sub Pruef()Dim heute As Date
heute = Now ' Now = Aktuelles Datum
' Wie kann der Datentyp interpretiert werden?Debug.Print IsDate(heute) ' Als DatumDebug.Print IsNumeric(heute) ' ... oder als Zahl?
'Datentyp der VariablenDebug.Print VarType(heute) ' ... als ZahlDebug.Print TypeName(heute) ' ... als String
End Sub
OpenOffice | 10.12.08 | Folie 28Access 2007 – VBA | 25.06.08 | Seite 28
Regionales Rechenzentrum für Niedersachsen
Datentyp Variant
... ist ein universeller Datentyp. Die Variable kann jeden Datentyp aufnehmen.
... benötigt bei numerischen Werten ca. 16 Bytes und bei Strings 22 Bytes plus die Textlänge. Der Datentyp benötigt sehr viel Speicher.
... wird genutzt, wenn der Datentyp des zu speichernden Wertes unbekannt.
... kann zu unnötigen Fehlermeldungen führen, weil keine automatische Typ-Überprüfung stattfindet.
OpenOffice | 10.12.08 | Folie 29Access 2007 – VBA | 25.06.08 | Seite 29
Regionales Rechenzentrum für Niedersachsen
Variant nutzen
Sub Pruef()Dim wert As Variant
wert = NULL ' NULL kennzeichnet ungültige Variablen
Debug.Print IsEmpty(wert) ' Nicht initialisierte ...
Debug.Print IsNull(wert) ' Ungültige Daten
Debug.Print TypeName(wert) ' Datentyp = NULL
wert = 5Debug.Print TypeName(wert) ' Datentyp = Integer
End Sub
OpenOffice | 10.12.08 | Folie 30Access 2007 – VBA | 25.06.08 | Seite 30
Regionales Rechenzentrum für Niedersachsen
Anweisungen in VBA
Sub addition()Const zahl = 10
Dim wert As IntegerDim summe As IntegerDim ausgabe As String
wert = InputBox("Bitte geben Sie einen Wert ein:")summe = wert + zahl
Debug.Print summe
ausgabe = wert & " + " & zahl & " = " & summeMsgBox(summe)
End Sub
OpenOffice | 10.12.08 | Folie 31Access 2007 – VBA | 25.06.08 | Seite 31
Regionales Rechenzentrum für Niedersachsen
Direktfenster
Öffnen Sie das Direktfenster mit Hilfe des Menüs Ansicht – Direktfenster. In diesem Fenster
... kann der Ablauf eines Programms in einem gewissen Umfang protokolliert werden.
... können Funktionen oder Anweisungen getestet werden. Mit Hilfe von <STRG>+<A> wird der gesamte Inhalt des Direktfensters
markiert. Mit Hilfe der Taste <ENTF> kann der markierte Inhalt im Direktfenster
gelöscht werden.
OpenOffice | 10.12.08 | Folie 32Access 2007 – VBA | 25.06.08 | Seite 32
Regionales Rechenzentrum für Niedersachsen
Aus dem Programm ins ... drucken
Setzen Sie die Zeile Debug.Print ausdruck in das Programm ein. Sobald die Anweisung ausgeführt ist, wird der Wert des Ausdrucks in das
Direktfenster geschrieben.
OpenOffice | 10.12.08 | Folie 33Access 2007 – VBA | 25.06.08 | Seite 33
Regionales Rechenzentrum für Niedersachsen
Anweisungen direkt eingeben
Klicken Sie mit den Mauszeiger auf eine freie Stelle im Direktfenster. Geben Sie die Anweisung ?Variable ein. Schließen Sie die Anweisung
mit <ENTER> ab. Der Wert Wert der Variablen wird in der nächsten Zeile im Direktfenster angezeigt.
Die Anweisung variable = 20 verändert den Wert der Variablen. Die Anweisung ?Left(zeichen, 4) führt die Funktion Left aus. Das
Resultat der Funktion wird in der nachfolgenden Zeile angezeigt. Im Direktfenster können Sie die vordefinierten Funktion aus VBA ausprobieren.
OpenOffice | 10.12.08 | Folie 34Access 2007 – VBA | 25.06.08 | Seite 34
Regionales Rechenzentrum für Niedersachsen
Kommentare
... erleichtern das Verstehen eines Programms. ... Kommentare müssen bei Codeänderungen oder Programm-
Erweiterungen angepasst werden. ... beziehen sich auf das Warum und nicht so sehr auf das Wie. Beispiele:
Warum wird an dieser Stelle diese Berechnung durchgeführt? Nicht: Wie werden die Werte berechnet?
Warum wird der String an diesem Zeichen getrennt? Nicht: Wie wird der String getrennt.
... beginnen in VBA immer mit dem Apostroph und enden automatisch mit dem Ende der Zeile.
Mehrere Zeilen können mit den entsprechenden Symbolen in der Symbolleiste Bearbeiten auskommentiert werden.
OpenOffice | 10.12.08 | Folie 35Access 2007 – VBA | 25.06.08 | Seite 35
Regionales Rechenzentrum für Niedersachsen
Kommentare platzieren
Kommentare am Anfang eines Moduls platzieren: Informationen zum Entwickler. Informationen zur Historie des Moduls.
Kommentare oberhalb oder unterhalb des Prozedurkopfes (Sub... ) platzieren: Welche Funktionalität wird abgebildet? Ein- und Ausgabeparameter der Prozedur.
Kommentare oberhalb oder rechts von einer Anweisung platzieren: Warum wird diese Anweisung gerade ausgeführt? Welches Resultat wird erwartet?
OpenOffice | 10.12.08 | Folie 36Access 2007 – VBA | 25.06.08 | Seite 36
Regionales Rechenzentrum für Niedersachsen
Überflüssige Kommentare
Kommentare sollten offensichtliche Dinge nicht in Prosa wiederholen. Ein negatives Beispiel: a = c + b; ' a ist die Summe von c und b
Kommentare, die dem Programmcode widersprechen, sind redundant.
OpenOffice | 10.12.08 | Folie 37Access 2007 – VBA | 25.06.08 | Seite 37
Regionales Rechenzentrum für Niedersachsen
Operatoren
Einstellige Operatoren: Vorzeichen für positive und negative Zahlen.
Zweistellige Operatoren: Arithmetische Operatoren. Vergleichsoperatoren. Logische Operatoren zum Verknüpfen von Ausdrücken. Zuweisungsoperator. Textverknüpfungen.
OpenOffice | 10.12.08 | Folie 38Access 2007 – VBA | 25.06.08 | Seite 38
Regionales Rechenzentrum für Niedersachsen
Zuweisungsoperator
Mit Hilfe des Gleichheitszeichens wird der Variablen ein Wert zugewiesen. Die Variable wird nicht mit einem Wert verglichen! Dem Ausdruck links vom Gleichheitszeichen wird das Ergebnis des
Ausdrucks rechts vom Gleichheitszeichen zugewiesen. Konstanten dürfen in Anweisungen nur rechts vom Gleichheitszeichen
stehen. Der Wert einer Konstanten darf nicht verändert werden.
wert = 4faktor = 0.5ausgabe = "Hello World"
OpenOffice | 10.12.08 | Folie 39Access 2007 – VBA | 25.06.08 | Seite 39
Regionales Rechenzentrum für Niedersachsen
Arithmetische Operatoren
Operator Beispiel^ 7^3 = 343/ Division 7 / 3 = 2.33
7 / 0 = Fehler\ 7 \ 3 = 2
7.2 \ 3.1 = Fehler
* Multiplikation 7 * 3 = 21+ Addition 7 + 3 = 10- Subtraktion 7 – 3 = 4
RechenartPotenzrechnung
Division mit Ganzzahlen
Mod Rest einer Division mit Ganzzahlen 7 Mod 3 = 17.2 Mod 3.1 = Fehler
K02_variablen.accdb:Modul exampleVariablenProzedur: berechnen
OpenOffice | 10.12.08 | Folie 40Access 2007 – VBA | 25.06.08 | Seite 40
Regionales Rechenzentrum für Niedersachsen
Reihenfolge der Operatoren
Bei Ausdrücken gelten die Rechenregeln der Mathematik:Klammer vorPotenz vorPunktrechnung vorStrichrechnung.
Beispiele: Liefert der Ausdruck (2 + 4 * 2) das gleiche Ergebnis wie ((2 + 4) * 2)? Liefert der Ausdruck (2^4 / 4) das gleiche Ergebnis wie (2^(4 / 4))?
Um fehlerhafte Ausdrücke zu vermeiden, sollten große Ausdrücke geklammert werden!
OpenOffice | 10.12.08 | Folie 41Access 2007 – VBA | 25.06.08 | Seite 41
Regionales Rechenzentrum für Niedersachsen
Strings verknüpfen
Mit Hilfe des kaufmännischen Unds (&) können Zeichenfolgen miteinander verknüpft werden. Zahlenwerte werden automatisch in Strings umgewandelt. Es können Variablen und / oder Konstanten miteinander verknüpft werden.
In einigen Büchern wird auch das Pluszeichen genutzt. Aber: 10 + " " + zeichenfolge erzeugt einen Fehler. Additionen mit einem String sind nicht möglich.
Dim zeichenfolge As String
zeichenfolge = "Eis"zeichenfolge = zeichenfolge & "bär"zeichenfolge = 10 & " " & zeichenfolgezeichenfolge = zeichenfolge & vbCrLf
OpenOffice | 10.12.08 | Folie 42Access 2007 – VBA | 25.06.08 | Seite 42
Regionales Rechenzentrum für Niedersachsen
Steuerzeichen
Konstanten ANSI-Zeichen BeschreibungvbCrLF Chr(13) & Chr(10) Kombination aus Wagenrücklauf und
ZeilenvorschubvbNewLine Chr(13) & Chr(10) Plattformspezifischer ZeilenumbruchvbCr Chr(13) Wagenrücklauf (Charriage Return)vbLF Chr(10) Zeilenvorschub (Line Feed)vbTab Chr(9) TabulatorzeichenvbBack Chr(8) Rückschrittzeichen
Steuerzeichen sind die nicht druckbaren Zeichen eines Zeichensatzes. Sie werden zur Formatierung der Bildschirmausgabe benötigt werden.
Beispiele: Den Zeilencursor an den Anfang der nächsten Zeile setzen: vbCrLF oder
Chr(13) & Chr(10) . Chr(34) ermöglicht die Darstellung des Anführungszeichens.
OpenOffice | 10.12.08 | Folie 43Access 2007 – VBA | 25.06.08 | Seite 43
Regionales Rechenzentrum für Niedersachsen
Chr() und Asc()
Chr(...) ... wird ein Integer-Wert von 0 bis 255 übergeben. Die Funktion liefert das dazugehörige ANSI-Zeichen zurück. Zum Beispiel Chr(65) liefert "A" zurück.
Asc(...) ... wird ein einzelnes Zeichen übergeben. Die Funktion liefert die dazugehörige Dezimalzahl zurück. Zum Beispiel Asc("A") liefert 65 zurück.
K02_variablen.accdb:Modul exampleVariablenProzedur: zeichen
OpenOffice | 10.12.08 | Folie 44Access 2007 – VBA | 25.06.08 | Seite 44
Regionales Rechenzentrum für Niedersachsen
Automatische Typumwandlung
... oder implizite Typumwandlung. ... bei verschiedenen numerischen Datentypen in einem Ausdruck:
VBA versucht einen Datentyp zu finden, in dem alle Werte dargestellt werden können.
Die Umwandlung verursacht meist keine Fehler. ... bei Strings, die als Zahlen in Berechnungen etc. interpretiert werden:
In Berechnungen werden Strings wie zum Beispiel "10" automatisch in einem numerischen Datentyp umgewandelt.
... bei Zahlen, die mit Strings verknüpft werden: Wenn das kaufmännische Und als Verknüpfungsoperator genutzt wird, werden
Zahlen automatisch als String interpretiert.
OpenOffice | 10.12.08 | Folie 45Access 2007 – VBA | 25.06.08 | Seite 45
Regionales Rechenzentrum für Niedersachsen
Strings in Berechnungen
ergebnis = "10" + 20 ... erzeugt keinen Fehler. 10 wird automatisch als numerischer Wert interpretiert. Als Ergebnis wird 30
ausgegeben. ergebnis = "A" + 20
... erzeugt einen Fehler. Mit Strings kann nicht gerechnet werden.
ergebnis = ASC("A") + 20 ... erzeugt keinen Fehler. Die Funktion liefert einen numerischen Wert, mit dem gerechnet werden kann.
ergebnis = "10 Eisbären" + 20 ... erzeugt einen Fehler. Mit einem String kann nicht gerechnet werden.
OpenOffice | 10.12.08 | Folie 46Access 2007 – VBA | 25.06.08 | Seite 46
Regionales Rechenzentrum für Niedersachsen
Explizite Typumwandlung
Debug.Print CInt(2.3) ' Ergebnis 2
Debug.Print CByte(256) ' Fehler: Überlauf
Debug.Print CBool(-1) ' Ergebnis wahr
Debug.Print CSng(22.4567878994556) ' Ergebnis 22,45679
Debug.Print CDbl(24) ' Ergebnis 24.0
Debug.Print CCur(2.37894) ' Ergebnis 2,3789
Debug.Print CDate("2.4.07") ' Ergebnis #04.02.2007#
Debug.Print CStr(2.3) ' Ergebnis "2,3"
OpenOffice | 10.12.08 | Folie 47Access 2007 – VBA | 25.06.08 | Seite 47
Regionales Rechenzentrum für Niedersachsen
MsgBox()
... ist ein Dialogfeld mit Schaltflächen zur Anzeige von Text. ... kann für kurze Status- oder Fehlermeldungen genutzt werden. ... gibt einen Integer-Wert zurück.
Der Wert gibt Auskunft darüber, welche Schaltfläche der Benutzer gedrückt hat.
Ob der Benutzer die Abbrechen-Schaltfläche gedrückt oder das Fenster nur geschlossen hat, ist nicht nachvollziehbar.
result = MsgBox(prompt [, buttons] [, title] [, helpfile, context ])
K02_variablen.accdb:Modul exampleVariablenProzedur: nachrichten
OpenOffice | 10.12.08 | Folie 48Access 2007 – VBA | 25.06.08 | Seite 48
Regionales Rechenzentrum für Niedersachsen
Parameter
prompt ist ein Informationstext für den Benutzer in dem Dialogfenster. title legt den Text fest, der in der Titelleiste des Dialogfensters
angezeigt wird. buttons
... bestimmt die angezeigten Schaltflächen. ... kann ein Icon anzeigen, die die Nachricht symbolisch erläutert. ... wird aus vordefinierten Konstanten gebildet.
result = MsgBox(prompt [, buttons] [, title] [, helpfile, context ])
OpenOffice | 10.12.08 | Folie 49Access 2007 – VBA | 25.06.08 | Seite 49
Regionales Rechenzentrum für Niedersachsen
Beispiele
MsgBox "Danke, ..."
Const txtTitel = "Addition"Dim message As StringDim result As VbMsgBoxResult
message = x & " + 4 = " & (x + 4)result = MsgBox(message, vbInformation, txtTitel)
OpenOffice | 10.12.08 | Folie 50Access 2007 – VBA | 25.06.08 | Seite 50
Regionales Rechenzentrum für Niedersachsen
Beispiele
Const txtTitel = "Fortsetzung der Berechnung"Const message = "Möchten Sie die Berechnung fortsetzen"Dim result As Integer
result = MsgBox(message, vbYesNo, txtTitel)
Const txtTitel = "Fortsetzung der Berechnung"Const message = "Möchten Sie die Berechnung fortsetzen"Dim result As Integer
result = MsgBox(message, vbExclamation + vbYesNo, txtTitel)
OpenOffice | 10.12.08 | Folie 51Access 2007 – VBA | 25.06.08 | Seite 51
Regionales Rechenzentrum für Niedersachsen
InputBox()
... fragt Werte vom Benutzer ab. ... ist eine Dialogbox, die aus einem Textfeld für die Eingabe und einer
Schaltfläche zur Bestätigung besteht. ... gibt einen String zurück, der den Inhalt des Textfeldes enthält.
Bei der Eingabe von Zahlen müssen diese in das entsprechende Format umgewandelt werden.
Zwischen Vor- und Nachkommastellen bei Dezimalzahlen kann der Benutzer ein Komma eingeben. VBA benötigt aber als Trennzeichen einen Punkt.
result = InputBox(prompt [, title] [, default] [, xPos] [, yPos] [, helpfile, context ])
OpenOffice | 10.12.08 | Folie 52Access 2007 – VBA | 25.06.08 | Seite 52
Regionales Rechenzentrum für Niedersachsen
Parameter
prompt beschreibt die gewünschte Eingabe. title ist eine Zeichenkette, die in der Titelleiste des Dialogfensters
angezeigt wird. default gibt ein Standardwert für die Eingabe vor, der vom Benutzer
verändert werden kann. xPos und yPos legen die Position der linken, oberen Ecke des
Dialogfeldes fest. Die Angaben werden in Twips per Pixel gerechnet (20 Twips sind 1 Pixel).
result = InputBox(prompt [, title] [, default] [, xPos] [, yPos] [, helpfile, context ])
OpenOffice | 10.12.08 | Folie 53Access 2007 – VBA | 25.06.08 | Seite 53
Regionales Rechenzentrum für Niedersachsen
Beispiel
Sub addition()Const zahl = 10
Dim strWert As StringDim intWert As IntegerDim summe As Integer
strWert = InputBox("Bitte geben Sie einen Wert ein:")intWert = CInt(strWert)summe = intWert + zahl
End Sub
OpenOffice | | Folie 54Access 2007 – VBA | 25.06.08 | Seite 54
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 diese über Methoden
verändern. ... sind die Instanz einer Klasse.
OpenOffice | | Folie 55Access 2007 – VBA | 25.06.08 | Seite 55
Regionales Rechenzentrum für Niedersachsen
Reale Welt
Objekt Auto hat Eigenschaften wie Farbe,Kilometerstand, Motorleistung etc.
… kommuniziert mit anderen Verkehrsteilnehmern.
… beachtet die Verkehrszeichen.
OpenOffice | | Folie 56Access 2007 – VBA | 25.06.08 | Seite 56
Regionales Rechenzentrum für Niedersachsen
Formular in Access
Eigenschaften (Attribute)
Backcolor (Hintergrundfarbe)
Caption (Beschriftung)
Scrollbars (Bildlaufleisten)
usw.
Methoden
Move (Verschieben)
Refresh (Neu Zeichnen)
SetFocus (Wird aktiv)
usw.
Ereignis (Event-Handler)
Click (Mausklick)
Activate (Aktiviert)
MouseUp (Maustaste auf)
usw.
OpenOffice | | Folie 57Access 2007 – VBA | 25.06.08 | Seite 57
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 58Access 2007 – VBA | 25.06.08 | Seite 58
Regionales Rechenzentrum für Niedersachsen
Klassen in Access
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.
Jede Schaltfläche hat die gleichen Eigenschaften und Methoden. Wie die Schaltfläche aussieht und wie sie auf Benutzeraktionen reagiert, ist unterschiedlich.
OpenOffice | | Folie 59Access 2007 – VBA | 25.06.08 | Seite 59
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 unterscheidet. ... 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 60Access 2007 – VBA | 25.06.08 | Seite 60
Regionales Rechenzentrum für Niedersachsen
Instanz (Exemplar)
... definiert eine Variable der entsprechenden Klasse. ... ist eine Variable vom Typ einer bestimmten Klasse. ... wird in der Regel mit Hilfe des Schlüsselwortes New angelegt. Sobald eine Instanz erstellt wird, wird für das Objekt Arbeitsspeicher
bereitgestellt. Sobald das Objekt geschlossen wird, wird der Arbeitsspeicher freigegeben
Wenn im Arbeitsspeicher ein vorhandenes Formular oder Bericht abgelegt wird, wird von einer Standardinstanz gesprochen. Weitere Instanzen von der gleichen Klasse werden zum Beispiel erstellt wenn ein Formular mehrfach geöffnet wird. Diese Art von Instanzen werden als Nicht-Standardinstanzen bezeichnet.
OpenOffice | | Folie 61Access 2007 – VBA | 25.06.08 | Seite 61
Regionales Rechenzentrum für Niedersachsen
Objektvariablen definieren
Dim frm As Form
Set frm = New Form_frmKundefrm.Visible = True
Eine Objektvariable wird genauso wie eine Variable für eine Ganzzahl etc deklariert. In diesem Beispiel wird eine Objektvariable angelegt, die auf ein Formular verweisen kann. Der Inhalt der Objektvariablen ist undefiniert
Einer Objektvariablen kann nicht mit Hilfe eines Gleichheitszeichens ein Wert zugewiesen werden. Sie wird gesetzt (Set). Hier wird ein neuer (New) Verweis auf das Formular Form_frmKunde gesetzt. Das Objekt, auf welches verwiesen wird, muss existieren.
Anschließend wird mit Hilfe der Eigenschaft Visible (Sichtbar) das Fenster angezeigt.
OpenOffice | | Folie 62Access 2007 – VBA | 25.06.08 | Seite 62
Regionales Rechenzentrum für Niedersachsen
Weitere Beispiel
Dim frm As New Form_frmKunde
frm.Visible = True
Dim frm As Object
Set frm = New Form_frmKundefrm.Visible = True
OpenOffice | | Folie 63Access 2007 – VBA | 25.06.08 | Seite 63
Regionales Rechenzentrum für Niedersachsen
Variant - Typ
Dim frm As Object
Set frm = New Form_frmKundefrm.Visible = TrueSet frm = Nothing
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.
Die Objektvariable wird auf nichts (Nothing) gesetzt. Der Verweis auf ein Objekt wird zerstört.
OpenOffice | | Folie 64Access 2007 – VBA | 25.06.08 | Seite 64
Regionales Rechenzentrum für Niedersachsen
Eigenschaften
... 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 über die Hilfe abgefragt werden können.
OpenOffice | | Folie 65Access 2007 – VBA | 25.06.08 | Seite 65
Regionales Rechenzentrum für Niedersachsen
Eigenschaften eines Textfeldes
txtBenutzer.TextAlign = 1 txtBenutzer.Value = "Bestellung" txtPasswort.InputMask = "Password" txtPasswort.SetFocus
OpenOffice | | Folie 66Access 2007 – VBA | 25.06.08 | Seite 66
Regionales Rechenzentrum für Niedersachsen
Name eines aktiven Formulars
Me.txtBenutzer.TextAlign = 1 Me bezieht sich auf das Formular, welches zu dem Code gehört. Hier wird das Formular genutzt, welche an die Anweisung gebunden ist. Steuerelementnamen und Formularnamen werden durch einen Punkt
getrennt. Set frm = Screen.ActiveForm
... bezieht sich auf das aktive Formular (ActiveForm) auf dem Bildschirm (Screen).
Ein aktives Formular hat eine farbige Titelleiste und liegt im Vordergrund von Access.
OpenOffice | | Folie 67Access 2007 – VBA | 25.06.08 | Seite 67
Regionales Rechenzentrum für Niedersachsen
Text und Wert eines Textfeldes
control.Value ... enthält den in der Datenbank gespeicherten Wert.
control.text ... enthält den angezeigten Text im Textfeld. ... kann nur verändert werden, wenn das Steuerelement den Fokus hat. Die
Einfügemarke befindet sich im Textfeld. Mit Hilfe von Control.SetFocus kann der Fokus auf ein bestimmtes Steuerelement gesetzt werden.
Sobald das Textfeld den Fokus verliert, wird der Wert automatisch in der Datenbank gespeichert oder geht verloren.
K02_variablen.accdb:Formular: frmEIngabe