76
Leseprobe Mit dieser Leseprobe erlernen Sie die Grundlagen, wie Sie Ihre Access-Datenbank gezielt optimieren, und Sie programmieren erste Abfragen in Access. Außerdem können Sie einen Blick in das vollständige Inhalts- und Stichwortverzeichnis des Buches werfen. Bernd Held VBA mit Access 812 Seiten, gebunden, mit CD, März 2014 49,90 Euro, 978-3-8362-2596-0 www.galileocomputing.de/3440 »Die wichtigsten Sprachelemente in Access« »Abfragen programmieren« Inhalt Index Der Autor Wissen, wie’s geht.

VBA mit Access - s3-eu-west-1.amazonaws.com · Access-Datenbank gezielt optimieren, und Sie programmieren erste Abfragen in Access. Außerdem können Sie einen Blick in das vollständige

Embed Size (px)

Citation preview

LeseprobeMit dieser Leseprobe erlernen Sie die Grundlagen, wie Sie Ihre Access-Datenbank gezielt optimieren, und Sie programmierenerste Abfragen in Access. Außerdem können Sie einen Blick in das vollständige Inhalts- und Stichwortverzeichnis des Bucheswerfen.

Bernd Held

VBA mit Access812 Seiten, gebunden, mit CD, März 2014 49,90 Euro, 978-3-8362-2596-0

www.galileocomputing.de/3440

»Die wichtigsten Sprachelemente in Access« »Abfragen programmieren«

Inhalt

Index

Der Autor

Wissen, wie’s geht.

85

3

Kapitel 3

Die wichtigsten Sprachelemente in Access

Das Wesentliche, was eine Programmiersprache ausmacht, sind ihre

Sprachelemente. In diesem Kapitel erfahren Sie, wie Sie mithilfe von

Abfragen, Schleifen und anderen Anweisungen Ihre Programme flexi-

bel gestalten können.

Sprachelemente lassen sich nicht mit dem Makrorekorder aufzeichnen und müs-

sen von Ihnen selbst erstellt werden. Der richtige Einsatz der Sprachelemente

macht letztendlich die Kunst der Programmierung aus. Des Weiteren finden Sie in

diesem Kapitel eine Auswahl der wichtigsten Funktionen von VBA sowie eine

Beschreibung ihres Einsatzes. Unter anderem geht es in diesem Kapitel um fol-

gende Fragestellungen:

� Wie arbeite ich mit Verzweigungen?

� Wie kann ich die verzwickten Verzweigungen übersichtlicher darstellen?

� Wie programmiere ich Schleifen mit VBA?

� Wie kann ich Standard-VBA-Funktionen in meinen Modulen einsetzen?

� Wie setze ich Arrays in der Programmierung ein?

� Wie arbeite ich mit Operatoren?

� Wie schreibe ich meine eigenen Funktionen?

Sie finden alle Beispiele in diesem Kapitel auf der diesem Buch beiliegenden CD-ROM

im Verzeichnis Kap03 in der Datei Sprachelemente.accdb.

3.1 Verzweigungen

Mit Verzweigungen können Sie in Access bestimmte Zustände abfragen und je nach

Zustand anders reagieren. Die Syntax für eine solche Verzweigung lautet:

If Bedingung Then [Anweisungen] [Else elseAnweisungen]

3 Die wichtigsten Sprachelemente in Access

86

Alternativ können Sie die Block-Syntax verwenden:

If Bedingung Then[Anweisungen][ElseIf Bedingung-n] Then[elseifAnweisungen] ...[Else[elseAnweisungen]]End If

Anstelle des Arguments Bedingung bzw. Bedingung-n müssen Sie entweder einen

numerischen Ausdruck oder einen Zeichenfolgenausdruck eingeben, der True oder

False ergibt. Wenn die Bedingung den Wert 0 zurückmeldet, wird Bedingung als False

interpretiert.

Unter Anweisungen werden jene Anweisungen aufgeführt, die abgearbeitet werden

sollen, wenn Bedingung den Wert True liefert.

Mit elseifAnweisungen sind eine oder mehrere Anweisungen gemeint, die ausgeführt

werden, wenn die zugehörige Bedingung (bzw. Bedingung-n) den Wert True meldet.

Anstelle des Arguments elseAnweisungen schreiben Sie eine oder mehrere Anweisun-

gen, die ausgeführt werden sollen, wenn keine der Bedingungen (Bedingung-Aus-

druck oder Bedingung-n-Ausdruck) den Wert True meldet.

Üben Sie nun diese Struktur anhand der folgenden Beispiele.

3.1.1 Eingaben auswerten

Im folgenden Beispiel überprüfen Sie die Eingabe eines Anwenders mithilfe einer

Verzweigung. Sehen Sie sich dazu das Listing 3.1 an.

Sub InputboxAuswerten() Dim strEingabe As String strEingabe = InputBox _ ("Geben Sie hier entweder Ja oder Nein ein!", "Eingabe")

Tipp

Verwenden Sie die erste Variante, wenn Sie kurze Abfragen durchführen, beispiels-

weise einen Datentyp kontrollieren. Die Blockvariante ist dann hilfreich, wenn Sie

mehrere Aktionen in einem Zweig durchführen möchten. Sie erhöht die Übersichtlich-

keit des Quellcodes.

3.1 Verzweigungen

87

3

'Wenn nur ENTER gedrückt wurde, dann Prozedur beenden If strEingabe = "" Then Exit Sub If strEingabe = "Ja" Then MsgBox "Sie haben Ja eingegeben!" ElseIf strEingabe = "Nein" Then MsgBox "Sie haben Nein eingegeben!" Else MsgBox "Sie haben keinen gültigen Wert eingegeben!" End If End Sub

Listing 3.1 Eingaben mit einer Verzweigung abfragen

Mithilfe der Funktion InputBox können Sie einen Dialog auf dem Bildschirm anzei-

gen, bei dem der Anwender die Möglichkeit hat, eine Eingabe zu machen. Das Ergeb-

nis dieser Eingabe speichern Sie in der Variablen strEingabe. Prüfen Sie in der ersten

Schleife (Variante 1), ob überhaupt ein Wert eingegeben wurde. Wenn nicht, dann

beenden Sie die Prozedur, indem Sie die Anweisung Exit Sub einsetzen. Im anderen

Fall läuft die Prozedur weiter und gelangt zur zweiten Verzweigung (Variante 2). Dort

prüfen Sie, welche Eingabe erfolgt ist. Wenn die Eingabe Ja vorgenommen wurde,

geben Sie eine entsprechende Meldung über die Funktion MsgBox auf dem Bildschirm

aus. Anderenfalls müssen Sie noch prüfen, ob der Wert Nein oder gar ein anderer

Wert eingegeben wurde. Setzen Sie dafür die ElseIf-Bedingung ein, und fragen Sie

die Eingabe erneut ab.

Abbildung 3.1 Die Eingabe erfolgt über die sogenannte InputBox.

Abbildung 3.2 Die Auswertung wird über die MsgBox vorgenommen.

3 Die wichtigsten Sprachelemente in Access

88

3.1.2 Eingaben prüfen und umwandeln

Im zweiten Beispiel werden Sie überprüfen, ob ein Anwender einen Text oder einen

numerischen Wert eingegeben hat. Je nach Ergebnis werden Sie entsprechend reagie-

ren. Sehen Sie sich dazu Listing 3.2 an.

Sub EingabenWandeln() Dim strEingabe As String

strEingabe = InputBox("Geben Sie einen Text ein!",_ "Eingabe") If strEingabe = "" Then Exit Sub

'Ist die Eingabe ein numerischer Wert? If Not IsNumeric(strEingabe) Then strEingabe = UCase(strEingabe) Else MsgBox "Die Eingabe war ein numerischer Wert!" End If

MsgBox strEingabeEnd Sub

Listing 3.2 Numerisch oder alphanumerisch?

Nutzen Sie die Funktion InputBox, um einen Abfragedialog am Bildschirm anzuzei-

gen. Kontrollieren Sie danach wiederum, ob überhaupt eine Eingabe vorgenommen

wurde. Wenn ja, dann prüfen Sie mithilfe der Funktion IsNumeric, ob ein numeri-

scher Wert eingegeben wurde. Indem Sie das Wort Not vor diese Funktion setzen, prü-

fen Sie, ob ein Text eingegeben wurde. Wenn ja, dann wandeln Sie den eingegebenen

Text über die Funktion UCase in Großbuchstaben um.

Abbildung 3.3 Den Namen über die InputBox erfassen, dann umwandeln und …

Abbildung 3.4 … die umgewandelte Zeichenfolge am Bildschirm ausgeben

3.1 Verzweigungen

89

3

Selbstverständlich haben Sie auch die Möglichkeit, einen Text in Kleinbuchstaben

umzuwandeln. Die dazu notwendige Funktion heißt LCase.

Sehr oft werden auch Datumsüberprüfungen in Access durchgeführt. Insbesondere

dann, wenn Berechnungen wie Liefertermine oder Zahlungsziele durchgeführt wer-

den, müssen Sie als Entwickler sicherstellen, dass auch wirklich Datumseingaben

vorgenommen wurden. Kontrollieren Sie dieses sofort nach der Eingabe, indem Sie

wie in Listing 3.3 vorgehen.

Sub Datumsprüfung() Dim dtm As Date On Error GoTo FEHLER

Beginn: dtm = InputBox("Geben Sie das Lieferdatum ein!", _ "Datum eingeben") If IsDate(dtm) And dtm >= "01.01.2014" Then Else 'Eingegebenes Datum zu alt. MsgBox "Nur Eingaben im aktuellen Jahr möglich" 'Gehe zurück zum Anfang GoTo Beginn End If 'Eingabe ok. Zahlungsziel von 14 Tagen aufrechnen dtm = dtm + 14 MsgBox "Das Zahlungsziel ist der: " & dtm Exit Sub

FEHLER: 'Fehler abfangen z.B. bei Texteingabe MsgBox "Sie haben kein gültiges Datum eingegeben!" 'Gehe zurück zum Anfang GoTo Beginn

End Sub

Listing 3.3 Wurde ein gültiges Datum eingegeben?

Im ersten Schritt fordern Sie den Anwender auf, ein Datum einzugeben.

3 Die wichtigsten Sprachelemente in Access

90

Abbildung 3.5 Das gewünschte Lieferdatum eingeben

Danach kontrollieren Sie mithilfe einer Verzweigung, ob das Datum im gültigen

Bereich liegt. Es werden nur Datumseingaben akzeptiert, die größer oder gleich dem

Datum 01.01.2014 sind. Prüfen Sie zusätzlich, ob es sich überhaupt um einen gültigen

Datumswert handelt. Dazu verwenden Sie die Funktion IsDate. Diese Funktion mel-

det den Wert True, wenn es sich um ein Datum handelt. Wurde ein gültiges Datum

eingegeben, dann rechnen Sie mit diesem Datum. Dabei können Sie genauso vorge-

hen, wie Sie es auch bei numerischen Werten machen würden. Addieren Sie zum Lie-

fertermin einfach die Zahl 14 (14 Tage), um einen gängigen Zahlungstermin zu

errechnen. Geben Sie diesen Termin dann auf dem Bildschirm aus.

Abbildung 3.6 Das Zahlungsziel ist 14 Tage später.

Info

Neben der Funktion IsNumeric gibt es weitere Funktionen, mit denen Sie Ihre Daten

prüfen können. Eine davon ist die Funktion IsDate. Die Funktion IsDate gibt den Wert

True zurück, wenn der Ausdruck ein Datum ist oder in ein gültiges Datum umgewan-

delt werden kann. Andernfalls wird der Wert False zurückgegeben. In Windows liegen

gültige Datumswerte im Bereich vom 1. Januar 100 n. Chr. bis 31. Dezember 9999 n.

Chr. vor. Auf anderen Betriebssystemen können andere Bereiche gelten.

Fehler abfangen

Wenn Sie sich noch einmal Listing 3.3 ansehen, so finden Sie dort zu Beginn des Codes

eine On Error-Anweisung.

3.1 Verzweigungen

91

3

Sie haben bereits mehrere typische VBA-Funktionen kennengelernt, die häufig ein-

gesetzt werden, um Eingaben zu überprüfen. In Tabelle 3.1 finden Sie die gängigsten

Prüffunktionen in VBA.

3.1.3 Eine Besonderheit

Neben der Verzweigung If...Then...Else gibt es eine weitere Möglichkeit, um

Werte zu überprüfen. Die Funktion heißt IIF.

Die Funktion IIF hat folgende Syntax:

IIF(expr, truepart, falsepart)

Damit stellen Sie sicher, dass Ihre Prozedur nicht mit einer vom System erzeugten Feh-

lermeldung abgebrochen wird, wenn beispielsweise ein Text eingegeben wird. Sollte

ein Anwender in diesem Beispiel einen Text eingeben, wird die Sprungmarke FEHLERangesprungen. Dort erhält der Benutzer eine Nachricht, dass ihm bei der Eingabe ein

Fehler unterlaufen ist. Mit dem Befehl GoTo geben Sie ihm aber die Möglichkeit, seine

Eingabe zu wiederholen. Als Sprungziel geben Sie dort die Sprungmarke Beginn an.

Funktion Beschreibung

IsEmpty Gibt einen Wert vom Typ Boolean zurück, der angibt, ob eine Variable

initialisiert wurde.

IsArray Gibt einen Wert vom Typ Boolean zurück, der angibt, ob eine Variable

ein Datenfeld ist.

IsDate Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Ausdruck in

ein Datum umgewandelt werden kann.

IsError Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Ausdruck

ein Fehlerwert ist.

IsNull Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Ausdruck

keine gültigen Daten (Null) enthält.

IsNumeric Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Ausdruck

als Zahl ausgewertet werden kann.

IsObject Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Bezeichner

eine Objekt-Variable darstellt.

Tabelle 3.1 Die wichtigsten Prüffunktionen von VBA

3 Die wichtigsten Sprachelemente in Access

92

� Mit dem Argument expr geben Sie den Ausdruck an, der ausgewertet werden soll.

� Das Argument truepart liefert den zurückgegebenen Wert oder Ausdruck, wenn

expr den Wert True ergibt.

� Das Argument falsepart stellt den zurückgegebenen Wert oder Ausdruck dar,

wenn expr den Wert False liefert.

Diese Funktion wertet immer sowohl den Teil truepart als auch den Teil falsepart

aus, auch dann, wenn nur einer von beiden Teilen zurückgegeben wird.

Machen Sie sich die Wirkungsweise an folgendem Beispiel deutlich:

Function Prüfen(intTest As Integer)

Prüfen = IIf(intTest > 1000, "Groß", "Klein")

End Function

Sub Übergabe()

MsgBox "Ihre Eingabe war: " & Prüfen(100)

End Sub

Listing 3.4 Erleichterung oder nicht?

Über die Funktion Prüfen können Sie mit der Funktion IIF kontrollieren, ob ein über-

gebener Wert in einem bestimmten Wertebereich liegt. Die Funktion Prüfen rufen

Sie auf, indem Sie in Ihrer Prozedur den Namen der Funktion angeben und dieser

einen Wert mitgeben. In der Funktion Prüfen wird dieser übergebende Wert dann

untersucht und an die aufrufende Prozedur zurückgemeldet.

3.2 Die Anweisung »Select Case« für mehr Übersicht

Wenn Sie mehrere Verzweigungen ineinanderschachteln bzw. mehrere Verzweigun-

gen hintereinander durchführen möchten, gibt es dafür eine bessere und übersicht-

lichere Lösung. Setzen Sie für solche Aufgaben die Anweisung Select Case ein.

Die Syntax für Select Case lautet:

Select Case Testausdruck[Case Ausdrucksliste-n [Anweisungen-n]] ...[Case Else [elseAnw]]End Select

3.2 Die Anweisung »Select Case« für mehr Übersicht

93

3

Anstelle des Arguments Testausdruck schreiben Sie einen beliebigen numerischen

Ausdruck oder Zeichenfolgenausdruck, den Sie auswerten können. Im Argument

Ausdrucksliste-n spezifizieren Sie den zu untersuchenden Ausdruck näher. Dabei

können Sie Vergleichsoperatoren verwenden. So stehen Ihnen Vergleichsoperatoren

wie To, Is oder Like zur Verfügung.

Anstelle des Arguments Anweisungen-n können Sie eine oder mehrere Anweisungen

angeben, die ausgeführt werden sollen, wenn Testausdruck mit irgendeinem Teil in

Ausdrucksliste-n übereinstimmt.

Das Argument elseAnw ist optional einsetzbar. Damit können Sie darauf reagieren,

wenn Testausdruck mit keinem der Ausdrücke im Case-Abschnitt übereinstimmen

sollte.

Sehen Sie nun ein paar typische Beispiele für den Einsatz von Select Case.

3.2.1 Zahlenwerte mit »Select Case« prüfen

Im nächsten Beispiel werden Eingaben geprüft. Dabei soll ermittelt werden, in wel-

chem Wertbereich die Eingabe vorgenommen wurde. Sehen Sie sich dazu Listing 3.5

an.

Sub MehrfachAuswertung() Dim intEing As Integer

intEing = InputBox _ ("Geben Sie einen Wert zwischen 1 und 100 ein!") Select Case intEing Case 1 To 5 MsgBox "Wert liegt zwischen 1 und 5" Case 6, 7, 8 MsgBox "Wert ist entweder 6, 7 oder 8" Case 9 To 15 MsgBox "Wert liegt zwischen 9 und 15" Case 16 To 100 MsgBox "Wert liegt zwischen 16 und 100" Case Else MsgBox "Es wurde kein gültiger Wert eingegeben!" End Select

End Sub

Listing 3.5 Zahlenwerte mit »Select Case« prüfen

3 Die wichtigsten Sprachelemente in Access

94

Wenden Sie die Select Case-Anweisung an, um die eingegebenen Werte zu überprü-

fen. In der ersten Abfrage kontrollieren Sie, ob der eingegebene Wert zwischen 1 und

5 liegt. In diesem Fall können Sie den Vergleichsoperator To einsetzen. In der zweiten

Abfrage haben Sie die Zahlenwerte durch Kommas getrennt eingegeben. Wurde kein

gültiger Zahlenwert eingegeben, dann schlägt die Anweisung Case Else zu. Dort

geben Sie eine Fehlermeldung auf dem Bildschirm aus.

Tabelle 3.2 enthält eine Liste der Vergleichsoperatoren und die Bedingungen, unter

denen das Ergebnis True, False oder 0 sein wird.

3.2.2 Textwerte mit »Select Case« prüfen

Im letzten Beispiel aus Listing 3.5 haben Sie Zahlenwerte überprüft. Dasselbe funktio-

niert natürlich auch bei Texten. Im folgenden vereinfachten Beispiel werden anhand

von eingegebenen Ortsnamen die dazugehörigen Postleitzahlen ermittelt.

Sub OrteInPLZ() Dim intEing As String Dim strPlz As String

intEing = InputBox _ ("Geben Sie bitte einen Ortsnamen ein!")

If intEing = "" Then Exit Sub

Select Case intEing Case "Gerlingen" strPlz = "70839" Case "Stuttgart" strPlz = "70469, 70468, 70467"

Vergleichsoperator Erklärung

< Kleiner als

<= Kleiner oder gleich

> Größer als

>= Größer oder gleich

= Gleich

<> Ungleich

Tabelle 3.2 Die Vergleichsoperatoren in Access

3.2 Die Anweisung »Select Case« für mehr Übersicht

95

3

Case "Tübingen" strPlz = "72076" Case "Leinfelden" strPlz = "70771" Case "Sindelfingen" strPlz = "72076" Case Else MsgBox "Die Stadt " & intEing _ & " ist noch nicht erfasst!" Exit Sub End Select

MsgBox "Für die Stadt " & intEing & _ " sind folgende PLZ möglich: " & strPlz

End Sub

Listing 3.6 Textwerte mit »Select Case« prüfen

Die Abfragetechnik bei Texten funktioniert fast genauso wie jene bei den Zahlenwer-

ten. Denken Sie jedoch daran, dass Sie die Texte in doppelte Anführungszeichen

setzen.

Abbildung 3.7 Auf die Eingabe des Ortes folgt die Ausgabe ...

Abbildung 3.8 … der möglichen Postleitzahlen.

Das Beispiel aus Listing 3.6 ist natürlich jederzeit erweiterbar. Der Ablauf der Abfra-

gen ist dabei wie folgt: Die Überprüfung erfolgt von oben nach unten. Sobald der

Suchbegriff, in unserem Beispiel die richtige Stadt, gefunden wird, wird die dazuge-

hörige Postleitzahl ermittelt und ans Ende der Anweisung gesprungen.

3 Die wichtigsten Sprachelemente in Access

96

3.3 Schleifen in Access einsetzen

Schleifen werden in Access dazu verwendet, um Abläufe mehrmals hintereinander

durchzuführen. Die Schleifen werden so lange durchlaufen, bis eine oder mehrere

Bedingungen zutreffen, die dann einen Abbruch der Schleife bewirken. Je nach ver-

wendeter Schleife findet die Abbruch-Prüfung am Anfang der Schleife bzw. am Ende

der Schleife statt. Auf den nächsten Seiten lernen Sie die zur Verfügung stehenden

Schleifen und einfache Beispiele für den Einsatz von Schleifen kennen.

3.3.1 »For...Next«-Schleifen

Sie können die Schleife For...Next verwenden, um einen Block von Anweisungen

eine unbestimmte Anzahl von Wiederholungen ausführen zu lassen. For...Next-

Schleifen verwenden eine Zählervariable, deren Wert mit jedem Schleifendurchlauf

erhöht oder verringert wird. Sie brauchen daher nicht daran zu denken, den Zähler

selbst hoch- oder herunterzusetzen.

Die Syntax dieser Schleife lautet:

For Zähler = Anfang To Ende [Step Schritt][Anweisungen][Exit For][Anweisungen]Next [Zähler]

� Das Argument Zähler ist erforderlich und besteht aus einer numerischen Variable,

die als Schleifenzähler dient.

� Das Argument Anfang repräsentiert den Startwert von Zähler.

� Mit dem Argument Ende legen Sie den Endwert von Zähler fest. Das Argument

Schritt ist optional. Hier können Sie den Betrag bestimmen, um den Zähler bei

jedem Schleifendurchlauf verändert wird. Falls kein Wert angegeben wird, ist die

Voreinstellung eins.

� Unter Anweisungen stehen eine oder mehrere Anweisungen zwischen For und Next,

die so oft wie angegeben ausgeführt werden.

Innerhalb einer Schleife kann eine beliebige Anzahl von Exit For-Anweisungen an

beliebiger Stelle als alternative Möglichkeiten zum Verlassen der Schleife verwendet

werden.

Im Beispiel aus Listing 3.7 soll eine Schleife genau 20-mal durchlaufen werden und

die Zählerstände in den Direktbereich Ihrer Tastumgebung schreiben. Der Code hier-

für lautet:

3.3 Schleifen in Access einsetzen

97

3

Sub ForSchleife() Dim i As Integer

For i = 1 To 20 Debug.Print "Zählerstand: " & i Next i

End Sub

Listing 3.7 Die »For...Next«-Schleife schreibt Zahlen in den Direktbereich.

Die Schleife wird genau 20-mal durchlaufen. Innerhalb der Schleife werden die Zäh-

lerstände über die Anweisung Debug.Print in das Direktfenster geschrieben. Am

Ende jeder Schleife wird der interne Zähler i um den Wert 1 erhöht.

Abbildung 3.9 Die Zählerstände werden im Direktbereich ausgegeben.

Wenn Sie eine andere Schrittweite haben möchten, dann ändern Sie die Prozedur aus

Listing 3.7 wie folgt ab:

3 Die wichtigsten Sprachelemente in Access

98

Sub ForSchleife02() Dim i As Integer

For i = 1 To 20 Step 5 Debug.Print "Zählerstand: " & i Next i

End Sub

Listing 3.8 Die »For...Next«-Schleife mit veränderter Schrittweite

Möchten Sie Ihre Schleife noch übersichtlicher machen, dann können Sie dies mit

sprechenden Variablen tun. Sehen Sie sich dazu Listing 3.9 an:

Sub ForSchleife03() Dim i As Integer Dim intMaxWert As Integer intMaxWert = 20 For i = 1 To intMaxWert Debug.Print "Zählerstand: " & i Next i

End Sub

Listing 3.9 Eine »For...Next«-Schleife mit übersichtlichem Ende

Die Vorgehensweise in Listing 3.9 ist zu empfehlen, da sie gerade bei größeren Proze-

duren übersichtlicher ist. Dabei setzen Sie den maximalen Wert intMaxWert gleich zu

Beginn der Prozedur auf den Höchstwert. Wenn Sie diesen Wert später ändern möch-

ten, müssen Sie nicht die ganze Prozedur nach der richtigen Stelle durchsuchen.

Außerdem haben Sie dabei auch die Möglichkeit, diese Variable für mehrere Schlei-

fen zu verwenden. Die Änderung erfolgt in diesem Fall immer nur an einer Stelle,

nämlich am Anfang der Prozedur.

3.3.2 »For Each...Next«-Schleifen

Die Schleife For Each...Next wiederholt eine Gruppe von Anweisungen für jedes Ele-

ment in einem Datenfeld oder einer Auflistung. Die Syntax dieser Schleife lautet:

For Each Element In Gruppe[Anweisungen][Exit For][Anweisungen]Next [Element]

3.3 Schleifen in Access einsetzen

99

3

Das Argument Element stellt die Variable zum Durchlauf durch die Elemente der Auf-

listung oder des Datenfeldes dar. Bei Auflistungen ist für Element nur eine Variable

vom Typ Variant, eine allgemeine oder eine beliebige spezielle Objektvariable zuläs-

sig. Bei Datenfeldern ist für Element nur eine Variable vom Typ Variant zulässig.

Das nächste Argument, Gruppe, steht für den Namen einer Objektauflistung oder

eines Datenfeldes.

Das letzte Argument, Anweisungen, ist optional und führt eine oder mehrere Anwei-

sungen durch, die für jedes Element in Gruppe ausgeführt werden sollen.

In Listing 3.10 werden alle Namen von Formularen in einer Access-Datenbank ausge-

geben.

Sub NamenAllerFormulareAuslesen() Dim frm As Form

For Each frm In Forms MsgBox frm.Name Next frm

End Sub

Listing 3.10 Die »For Each...Next«-Schleife gibt die Namen aller Formulare aus.

Bei dem Befehl Forms handelt es sich um ein sogenanntes Auflistungsobjekt. In die-

sem Auflistungsobjekt sind alle momentan geöffneten Formulare einer Access-

Datenbank verzeichnet. Diese können Sie über die Eigenschaft Name ermitteln und

mit der Funktion MsgBox auf dem Bildschirm ausgeben.

Gehen Sie jetzt noch einen Schritt weiter, und prüfen Sie, welches Formular in Ihrer

Access-Datenbank geladen ist. Setzen Sie dazu Listing 3.11 ein.

Sub IstFormularGeladen() Dim obj As AccessObject Dim dbs As Object Set dbs = Application.CurrentProject For Each obj In dbs.AllForms If obj.IsLoaded = True Then Debug.Print obj.Name End If Next obj

End Sub

Listing 3.11 Eine »For Each...Next«-Schleife zum Prüfen der geladenen Formulare

3 Die wichtigsten Sprachelemente in Access

100

Deklarieren Sie zu Beginn Ihrer Prozedur die verwendeten Variablen. Setzen Sie

danach einen Objektverweis auf das Objekt CurrentProject. Dieses Objekt verfügt

über mehrere Auflistungen, die bestimmte Objekte in der Access-Datenbank enthal-

ten, unter anderem auch das Auflistungsobjekt AllForms. Die weiteren möglichen

Auflistungsobjekte sehen Sie in Tabelle 3.3:

Nachdem Sie den Objektverweis mithilfe der Anweisung Set eingesetzt haben, kön-

nen Sie die Schleife beginnen. In der aktuellen Datenbank werden nun alle Formulare

geprüft. Mit der Eigenschaft IsLoaded prüfen Sie, ob die jeweiligen Formulare geladen

sind. Wenn ja, dann geben Sie die Namen der Formulare im Direktbereich Ihrer Ent-

wicklungsumgebung aus.

Setzen Sie jetzt das Auflistungsobjekt AllModules in Listing 3.12 ein, um alle Module

eines VBA-Projekts zu ermitteln. Verwenden Sie dazu wiederum die For Each...Next-

Schleife.

Sub AlleModuleAuflisten() Dim obj As AccessObject Dim dbs As Object

Set dbs = Application.CurrentProject

For Each obj In dbs.AllModules Debug.Print obj.Name Next obj

End Sub

Listing 3.12 Eine »For Each...Next«-Schleife zum

Auflisten aller Module

Auflistungsobjekt Bedeutung

AllForms Enthält alle Formulare.

AllReports Enthält alle Berichte.

AllMacros Enthält alle Makros.

AllModules Enthält alle Module.

AllDataAccessPages Enthält alle Datenzugriffsseiten. (Wird ab Access 2007 nicht

mehr unterstützt.)

Tabelle 3.3 Die Auflistungsobjekte des Objekts »CurrentProject«

3.3 Schleifen in Access einsetzen

101

3

Abbildung 3.10 Alle Module im Direktfenster ausgeben

Im folgenden Beispiel zur For Each...Next-Schleife aus Listing 3.13 werden Sie alle

Steuerelemente auf einem bestimmten Formular ermitteln und in den Direktbereich

schreiben. Der dazugehörige Code sieht wie folgt aus:

Sub SteuerelementeInFormAusgeben() Dim ctl As Control

For Each ctl In Form_Personal.Form Debug.Print ctl.Name Next ctl

End Sub

Listing 3.13 Eine Schleife zum Ermitteln aller Steuerelemente eines Formulars einsetzen

Definieren Sie im ersten Schritt eine Variable vom Typ Control. Dabei sprechen Sie

ganz allgemein ein Steuerelement an, das sich z. B. auf einem Formular oder einem

Bericht befinden kann. Setzen Sie danach die For Each...Next-Schleife auf, und

durchstreifen Sie Ihr Formular. Über die Anweisung Debug.Print geben Sie die

Namen der Steuerelemente aus, die sich in Ihrem Formular befinden.

3 Die wichtigsten Sprachelemente in Access

102

Abbildung 3.11 Alle Steuerelemente des Formulars werden ausgegeben.

Im letzten Beispiel zur For Each...Next-Schleife (siehe Listing 3.14) sollen die Namen

aller Access-Datenbanken eines Verzeichnisses und der darunter liegenden Verzeich-

nisse ermittelt und ausgegeben werden. Der Code für diese Aufgabe lautet:

Sub SchleifeForEach() Dim intZeile As Integer Dim fs As FileSystemObject Dim fVerz As Folder Dim fDatei As File Dim fDateien As Files

'Erzeuge ein FileSystemObject Set fs = CreateObject("Scripting.FileSystemObject") 'Folder-Objekt zum angegebenen Suchordner Set fVerz = fs.GetFolder(Application.CurrentProject.Path)

'Auflistung aller Dateien im Verzeichnis Set fDateien = fVerz.Files

3.3 Schleifen in Access einsetzen

103

3

'Durchlaufe alle gefundenen Dateien For Each fDatei In fDateien 'Ist die aktuelle Datei eine Access-Datei? If InStr(fDatei,".mdb") Or InStr(fDatei,".accdb") _ Then 'Datenbank gefunden, Dateiname ausgeben Debug.Print fDatei.Name End If Next fDatei

End Sub

Listing 3.14 So setzen Sie eine Schleife ein, um alle Access-Datenbanken

eines Verzeichnisses zu ermitteln.

Abbildung 3.12 Access-Datenbanken suchen und ausgeben

3 Die wichtigsten Sprachelemente in Access

104

Zu Beginn der Prozedur erstellen Sie einen Verweis auf die Bibliothek FileSystemOb-

ject. Diese Bibliothek enthält alle Befehle, die notwendig sind, um Verzeichnisse und

Dateien auszulesen. Über die Anweisung GetFolder geben Sie bekannt, in welchem

Verzeichnis Sie die Suche durchführen möchten. Das Auflistungsobjekt Files enthält

automatisch alle Dateien, die im angegebenen Verzeichnis vorhanden sind. Über die

Funktion InStr überprüfen Sie, ob der String ".mdb" (< Access 2007) oder ".accdb"

(>= Access 2007) im Dateinamen vorkommt. Wenn ja, dann sammeln Sie die Dateina-

men dieser Dateien und geben sie über die Anweisung Debug.Print im Direktfenster

der Entwicklungsumgebung aus.

3.3.3 Die Schleife »Do Until...Loop«

Die Do Until...Loop-Schleife wiederholt einen Block mit Anweisungen, solange eine

Bedingung den Wert True erhält. Die Bedingung wird jeweils am Ende der Schleife

geprüft. Als Abbruchbedingung können Sie alles Mögliche abfragen; so können Sie

z. B. eine Abbruchbedingung festlegen, wenn ein bestimmter Wert erreicht ist oder

eine Zelle einen bestimmten Text aufweist.

Die Syntax dieser Schleife sieht wie folgt aus:

Do [{Until} Bedingung][Anweisungen][Exit Do][Anweisungen]Loop

Die Bedingung stellt einen numerischen Ausdruck oder Zeichenfolgenausdruck dar,

der entweder True oder False ergibt. Liefert die Bedingung den Wert 0, so wird die

Bedingung als False interpretiert. Hinter den Anweisungen verbergen sich eine oder

mehrere Anweisungen, die wiederholt werden, solange oder bis Bedingung durch True

erfüllt ist.

Innerhalb einer Do Until...Loop-Anweisung kann eine beliebige Anzahl von Exit Do-

Anweisungen an beliebiger Stelle als Alternative zum Verlassen einer Do...Loop-

Anweisung verwendet werden. Exit Do wird oft in Zusammenhang mit der Auswer-

tung einer Bedingung (zum Beispiel If...Then) eingesetzt und hat zur Folge, dass die

Ausführung mit der ersten Anweisung im Anschluss an Loop fortgesetzt wird.

Beim folgenden Beispiel wird eine Schleife genau 50-mal durchlaufen. Die dazugehö-

rige Prozedur sehen Sie in Listing 3.15.

Sub SchleifeDoUntil() Dim i As Integer Dim intVorgabe As Integer

3.3 Schleifen in Access einsetzen

105

3

i = 0 intVorgabe = 60 Do Until intVorgabe = 10 intVorgabe = intVorgabe – 1 i = i + 1 Loop MsgBox " Die Schleife wurde " & i & _ " mal durchlaufen."

End Sub

Listing 3.15 »Do Until«-Schleife zum Bearbeiten eines Zählers

Initialisieren Sie zu Beginn der Prozedur Ihren Zähler, und setzen Sie diesen auf den

Wert 0. Legen Sie danach in der Variable intVorgabe Ihren Vorgabewert fest. Setzen

Sie die Do Until-Schleife auf, und definieren Sie als Ende-Bedingung für die Schleife

den Wert 10. Die Schleife soll demnach so oft durchlaufen werden, bis der Wert 10

erreicht wird. Innerhalb der Schleife müssen Sie dafür sorgen, dass Ihr Countdown

auch korrekt funktioniert. Dazu subtrahieren Sie jeweils den Wert 1 von der Zählvari-

ablen intVorgabe. Damit Sie am Ende ermitteln können, wie oft die Schleife durchlau-

fen wurde, zählen Sie innerhalb der Schleife die Zählvariable i hoch und geben diese

am Ende Ihrer Prozedur aus.

Im nächsten Beispiel soll eine Do Until-Schleife verwendet werden, um die Namen

aller Steuerelemente eines Formulars zu ermitteln. Den dazugehörigen Quellcode

entnehmen Sie Listing 3.16.

Sub SchleifeDoUntil02() Dim ctl As Control Dim i As Integer Dim frm As Form

i = 1 Set frm = Form_Personal With frm Do Until i = frm.Form.count Debug.Print frm.Controls(i).Name i = i + 1 Loop End With

End Sub

Listing 3.16 Per »Do Until«-Schleife Steuerelemente in Formularen ermitteln

3 Die wichtigsten Sprachelemente in Access

106

In Listing 3.16 sehen Sie, wie sich einiges an Schreibarbeit sparen lässt. Über die

Anweisung Set weisen Sie dem Formular Form_Personal einen etwas kürzeren

Namen zu, mit dem Sie das Formular zukünftig ansprechen können. Nun kommt die

Anweisung With ins Spiel. Über diese Anweisung erreichen Sie zusätzlich, dass Sie

den neuen Objektnamen frm bei einem Methodenaufruf gar nicht mehr angeben

müssen. Achten Sie am Ende darauf, dass Sie diese Anweisung mit End With wieder

abschließen. Setzen Sie zwischen der With- und der End With-Anweisung die Do Until-

Schleife auf. Als Ende-Bedingung setzen Sie den Wert ein, den Sie über die Eigenschaft

Count ermittelt haben. Gezählt werden in diesem Fall die Steuerelemente, die sich auf

dem Formular befinden. Innerhalb der Schleife geben Sie die Namen der Steuerele-

mente, die Sie über die Eigenschaft Name bekommen, im Direktfenster aus.

3.3.4 Die Schleife »Do While...Loop«

Die Do While...Loop-Schleife wiederholt einen Block mit Anweisungen, solange eine

Bedingung den Wert True erhält. Die Prüfung der angegebenen Bedingung erfolgt

immer zu Beginn der Schleife. Als Abbruchbedingung können Sie alles Mögliche

abfragen. So können Sie z. B. eine Abbruchbedingung festlegen, wenn ein bestimm-

ter Wert erreicht ist oder eine Zelle einen bestimmten Text aufweist.

Die Syntax dieser Schleife sieht wie folgt aus:

Do [{While} Bedingung][Anweisungen][Exit Do][Anweisungen]Loop

Die Bedingung stellt einen numerischen Ausdruck oder Zeichenfolgenausdruck dar,

der entweder True oder False ergibt. Liefert die Bedingung den Wert 0, so wird die

Bedingung als False interpretiert. Hinter den Anweisungen verbergen sich eine oder

mehrere Anweisungen, die wiederholt werden, solange oder bis die Bedingung True

erfüllt ist.

Innerhalb einer Do While...Loop-Anweisung kann eine beliebige Anzahl von Exit Do-

Anweisungen an beliebiger Stelle als Alternative zum Verlassen einer Do Loop-Anwei-

sung verwendet werden. Exit Do wird oft in Zusammenhang mit der Auswertung

einer Bedingung (zum Beispiel If...Then) eingesetzt und hat zur Folge, dass die Aus-

führung mit der ersten Anweisung im Anschluss an Loop fortgesetzt wird.

Im folgenden Beispiel sollen in einem bestimmten Verzeichnis alle Access-Daten-

banken gezählt werden. Den dafür notwendigen Code sehen Sie in Listing 3.17.

3.3 Schleifen in Access einsetzen

107

3

Sub DateienZählen() Dim strVerzeichnis As String Dim strDateiname As String Dim i As Integer

'Zielverzeichnis festlegen strVerzeichnis = Application.CurrentProject.Path & "\"

'Dateien mit Endung .mdb im Zielverzeichnis suchen strDateiname = Dir(strVerzeichnis & "*.mdb")

'Zähler auf 0 setzen i = 0 'Solange weiterer Dateiname vorhanden While strDateiname <> "" 'Zähler inkrementieren i = i + 1 'Nächste Datei abfragen strDateiname = Dir Wend

'Neue Suche: Dateien mit Endung .accdb im 'Zielverzeichnis suchen strDateiname = Dir(strVerzeichnis & "*.accdb") 'Solange weiterer Dateiname vorhanden While strDateiname <> "" 'Zähler inkrementieren i = i + 1 'Nächste Datei abfragen strDateiname = Dir Wend

'Ergebnis in Dialog ausgeben MsgBox "Gefundene Access-Datenbanken: " & i

End Sub

Listing 3.17 Eine Schleife zum Ermitteln der Anzahl von Datenbanken eines Verzeichnisses

Zu Beginn der Prozedur legen Sie fest, auf welchem Laufwerk bzw. in welchem Ver-

zeichnis nach Access-Datenbanken gesucht werden soll. Danach setzen Sie die Funk-

tion Dir ein. Diese Funktion gibt eine Zeichenfolge (String) zurück, die den Namen

3 Die wichtigsten Sprachelemente in Access

108

einer Datei, eines Verzeichnisses oder eines Ordners darstellt, der mit einem

bestimmten Suchmuster, einem Dateiattribut oder mit der angegebenen Datenträ-

ger- bzw. Laufwerksbezeichnung übereinstimmt. Geben Sie dieser Funktion noch als

Information mit, wo sie suchen und nach welchen Dateien sie Ausschau halten soll.

Speichern Sie den ersten gefundenen Wert in der Variable strDateiname. Setzen Sie

danach die Do While...Loop-Schleife auf, die so lange durchlaufen werden soll, bis

keine weiteren Access-Datenbanken mehr gefunden werden. Innerhalb der Schleife

suchen Sie jeweils die nächste Datenbank im angegebenen Verzeichnis. Um Access-

Datenbanken mit den Endungen .mdb und den mit Access 2007 eingeführten

Endungen .accdb zu erfassen, besitzt die Prozedur genau genommen zwei Do

While...Loop-Schleifen, die jeweils eine separate Suche ausführen.

3.4 VBA-Funktionen einsetzen

Neben den typischen Access-Funktionen gibt es eine ganze Reihe von VBA-Funktio-

nen und -Anweisungen, die Sie übrigens auch in anderen Office-Programmen wie

Excel, Word oder PowerPoint einsetzen können. In diesem Abschnitt lernen Sie diese

wichtigen Funktionen anhand von Beispielen aus der Praxis kennen.

3.4.1 Textdateien einlesen

Oft kommt es vor, dass Ihnen Informationen nicht in Access-Datenbanken, sondern

in Textdateien geliefert werden. Sie haben dann die Aufgabe, diese Textdateien ein-

zulesen. Das folgende Beispiel liest eine Textdatei in das Direktfenster Ihrer Entwick-

lungsumgebung ein. Dabei wird eine sehr wichtige VBA-Funktion gebraucht, um das

Ende der Textdatei festzustellen. Diese Funktion heißt EOF (von engl. »End Of File«).

Die Lösung dieser Aufgabe sehen Sie in Listing 3.18.

Sub TextdateiInDirektbereich() Dim strTextzeile As String Open Application.CurrentProject.Path & "\Artikel.txt" For Input As #1 Do While Not EOF(1) Line Input #1, strTextzeile Debug.Print strTextzeile Loop Close #1

End Sub

Listing 3.18 Textdatei einlesen

3.4 VBA-Funktionen einsetzen

109

3

Öffnen Sie mit der Methode Open die angegebene Textdatei. Setzen Sie danach die Do

While-Schleife auf, und geben Sie als Endkriterium die Funktion EOF an. Über die

Anweisung Line Input lesen Sie die einzelnen Zeilen der Textdatei in die Variable

strTextZeile ein. Ebenfalls in der Schleife geben Sie die einzelnen Zeilen über die

Anweisung Debug.Print im Direktbereich aus. Vergessen Sie nicht, am Ende der Pro-

zedur die Textdatei über die Methode Close zu schließen.

Abbildung 3.13 Diese Textdatei wird geöffnet und Zeile für Zeile verarbeitet.

Abbildung 3.14 Das Ergebnis wird im Direktfenster ausgegeben.

3.4.2 Eingegebene E-Mail-Adressen prüfen

Eine sehr interessante und oft eingesetzte Funktion heißt InStr. Mit dieser Funktion

können Sie prüfen, ob ein Text eine bestimmte Zeichenfolge enthält oder nicht.

3 Die wichtigsten Sprachelemente in Access

110

In der folgenden Prozedur wird geprüft, ob ein eingegebener Text eine gültige E-Mail-

Adresse enthält.

Sub ZeichenFolgePrüfen() Dim str As String 'Eingabebox öffnen str = InputBox("Geben Sie eine E-Mail-Adresse ein!") 'Wenn leere Eingabe => Prozedur beenden If str = "" Then Exit Sub 'Prüfe ob '@' im String enthalten ist If InStr(str, "@") > 0 Then MsgBox "E-Mail-Adresse!" Else MsgBox "keine gültige E-Mail-Adresse!" End If End Sub

Listing 3.19 Wurde eine gültige E-Mail-Adresse eingegeben?

Die Funktion InStr gibt einen Wert vom Typ Variant zurück, der die Position des ers-

ten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichenfolge angibt. Es

handelt sich in diesem vereinfachten Beispiel demnach um eine gültige E-Mail-

Adresse, wenn das Sonderzeichen @ darin vorkommt. Wenn Sie zum Beispiel die

E-Mail-Adresse [email protected] eingeben, meldet Ihnen die Funktion InStr den

Wert 5. Das fünfte Zeichen von links entspricht dem Sonderzeichen @.

Abbildung 3.15 Eine E-Mail-Adresse validieren

3.4.3 Textteile extrahieren

Möchten Sie einen bestimmten Textteil aus einem Gesamttext extrahieren, dann

suchen Sie standardmäßig über die Funktion InStr beginnend vom linken Ende des

Textes nach einer bestimmten Zeichenfolge, ab der die gewünschten Zeichen in

3.4 VBA-Funktionen einsetzen

111

3

einen anderen String übertragen werden sollen. Sehen Sie sich nun einmal folgenden

String an:

"\\Daten\Beispiele\Held\Datenbank.mdb"

In diesem Fall soll nach dem letzten Zeichen »\« gesucht werden, um letztendlich den

Dateinamen aus dem Text heraus zu extrahieren. In diesem Fall wäre es ein wenig

ungeschickt, über die Funktion InStr zu arbeiten, da diese Funktion, wie schon

gesagt, vom linken Beginn des Textes her das Zeichen »\« sucht. Hier müssten Sie

dann eine Schleife programmieren und den Text so lange nach links durchlaufen, bis

Sie das letzte Zeichen »\« gefunden haben. Das muss aber nicht sein. Setzen Sie statt-

dessen die Funktion InStrRev ein. Mithilfe dieser Funktion erhalten Sie die genaue

Position des gesuchten Zeichens bzw. die Position des ersten Zeichens der gesuchten

Zeichenfolge. Dabei stellt diese Angabe jedoch wieder die gezählten Zeichen von

links dar. Zusammenfassend ist zu sagen, dass die Suche bei der Funktion InstrRev

demnach von rechts stattfindet. Das Ergebnis, also die Position des Zeichens, wird

aber von links angegeben.

Lassen Sie uns diese Funktion nun an einem Beispiel üben. Aus dem Text

"\\Daten\Beispiele\Held\Datenbank.mdb"

soll der Name der Datei extrahiert werden. Dazu sind folgende Einzelschritte not-

wendig:

� die Ermittlung des letzten Zeichens »\« vom linken Rand des Textes gesehen bzw.

die Ermittlung des ersten Zeichens »\« vom rechten Rand des Textes her gesehen

� Feststellen der Gesamtlänge des Textes

� Ermittlung der Länge des gesuchten Textteils

� Ausgabe des gesuchten Textteils

Erstellen Sie für diesen Zweck die Prozedur aus Listing 3.20:

Sub TextteilSuchen() Dim str As String Dim intPos As Integer Dim intLänge As Integer

Const strcText = _ "\\Daten\Beispiele\Held\Datenbank.mdb"

'Position des letzten Backslash suchen intPos = InStrRev(strcText, "\") Debug.Print "Position des letzten '\'-Zeichens " & _ intPos

3 Die wichtigsten Sprachelemente in Access

112

'Gesamtlänge des Suchtextes ermitteln intLänge = Len(strcText) Debug.Print "Länge des Gesamttextes " & intLänge

'Länge des Textes nach dem letzten Backslash intLänge = Len(strcText) – intPos Debug.Print "Länge des gesuchten Textteils " & _ intLänge

'Text nach dem letzten Backslash extrahieren str = Mid(strcText, intPos + 1, intLänge) Debug.Print "Der gesuchte Textteil lautet: " & str

End Sub

Listing 3.20 Textteile extrahieren

Abbildung 3.16 Textteile extrahieren und Positionen ermitteln

3.4 VBA-Funktionen einsetzen

113

3

Der Gesamttext ist in diesem Beispiel in einer Konstanten angegeben. Über die Funk-

tion InstrRev ermitteln Sie die Position des ersten Auftretens des Zeichens »\« vom

rechten Rand her gesehen.

Mithilfe der Funktion Len ermitteln Sie die Gesamtlänge des Textes. Die Länge des

gesuchten Textes erfragen Sie, indem Sie die ermittelte Position des Zeichens »\« von

der Länge des Gesamttextes subtrahieren.

Im letzten Schritt setzen Sie die Funktion Mid ein, um den gesuchten Teil des Gesamt-

textes in der Variablen str zu speichern. Dazu übergeben Sie dieser Funktion die vor-

her ermittelte Position des Zeichens »\« und addieren den Wert 1, damit dieses

Zeichen nicht mit übertragen wird. Das zweite Argument für diese Funktion beinhal-

tet die Länge der Zeichen, die übertragen werden müssen. Auch diese Information

haben Sie bereits ermittelt.

3.4.4 Dateiendungen prüfen

Mit einer ähnlichen Funktion können Sie die Suche nach bestimmten Zeichen von

rechts nach links durchlaufen lassen. Diese Funktion heißt InStrRev. Sie gibt die Posi-

tion einer Zeichenfolge in einer anderen Zeichenfolge an, und zwar vom Ende der

Zeichenfolge her betrachtet.

In der nächsten Prozedur prüfen Sie die Eingabe einer Internetseite. Diese Eingabe

erklären Sie dann für gültig, wenn sie mit der Endung .htm bzw. .html eingegeben

wurde. Sehen Sie sich dazu das folgende Listing an:

Sub DateiEndungenPrüfen() Dim str As String

str = InputBox("Gültige Internetseite eingeben!") If str = "" Then Exit Sub If InStrRev(str, ".htm") > 0 Then MsgBox "Gültige Internetseite!" Else MsgBox "Keine gültige Internetseite!" End If

End Sub

Listing 3.21 Wurde eine gültige Internetseite eingegeben?

3 Die wichtigsten Sprachelemente in Access

114

Wenn Sie die Internetseite index.html erfassen, meldet Ihnen die Funktion InStrRev

den Wert 7. Die Funktion InStr würde ebenso den Wert 7 melden.

Sie fragen sich jetzt, warum man dann einen Unterschied gemacht hat. Der Unter-

schied wird in Listing 3.22 deutlich.

Sub Unterschied() Dim str As String

str = "C:\Eigene Dateien\Test.txt" MsgBox str & Chr(13) & Chr(13) & _ "InstrRev: " & InStrRev(str, "\") _ & Chr(13) & "Instr : " & InStr(str, "\")

End Sub

Listing 3.22 Der Unterschied zwischen »InStr« und »InStrRev«

Abbildung 3.17 Unterschiedliche Ergebnisse bei »InStr« und »InStrRev«

Die Funktion InStrRev meldet die Position 18, was dem letzten Backslash entspricht,

während die Funktion InStr den Wert 3 liefert, was den ersten Backslash im Pfad dar-

stellt. Je nachdem, wie Sie also einen String durchsuchen möchten, müssen Sie ent-

weder die Funktion InStr oder die Funktion InStrRev einsetzen.

Hinweis

Im letzten Listing haben Sie die Funktion Chr(13) verwendet, die einen Zeilenvor-

schub erzeugt. Dafür gibt es als Alternative auch VBA-Konstanten, die Sie Tabelle 3.4

entnehmen können.

3.4 VBA-Funktionen einsetzen

115

3

3.4.5 Texte kürzen und extrahieren

VBA stellt Ihnen einige Funktionen zur Verfügung, mit denen Sie Texte bearbeiten

können. So können Sie mithilfe der beiden Funktionen Left und Right einen Text je

nach Bedarf kürzen. Mit der Funktion Mid können Sie einen Teil des Textes aus einem

Gesamttext heraus extrahieren.

Im folgenden Beispiel soll ein eingegebener Text auf zehn Zeichen gekürzt werden.

Um diese Aufgabe zu lösen, starten Sie die Prozedur aus Listing 3.23.

Sub TextKürzen() Dim str As String

str = InputBox("Geben Sie einen Text ein!")

If str = "" Then Exit Sub If Len(str) > 10 Then str = Left(str, 10) MsgBox str

End Sub

Listing 3.23 Texte kürzen mit der Funktion »Left«

Mit der Funktion Len können Sie prüfen, wie viele Zeichen eingegeben wurden. Soll-

ten mehr als zehn Zeichen eingegeben worden sein, so übertragen Sie mithilfe der

Konstante Beschreibung

vbCrLf Kombination aus Wagenrücklauf und Zeilenvorschub

vbCr Wagenrücklaufzeichen

vbLf Zeilenvorschubzeichen

vbNewLine Plattformspezifisches Zeilenumbruchzeichen; je nachdem, welches

für die aktuelle Plattform geeignet ist

vbNullChar Zeichen mit dem Wert 0

vbNullString Zeichenfolge mit dem Wert 0; nicht identisch mit der Null-Zeichen-

folge (""); wird verwendet, um externe Prozeduren aufzurufen.

vbTab Tabulatorzeichen

vbBack Rückschrittzeichen

Tabelle 3.4 Die Konstanten für die Steuerzeichen

3 Die wichtigsten Sprachelemente in Access

116

Funktion Left zeichenweise genau zehn Zeichen und speichern diese in der Variab-

len str.

Abbildung 3.18 Diese Eingabe ist länger als 10 Zeichen.

Abbildung 3.19 Sie wird auf 10 Zeichen gekürzt.

Die Funktion Right kommt beispielsweise dann zum Einsatz, wenn Sie eine Zeichen-

folge eines Textes von der rechten Seite aus übertragen möchten.

So wird im folgenden Beispiel aus einer Datumseingabe das Jahr extrahiert und wei-

terverarbeitet. Sehen Sie sich dazu die nächste Prozedur aus Listing 3.24 an.

Sub TextKürzen02() Dim str As String

str = InputBox("Bitte Datum eingeben! (TT.MM.JJJJ)")

If str = "" Then Exit Sub Else str = Right(str, 4) End If

MsgBox str

End Sub

Listing 3.24 Texte mit der Funktion »Right« kürzen

Geben Sie bei der Funktion Right an, welchen Text Sie bearbeiten und wie viele Zei-

chen davon, von rechts beginnend, Sie übertragen möchten.

3.4 VBA-Funktionen einsetzen

117

3

Gehen Sie noch einen Schritt weiter, und extrahieren Sie bei folgender Prozedur aus

Listing 3.25 den Dateinamen aus einer kompletten Pfadangabe.

Sub TextExtrahieren() Dim str As String Dim str2 As String 'Pfad der aktuellen Datenbank holen str = Application.CurrentDb.Name 'Text rechts vom letzten Backlash extrahieren str2 = Mid(str, InStrRev(str, "\") + 1) MsgBox "Aus " & str & Chr(13) & Chr(13) & "wird" & _ Chr(13) & Chr(13) & str2

End Sub

Listing 3.25 Textteile mit der Funktion »Mid« extrahieren

Speichern Sie zunächst den Dateinamen der aktuell geöffneten Datenbank mithilfe

der Methode CurrentDb sowie der Eigenschaft Name in der Variablen str. Nun wird

neben dem Dateinamen auch der komplette Speicherpfad der Datenbank angezeigt.

Über die Funktion Mid können Sie jetzt den Dateinamen extrahieren. Um die Position

des letzten Backslashs herauszufinden, setzen Sie die Funktion InStrRev ein. Damit

dieser Backslash nicht mit übertragen wird, addieren Sie den Wert 1.

Abbildung 3.20 Die Funktion »Mid« in der praktischen Anwendung

3.4.6 Texte splitten

Seit der Access-Version 2000 gibt es die VBA-Funktion Split. Mithilfe dieser Funk-

tion können Sie Zeichenfolgen in Einzelteile zerlegen.

Bei der nächsten Aufgabe wird in Listing 3.26 ein Text, der durch Semikola getrennt

ist, in einzelne Felder aufgeteilt und anschließend im Direktfenster der Entwick-

lungsumgebung ausgegeben.

3 Die wichtigsten Sprachelemente in Access

118

Sub TexteZerlegen() Dim strText As String Dim varVarray As Variant Dim i As Integer Dim iMax As Integer

strText = "Max;Mustermann;Teststr. 15;70839;Gerlingen" varVarray = Split(strText, ";") iMax = UBound(varVarray) For i = 0 To iMax Debug.Print "Feld " & i + 1 & ": " & varVarray(i) Next i End Sub

Listing 3.26 Texte mithilfe der Funktion »Split« aufteilen

In der String-Variablen strText wird zunächst der komplette Datensatz erfasst. Die

einzelnen Felder sind hier durch ein Semikolon voneinander getrennt. Danach wen-

den Sie die Funktion Split an, um die einzelnen Feldinhalte in ein Datenfeld einzule-

sen. Dabei geben Sie im ersten Argument an, welcher Text gesplittet werden soll. Im

zweiten Argument geben Sie das Separator-Zeichen – hier das Semikolon – an. Das

Datenfeld varVarray wird vorher mit dem Datentyp Variant deklariert. Nachdem Sie

das Datenfeld gefüllt haben, ermitteln Sie mithilfe der Funktion UBound, wie viele ein-

zelne Daten im Datenfeld eingelesen wurden. Dabei muss darauf geachtet werden,

dass das erste Feld im Datenfeld mit dem Index 0 beginnt. Um also den Vornamen

aus dem Datenfeld zu ermitteln, könnte man MsgBox varVarray(1) schreiben.

In einer Schleife lesen Sie ein Feld nach dem anderen aus und geben es über die

Anweisung Debug.Print im Direktfenster der Entwicklungsumgebung aus.

Abbildung 3.21 Der komplette Text wurde auf einzelne Felder aufgeteilt.

3.4 VBA-Funktionen einsetzen

119

3

3.4.7 Texte zerlegen, konvertieren und wieder zusammensetzen

Im nächsten Beispiel wird ein Text komplett zerlegt, dann werden Änderungen vor-

genommen und anschließend wird er wieder zusammengesetzt. Zu Beginn liegt ein

Text vor, bei dem die einzelnen Informationen durch Semikola getrennt sind. Nach

der Zerlegung der einzelnen Teile werden diese in Großbuchstaben umgewandelt

und wieder zu einem Gesamttext zusammengesetzt. Die Prozedur für diese Aufgabe

sehen Sie in Listing 3.27:

Sub TexteZerlegenUndVerbinden() Dim strText As String Dim varVarray As Variant Dim i As Integer Dim iMax As Integer strText = "Max;Mustermann;Teststr. 15;70839;Gerlingen" Debug.Print "Vor Konvertierung: " & strText varVarray = Split(strText, ";") iMax = UBound(varVarray) For i = 0 To iMax varVarray(i) = UCase(varVarray(i)) Next i varVarray = Join(varVarray, ";") Debug.Print "Nach Konvertierung: " & varVarray End Sub

Listing 3.27 Texte zerlegen, konvertieren und wieder zusammensetzen

Der Text liegt zunächst in einer String-Variablen vor. Die einzelnen Textinformatio-

nen werden durch Semikola voneinander getrennt. Über den Einsatz der Funktion

Split zerlegen Sie diesen Gesamttext in einzelne Teile. Danach durchlaufen Sie in

einer Schleife alle einzelnen Felder, die jetzt im Datenfeld varVarray sind. Innerhalb

der Schleife wenden Sie die Funktion Ucase an, um die einzelnen Informationen in

Großbuchstaben umzuwandeln. Am Ende der Prozedur kommt dann die Funktion

Join zum Einsatz, um die einzelnen Felder wieder zusammenzusetzen. Übergeben

Sie dazu dieser Funktion im ersten Argument das Datenfeld, das die konvertierten

Texte enthält. Im zweiten Argument geben Sie das Separator-Zeichen bekannt, das

verwendet werden soll.

3 Die wichtigsten Sprachelemente in Access

120

Abbildung 3.22 Die Adresse wurde zerlegt, konvertiert und wieder zusammengesetzt.

3.4.8 Texte bereinigen

Wenn Sie Transfers von Texten in Ihre Datenbanken vornehmen, sollten Sie vorher

dafür sorgen, dass keine Leerzeichen mit übertragen werden. Für diesen Zweck stellt

VBA Ihnen drei Funktionen zur Verfügung:

� Die Funktion LTrim entfernt führende Leerzeichen (linker Rand).

� Die Funktion RTrim eliminiert nachgestellte Leerzeichen (rechter Rand).

� Die Funktion Trim entfernt vor- und nachgestellte Leerzeichen.

Der Quellcode in Listing 3.28 gibt dafür ein Beispiel:

Sub LeerzeichenEntfernen() Const strc As String = _ " da stimmt es hinten wie vorne nicht "

3.4 VBA-Funktionen einsetzen

121

3

MsgBox "Aus dem Text: " & Chr(13) & Chr(13) & "'" _ & strc & "'" & Chr(13) & Chr(13) & "wird:" _ & Chr(13) & Chr(13) & "'" & Trim(strc) & "'"

End Sub

Listing 3.28 Leerzeichen mit der Funktion »Trim« entfernen

Abbildung 3.23 Führende und nachgestellte Leerzeichen entfernen

3.4.9 Zahlenwerte runden

Für das Runden von Zahlenwerten steht Ihnen in VBA eine eigene Funktion zur Ver-

fügung. Diese Funktion heißt Round. In Listing 3.29 sehen Sie, was Sie bei dieser Funk-

tion beachten müssen.

Sub Runden() Const intc = 1.456

MsgBox Round(intc, 2)

End Sub

Listing 3.29 Zahlen runden mit der Funktion »Round«

Geben Sie bei der Funktion Round an, welchen Wert Sie runden möchten, sowie die

Anzahl der Stellen hinter dem Komma.

3.4.10 Dateien löschen

VBA stellt Ihnen eine Anweisung zur Verfügung, mit der Sie Dateien löschen können,

ohne vorher den Explorer aufzurufen. Diese Anweisung heißt Kill.

3 Die wichtigsten Sprachelemente in Access

122

Im Beispiel aus Listing 3.30 werden in einem vorher angegebenen Verzeichnis alle

Textdateien gelöscht:

Sub DateienLöschen() On Error GoTo Fehler ChDir ("C:\Windows\Temp\") Kill "*.txt" Exit Sub

Fehler: MsgBox "Verzeichnis oder Dateien nicht gefunden!"

End Sub

Listing 3.30 Dateien mit »Kill« löschen

Beim Einsatz der Anweisung Kill können Sie sogenannte Platzhalter einsetzen oder

den Namen der zu löschenden Datei komplett angegeben. Die Dateien werden direkt

gelöscht, ohne dass vorher noch einmal nachgefragt wird. Möchten Sie eine Sicher-

heitsabfrage einbauen, dann vervollständigen Sie den Code aus Listing 3.30 wie folgt:

Sub DateienLöschenMitRückfrage() Dim intAnswer As Integer

On Error GoTo Fehler ChDir ("C:\Windows\Temp\")

intAnswer = MsgBox("Dateien wirklich löschen?", vbYesNo)

If intAnswer = 6 Then Kill "*.txt" Else MsgBox "Sie haben die Aktion abgebrochen!" End If Exit Sub

Fehler: MsgBox "Verzeichnis oder Dateien nicht gefunden!"

End Sub

Listing 3.31 Erst nach erfolgter Rückfrage Dateien löschen

3.4 VBA-Funktionen einsetzen

123

3

Mit der Konstanten vbYesNo zeigen Sie das Meldungsfenster mit den beiden Schaltflä-

chen Ja und Nein an. Um zu ermitteln, welche Schaltfläche der Anwender geklickt

hat, müssen Sie diese abfragen. Klickt der Anwender die Schaltfläche Ja an, wird der

Wert 6 gemeldet. Klickt er hingegen auf die Schaltfläche Nein, wird der Wert 7 zurück-

gegeben. In Abhängigkeit davon führen Sie dann Ihre Löschaktion durch oder nicht.

3.4.11 Verzeichnis(se) erstellen

Um ein neues Verzeichnis anzulegen, brauchen Sie nicht extra den Windows-Explo-

rer zu starten, sondern Sie können dies direkt mit einer VBA-Anweisung erledigen.

Diese Anweisung lautet MkDir.

Im Beispiel aus Listing 3.32 wird unterhalb des aktuellen Verzeichnisses ein weiteres

Verzeichnis mit dem Namen Januar angelegt.

Sub VerzeichnisAnlegen() Dim strPfad As String

strPfad = Application.CurrentProject.Path & "\Januar" If Dir(strPfad, vbDirectory) = "" Then MkDir strPfad End If

End Sub

Listing 3.32 Nach erfolgter Verzeichnisprüfung ein Verzeichnis anlegen

Prüfen Sie zunächst über die Funktion Dir, ob das gewünschte Verzeichnis bereits

angelegt ist. Wenn nicht, dann liefert diese Funktion Ihnen eine leere Zeichenfolge

zurück. In diesem Fall wenden Sie die Anweisung MkDir an, um das noch fehlende

Verzeichnis anzulegen.

Erweitern wir das Beispiel aus Listing 3.32 noch etwas. Legen Sie automatisch Ver-

zeichnisse für alle 12 Monate eines Jahres über die Prozedur aus Listing 3.33 an:

Sub JahresVerzeichnisAnlegen() Dim i As Integer Dim StrPfad As String

Tipp

Alternativ können Sie die Rückfrage auch in einer einzigen Zeile unterbringen:

If MsgBox("Dateien wirklich löschen?", vbYesNo)=vbYes Then

3 Die wichtigsten Sprachelemente in Access

124

StrPfad = Application.CurrentProject.Path For i = 1 To 12 If Dir(StrPfad & "\" & MonthName(i), vbDirectory) = "" Then MkDir StrPfad & "\" & MonthName(i) End If Next i End Sub

Listing 3.33 Alle 12 Monate eines Jahres als Verzeichnisstruktur anlegen

Ermitteln Sie im ersten Schritt den Pfad der aktuell geöffneten Datenbank. Dazu fra-

gen Sie die Eigenschaften CurrentProject und Path ab. In einer For Next-Schleife, die

genau 12 Durchläufe aufweist, werden die Monate nach erfolgter Prüfung mittels der

Funktion MonthName sowie der Anweisung MkDir angelegt.

Abbildung 3.24 Die Monatsverzeichnisse wurden automatisch angelegt.

3.4 VBA-Funktionen einsetzen

125

3

3.4.12 Verzeichnisse löschen

Analog dazu gibt es selbstverständlich auch eine VBA-Anweisung, um ein Verzeich-

nis zu entfernen. Diese Anweisung lautet RmDir.

In Listing 3.34 wird das Verzeichnis Januar nach erfolgter Prüfung gelöscht:

Sub VerzeichnisLöschen() Dim StrPfad As String

StrPfad = Application.CurrentProject.Path & "\Januar" If Dir(StrPfad, vbDirectory) <> "" Then RmDir StrPfad End If

End Sub

Listing 3.34 Ein Verzeichnis mithilfe der Anweisung »RmDir« löschen

Sollen analog zu Listing 3.34 alle Monatsverzeichnisse in einer bestimmten Ordner-

hierarchie gelöscht werden, dann starten Sie die Prozedur aus Listing 3.35:

Sub JahresVerzeichnisLöschen() Dim i As Integer Dim StrPfad As String StrPfad = Application.CurrentProject.Path For i = 1 To 12 If Dir(StrPfad & "\" & MonthName(i), vbDirectory) <> "" Then RmDir StrPfad & "\" & MonthName(i) End If Next i End Sub

Listing 3.35 Alle Monatsverzeichnisse werden ohne Rückfrage gelöscht.

Prüfen Sie in der Schleife mithilfe der Funktion Dir, ob das zu löschende Verzeichnis

überhaupt existiert. Wenn ja, dann liefert diese Funktion den Pfadnamen des Ver-

zeichnisses zurück. In diesem Fall wenden Sie die Anweisung RmDir an, um das ent-

sprechende Monatsverzeichnis zu löschen.

3 Die wichtigsten Sprachelemente in Access

126

3.4.13 Wochentag ermitteln

Wenn Sie ein Datum vor sich haben, dann wissen Sie nicht immer, um welchen Tag

in der Woche es sich dabei handelt. Die Funktion Weekday meldet Ihnen einen Wert

zwischen 1 und 7 zurück, wenn Sie diese Funktion mit einem gültigen Datumswert

füttern. Wie das konkret aussieht, sehen Sie in der Prozedur aus Listing 3.36:

Sub WochentagErmitteln() Dim strEingabe As String

strEingabe = InputBox _ ("Bitte Datum eingeben! (TT.MM.JJJJ)", "Eingabe", Date)

If strEingabe = "" Then Exit Sub MsgBox "Der " & strEingabe & _ " ist ein " & WeekdayName(Weekday(strEingabe, vbMonday)) End Sub

Listing 3.36 Wochentag mit »Weekday« und »WeekdayName« ermitteln

Über die Funktion Weekday erhalten Sie eine Zahl zwischen 1 und 7. Wenn Sie mit der

Konstante vbMonday arbeiten, dann fällt ein Montag auf den Wert 1. Wird diese Kon-

stante nicht angegeben, dann liefert Ihnen diese Funktion standardmäßig für den

Sonntag den Wert 1. Mithilfe der Funktion WeekdayName können Sie den in Windows

hinterlegten Wochentag sprachunabhängig abfragen.

Abbildung 3.25 Die Eingabe mit der Vorbelegung des aktuellen Datums

Abbildung 3.26 Aus dem Datum wird der Wochentag ermittelt.

3.4 VBA-Funktionen einsetzen

127

3

3.4.14 Monat ermitteln

Verwandt mit der gerade beschriebenen Funktion ist auch die Funktion Month. Diese

Funktion meldet aufgrund eines Datums den dazugehörenden Monat. Sie gibt eine

ganze Zahl im Bereich von 1 bis 12 zurück, wenn ihr ein gültiges Datum übergeben

wurde.

Im Beispiel aus Listing 3.37 sehen Sie, wie Sie diesen Zahlen aussagefähige Namen

zuordnen können:

Sub MonatErmitteln() Dim strEingabe As String strEingabe = _ InputBox("Bitte Datum eingeben! (TT.MM.JJJJ)", "Eingabe", Date) If strEingabe = "" Then Exit Sub MsgBox "Der " & strEingabe & " entspricht einem " _ & WeekdayName(Weekday(strEingabe, vbMonday)) & _ " im Monat " & MonthName(Month(strEingabe)) End Sub

Listing 3.37 Monatsnamen mit den Funktionen »Month« und »MonthName« ermitteln

Mithilfe der Funktion Month ermitteln Sie zunächst den aktuellen Monatsindex, den

Sie an die Funktion MonthName übergeben. Diese Funktion bildet dann aus diesem

Monatsindex den dazugehörigen Monatsnamen (1=Januar, 2=Februar usw.).

Abbildung 3.27 Eingabe des aktuellen Datums

Abbildung 3.28 Der Monatsname wird aus dem Datum ermittelt.

3 Die wichtigsten Sprachelemente in Access

128

3.4.15 Datumsteile extrahieren

Möchten Sie ganz flexibel aus einem Datum einen bestimmten Teil – sei es nun das

Jahr, den Monat oder den Tag – extrahieren, steht Ihnen für diese Aufgabenstellung

eine weitere Funktion zur Verfügung. Diese Funktion heißt DatePart.

Wie Sie diese Funktion einsetzen, können Sie Listing 3.38 entnehmen:

Sub TeilVomDatum() Dim dtm As Date

dtm = InputBox("Geben Sie ein Datum ein:") MsgBox "Quartal: " & DatePart("q", dtm)

End Sub

Listing 3.38 Das Quartal aus einem Datum ermitteln

Wie Sie sehen, müssen Sie der Funktion DatePart ein Kürzel hinzufügen, das angibt,

welche Information Sie genau erhalten möchten. Tabelle 3.5 können Sie weitere Mög-

lichkeiten entnehmen, die Sie bei dieser Funktion haben.

Welche weiteren Argumente Sie bei dieser Funktion noch einstellen können, entneh-

men Sie der Online-Hilfe.

Kürzel Bedeutung

yyyy Jahr

q Quartal

m Monat

y Tag des Jahres

d Tag

w Wochentag

ww Woche

h Stunde

n Minute

s Sekunde

Tabelle 3.5 Die Kürzel für die Funktion »DatePart«

3.4 VBA-Funktionen einsetzen

129

3

3.4.16 Datumsberechnungen durchführen

Für Datumsberechnungen steht Ihnen die Funktion DatDiff zur Verfügung. In Lis-

ting 3.39 sehen Sie, wie Sie beispielsweise die Differenz vom aktuellen Tag zu einem

in der Zukunft liegenden Tag ermitteln können:

Sub Datumsberechnung() Dim dtm As Date

dtm = InputBox("Bitte zukünftiges Datum eingeben:" & vbLf & vbLf & _ "Heutiges Datum: " & Date, "Datumseingabe")

MsgBox "Tage von " & Date & " bis " & dtm & " = " & _ DateDiff("d", Date, dtm), vbInformation

End Sub

Listing 3.39 Datumsberechnungen mit der Funktion »DateDiff« ausführen

Auch hierbei gelten dieselben Kürzel, die schon in Tabelle 3.5 aufgeführt wurden.

Abbildung 3.29 Das in der Zukunft liegende Datum wird mit dem aktuellen Datum verrechnet.

Abbildung 3.30 Datumsdifferenzen berechnen Sie mit der Funktion »DateDiff«.

3.4.17 Zukünftige Termine berechnen

Verwandt mit der gerade beschriebenen Funktion ist auch die Funktion DateAdd.

Damit können Sie Termine in der Zukunft bzw. in der Vergangenheit errechnen.

Auch hier gelten wieder die Kürzel aus Tabelle 3.5.

3 Die wichtigsten Sprachelemente in Access

130

Im Beispiel aus Listing 3.40 wird der Termin vom aktuellen Datum aus bestimmt. In

einem Eingabefeld tragen Sie die Anzahl der Monate ein.

Sub Datumsberechnung02() Dim dtm As Date Dim strIntervall As String Dim intMonate As Integer strIntervall = "m" dtm = InputBox("Geben Sie ein Datum ein", "Datumseingabe", Date) intMonate = _ InputBox("Geben Sie die Anzahl der Monate ein", Monatseingabe", 3) MsgBox "Neues Datum: " & DateAdd(strIntervall, intMonate, dtm) End Sub

Listing 3.40 Datumsberechnungen mit der Funktion »DateAdd« durchführen

Abbildung 3.31 Zuerst wird das Datum erfasst (standardmäßig das aktuelle Datum).

Abbildung 3.32 Dann geben Sie das Monatsintervall ein (standardmäßig 3 Monate).

Abbildung 3.33 Aus beiden Informationen wird das zukünftige Datum berechnet.

3.4 VBA-Funktionen einsetzen

131

3

3.4.18 Datumsangaben formatieren

Möchten Sie eine Datumsangabe in ein bestimmtes Format bringen, dann können

Sie dazu die Eigenschaft Format verwenden.

Im Beispiel aus Listing 3.41 liegt ein Datum im Format 07.01.14 vor. Ihre Aufgabe

besteht nun darin, diese Eingabe in das Format 07.01.2014 zu bringen.

Sub DatumFormatieren() Const strDatum As String = "07.01.14" MsgBox "Vorher: " & strDatum & vbLf & _ "Nachher: " & Format(strDatum, "DD.MM.YYYY"), vbInformation End Sub

Listing 3.41 Datumsangaben formatieren (vierstelliges Jahr)

Geben Sie das Kürzel für die Jahresangabe viermal an (YYYY), um das Jahr vierstellig

anzuzeigen.

Abbildung 3.34 Ein Datum vierstellig ausgeben

Im nächsten Beispiel gehen Sie einen Schritt weiter und geben zusätzlich noch den

Wochentag an. Die dazugehörige Prozedur sehen Sie in Listing 3.42:

Sub DatumFormatieren02() Const strDatum As String = "07.01.14" MsgBox "Vorher: " & strDatum & vbLf & _ "Nachher: " & Format(strDatum, "DD.MM.YYYY (DDDD)"), vbInformation End Sub

Listing 3.42 Datumsangaben formatieren (Wochentag)

Indem Sie das Kürzel für den Tag (DDDD) viermal angeben, wird der Tag in ausgeschrie-

bener Form ausgegeben.

3 Die wichtigsten Sprachelemente in Access

132

Abbildung 3.35 Den Wochentag des Datums ermitteln

Im folgenden Beispiel soll die Kalenderwoche eines eingegebenen Datums ermittelt

werden. Die Prozedur für diese Aufgabe sehen Sie in Listing 3.43:

Sub DatumFormatieren03() Const strDatum As String = "07.01.14" MsgBox "Datum: " & strDatum & vbLf & _ "Kalenderwoche: " & Format(strDatum, "ww") End Sub

Listing 3.43 Datumsangaben formatieren (Kalenderwoche)

Möchten Sie zusätzlichen Text mit ausgeben, müssen Sie mit dem Zeichen & arbeiten

und die beiden Befehlsfolgen miteinander verknüpfen. Um die Kalenderwoche zu

ermitteln, geben Sie in der Eigenschaft Format das Kürzel (ww) an.

Abbildung 3.36 Die Kalenderwoche ermitteln

In den letzten Beispielen haben Sie bereits einige Datumskürzel kennengelernt. In

Tabelle 3.6 sehen Sie weitere mögliche Kürzel.

Kürzel Bedeutung

c Vordefiniertes Standarddatum

d Monatstag mit einer oder zwei Ziffern (1 bis 31)

Tabelle 3.6 Die Datums- und Zeitkürzel von Access

3.4 VBA-Funktionen einsetzen

133

3

3.4.19 Zeitfunktionen einsetzen

In VBA stehen Ihnen einige Zeitfunktionen zur Verfügung, die Sie flexibel einsetzen

können. Die wichtigsten Zeit-Funktionen sind:

� Now: Diese Funktion liefert neben der Uhrzeit auch gleich das aktuelle Tagesdatum.

� Time: Diese Funktion gibt die aktuelle Uhrzeit aus. Dabei verwendet Access die Zeit,

die in der Systemsteuerung von Windows eingestellt ist.

dd Monatstag mit zwei Ziffern (01 bis 31)

ddd Die ersten drei Buchstaben des Wochentags (Son bis Sam)

dddd Vollständiger Name des Wochentags (Sonntag bis Samstag)

w Wochentag (1 bis 7)

ww Kalenderwoche (1 bis 53)

m Monat des Jahres mit einer oder zwei Ziffern (1 bis 12)

mm Monat des Jahres mit zwei Ziffern (01 bis 12)

mmm Die ersten drei Buchstaben des Monats (Jan bis Dez)

mmmm Vollständiger Name des Monats (Januar bis Dezember)

q Datum als Quartal angezeigt (1 bis 4)

y Kalendertag (1 bis 366)

yy Die letzten zwei Ziffern der Jahreszahl (01 bis 99)

yyyy Vollständige Jahreszahl (0100 bis 9999)

h Stunde mit einer oder zwei Ziffern (0 bis 23)

hh Stunde mit zwei Ziffern (00 bis 23)

n Minute mit einer oder zwei Ziffern (0 bis 59)

nn Minute mit zwei Ziffern (00 bis 59)

S Sekunde mit einer oder zwei Ziffern (0 bis 59)

SMS Sekunde mit zwei Ziffern (00 bis 59)

AM/PM Zwölf-Stunden-Format mit den Großbuchstaben AM oder PM

am/pm Zwölf-Stunden-Format mit den Kleinbuchstaben am oder pm

A/P Zwölf-Stunden-Format mit den Großbuchstaben A oder P

a/p Zwölf-Stunden-Format mit den Kleinbuchstaben a oder p

Kürzel Bedeutung

Tabelle 3.6 Die Datums- und Zeitkürzel von Access (Forts.)

3 Die wichtigsten Sprachelemente in Access

134

� Hour: Diese Funktion liefert die Stunde einer angegebenen Uhrzeit.

� Minute: Diese Funktion liefert die Minuten einer angegebenen Uhrzeit.

� Second: Diese Funktion liefert die Sekunden einer angegebenen Uhrzeit.

Im Beispiel aus Listing 3.44 werden diese Zeitfunktionen demonstriert:

Sub ZeitanteileExtrahieren() Dim str As String Debug.Print "Aktuelle Uhrzeit mit Datum: " & Now Debug.Print "Aktuelle Uhrzeit ohne Datum: " & Time str = InputBox("Geben Sie eine Uhrzeit ein!", "Uhrzeit", Time) Debug.Print "Eingegebene Uhrzeit: " & str Debug.Print "Minuten: " & Minute(str) Debug.Print "Stunden: " & Hour(str) Debug.Print "Sekunden: " & Second(str) End Sub

Listing 3.44 Zeitfunktionen einsetzen

Abbildung 3.37 Die Ergebnisse der Zeitfunktionen

3.4 VBA-Funktionen einsetzen

135

3

3.4.20 Farbfunktionen verwenden

Um einem Formularfeld eine bestimmte Farbe zuzuweisen, können Sie mit der Funk-

tion QBColor arbeiten. Dieser Funktion müssen Sie einen Farbwert zuweisen, der über

einen eindeutigen Index festgelegt ist. Die Zuordnung von Farbindex zu Farbe kön-

nen Sie Tabelle 3.7 entnehmen.

Um diese Funktion an einem praktischen Beispiel zu demonstrieren, werden Sie in

einem Formular ein bestimmtes Feld (Umsatz) überwachen. Dabei wechseln Sie die

Farbe der Schrift bzw. die Farbe des Feldhintergrundes je nach Umsatzhöhe.

Folgende Definitionen treffen Sie dabei:

� Umsatz > 35.000: Hintergrundfarbe Hellgelb und Schriftfarbe Blau

� Umsatz < 35.000: Hintergrundfarbe Grau und Schriftfarbe Schwarz

Index Farbe

0 Schwarz

1 Blau

2 Grün

3 Cyan

4 Rot

5 Magenta

6 Gelb

7 Weiß

8 Grau

9 Hellblau

10 Hellgrün

11 Hellcyan

12 Hellrot

13 Hellmagenta

14 Hellgelb

15 Leuchtendweiß

Tabelle 3.7 Die Farbindizes der Funktion »QBColor«

3 Die wichtigsten Sprachelemente in Access

136

Um diese automatische Einfärbung zu hinterlegen, befolgen Sie die nächsten Ar-

beitsschritte:

1. Öffnen Sie das Formular Personal aus der Datenbank Sprachelemente.accdb in der

Entwurfsansicht.

2. Klicken Sie mit der rechten Maustaste auf eine freie Fläche im Formular, und wäh-

len Sie den Befehl Eigenschaften aus dem Kontextmenü.

3. Wählen Sie aus dem Dropdown-Feld den Eintrag Formular.

4. Wechseln Sie auf die Registerkarte Ereignis.

5. Klicken Sie im Feld Beim Anzeigen ganz rechts auf das Symbol mit den drei

Punkten.

6. Wählen Sie im Dialog Generator Wählen den Eintrag Code-Generator.

7. Bestätigen Sie Ihre Wahl mit OK.

8. Erfassen Sie jetzt im Code-Bereich folgende Ereignisprozedur aus Listing 3.45:

Private Sub Form_Current()

If Me!Umsatz > 35000 Then

Me!Umsatz.ForeColor = QBColor(1) 'Schrift Blau

Me!Umsatz.BackColor = QBColor(14) 'Hintergrund Hellgelb

Debug.Print Me!Umsatz.Value

Else

Me!Umsatz.ForeColor = QBColor(0) 'Schrift Schwarz

Me!Umsatz.BackColor = QBColor(8) 'Hintergrund Grau

Debug.Print Me!Umsatz.Value

End If

End Sub

Listing 3.45 Die Funktion »QBColor« anwenden

9. Speichern Sie diese Änderung, und schließen Sie das noch geöffnete Formular.

Mit der Eigenschaft ForeColor können Sie die Farbe für Text in einem Steuerelement

angeben.

Mit der Eigenschaft BackColor können Sie die Farbe im Inneren des Steuerelements

eines Formulars oder Bereichs angeben.

Rufen Sie nun das Formular mit einem Doppelklick auf, und blättern Sie nacheinan-

der ein paar Sätze durch.

3.4 VBA-Funktionen einsetzen

137

3

Abbildung 3.38 Schriftfarbe schwarz, Hintergrund grau bei < 35.000

Abbildung 3.39 Schriftfarbe blau, Hintergrund hellgelb bei > 35.000

Info

Zu den Themen Formulare und Ereignisse erfahren Sie mehr in Kapitel 7, »Program-

mierung von Dialogen, Steuerelementen und Formularen«, und Kapitel 9, »Ereignisse

in Access programmieren«.

3 Die wichtigsten Sprachelemente in Access

138

3.4.21 Werte aus einer Liste auswählen

Mithilfe der Funktion Choose können Sie einen Wert aus einer Liste über einen Index

ermitteln und ausgeben.

Im folgenden Beispiel haben Sie einige typische Sätze, die Sie jeden Tag in Briefen

und E-Mails tippen, zusammen in eine Funktion geschrieben:

Function Auswahl(i As Integer) As String

Auswahl = _ Choose(i, "Sehr geehrte Damen und Herren,", _ "Liebe Anwender,", "Hallo,", _ "Mit freundlichen Grüßen", _ "Viele Grüße", "Gruß")

End Function

Listing 3.46 Die Funktion »Choose« einsetzen

Abbildung 3.40 Das Ergebnis im Direktbereich

3.4 VBA-Funktionen einsetzen

139

3

Rufen Sie nun die Funktion auf, indem Sie den gewünschten Index übergeben. So lie-

fert Ihnen der Index 1 den Text »Sehr geehrte Damen und Herren«, der Index 2 den

Text »Liebe Anwender« usw.

Sub Aufruf() Dim str As String

str = Auswahl(1) Debug.Print str Debug.Print Chr(13) Debug.Print "Hier kommt der Text des Briefes!" Debug.Print Chr(13) str = Auswahl(5) Debug.Print str

End Sub

Listing 3.47 Den Index an die Funktion »Choose« übergeben

3.4.22 Ganzzahligen Wert extrahieren

Um einen ganzzahligen Wert aus einer Zahl herauszufiltern, können Sie die Funktion

Fix bzw. Int einsetzen. Bei negativen Zahlen ermittelt die Funktion Int die erste

ganze negative Zahl, die kleiner oder gleich der übergebenen Zahl ist, während die

Fix-Funktion die erste negative ganze Zahl liefert, die größer oder gleich der überge-

benen Zahl ist.

Sehen Sie sich dazu das Beispiel aus Listing 3.48 an:

Sub GanzzahligEndWerteErmitteln() Const intcZahl1 = 12.67 Const intcZahl2 = 49.9 Const intcZahl3 = -58.78 Debug.Print "Zahl1 " & intcZahl1 Debug.Print "Zahl2 " & intcZahl2 Debug.Print "Zahl3 " & intcZahl3 Debug.Print Chr(13) Debug.Print "FIX - Zahl1 " & Fix(intcZahl1) Debug.Print "INT - Zahl1 " & Int(intcZahl1) Debug.Print Chr(13) Debug.Print "FIX - Zahl2 " & Fix(intcZahl2) Debug.Print "INT - Zahl2 " & Int(intcZahl2)

3 Die wichtigsten Sprachelemente in Access

140

Debug.Print Chr(13) Debug.Print "FIX - Zahl3 " & Fix(intcZahl3) Debug.Print "INT - Zahl3 " & Int(intcZahl3)

End Sub

Listing 3.48 Die Funktionen »Int« und »Fix«

Abbildung 3.41 Die unterschiedlichen Auswirkungen von »Int« und »Fix«

3.5 Umwandlungsfunktionen

Hin und wieder müssen Sie einzelne Datentypen in andere Datentypen umwandeln.

Für diesen Zweck gibt es eine ganze Reihe von Umwandlungsfunktionen.

Funktion Rückgabetyp Bereich des Arguments »Ausdruck«

CBool Boolean Eine gültige Zeichenfolge oder ein gültiger numerischer

Ausdruck

Cbyte Byte 0 bis 255

Ccur Currency –922.337.203.685.477,5808 bis 922.337.203.685.477,5807

Cdate Date Ein beliebiger gültiger Datumsausdruck

CDbl Double –4,94065645841247E-324 für negative Werte;

4,94065645841247E-324 bis 1,79769313486232E308 für

positive Werte

Tabelle 3.8 Typumwandlungsfunktionen (Quelle: Online-Hilfe)

3.5 Umwandlungsfunktionen

141

3

Es folgen nun ein paar typische Beispiele, in denen Typumwandlungsfunktionen ein-

gesetzt werden.

3.5.1 Die Typumwandlungsfunktion »CBool«

Die Typumwandlungsfunktion Cbool wird verwendet, um einen Ausdruck in einen

Wert vom Typ Boolean umzuwandeln. Liefert der Ausdruck einen Wert ungleich null,

so gibt CBool den Wert True zurück, andernfalls False.

Im nächsten Beispiel soll geprüft werden, ob in der Datenbank Sprachelemente.accdb

das Formular Personal gerade geöffnet ist. Diese Aufgabe lösen Sie, indem Sie zuerst

eine Funktion schreiben, die Sie in Listing 3.49 einsehen können.

Function FormularGeöffnet(FormName As String) As Boolean

FormularGeöffnet = _ CBool(SysCmd(acSysCmdGetObjectState, acForm, FormName))

End Function

Listing 3.49 Funktion zum Prüfen eines geöffneten Formulars

Mit der Methode SysCmd können Sie eine Statusanzeige oder optional angegebe-

nen Text in der Statusleiste anzeigen, Informationen zu Microsoft Access und den

CDec Decimal Für skalierte Ganzzahlen, d.h. Zahlen ohne Dezimalstel-

len. Für Zahlen mit 28 Dezimalstellen gilt der Bereich

+/–7,9228162514264337593543950335.

CInt Integer –32.768 bis 32.767; Nachkommastellen werden gerundet.

CLng Long –2.147.483.648 bis 2.147.483.647; Nachkommastellen

werden gerundet.

CSng Single –3,402823E38 bis –1,401298E-45 für negative Werte;

1,401298E-45 bis 3,402823E38 für positive Werte

Cvar Variant Numerische Werte im Bereich des Typs Double; nicht-

numerische Werte im Bereich des Typs String

CStr String Die Rückgabe für CStr hängt vom Argument Ausdruck

ab.

Funktion Rückgabetyp Bereich des Arguments »Ausdruck«

Tabelle 3.8 Typumwandlungsfunktionen (Quelle: Online-Hilfe) (Forts.)

3 Die wichtigsten Sprachelemente in Access

142

zugehörigen Dateien ausgeben oder den Status eines angegebenen Datenbankob-

jekts zurückgeben.

Diese Methode hat folgende Syntax:

Ausdruck.SysCmd(Aktion, Argument2, Argument3)

Anstelle des Arguments Aktion übergeben Sie der Methode eine fest definierte Kon-

stante. Einige mögliche Konstanten sind:

� acSysCmdAccessDir: Diese Konstante gibt den Namen des Verzeichnisses zurück, in

dem sich Msaccess.exe befindet.

� acSysCmdAccessVer: Diese Konstante gibt die Versionsnummer von Microsoft

Access zurück.

� acSysCmdClearStatus: Diese Konstante gibt Informationen zum Status eines

Datenbankobjekts zurück.

� acSysCmdGetObjectState: Diese Konstante gibt den Status des angegebenen Daten-

bankobjekts zurück. Sie müssen die Argumente Argument2 und Argument3 angeben,

wenn Sie für die Aktion diesen Wert verwenden.

� acSysCmdGetWorkgroupFile: Diese Konstante gibt den Pfad zur Arbeitsgruppenda-

tei (System.mdw) zurück.

� acSysCmdIniFile: Diese Konstante gibt den Namen der von Microsoft Access ver-

wendeten INI-Datei zurück.

� acSysCmdInitMeter: Diese Konstante initialisiert die Statusanzeige. Sie müssen die

Argumente Argument2 und Argument3 angeben, wenn Sie diese Aktion verwenden.

� acSysCmdProfile: Diese Konstante gibt die Einstellung von /profile zurück, die

der Benutzer angegeben hat, wenn er Microsoft Access von der Befehlszeile aus

gestartet hat.

� acSysCmdRemoveMeter: Diese Konstante entfernt die Statusanzeige.

� acSysCmdRuntime: Diese Konstante gibt den Wert True (-1) zurück, wenn eine Lauf-

zeitversion von Microsoft Access ausgeführt wird.

� acSysCmdSetStatus: Diese Konstante legt den Text in der Statusleiste auf das Argu-

ment Text fest.

� acSysCmdUpdateMeter: Diese Konstante aktualisiert die Statusanzeige mit dem

angegebenen Wert. Sie müssen das Argument Text angeben, wenn Sie diese

Aktion verwenden.

Bei Argument2 handelt es sich um einen optionalen Variant-Wert. Dieses Argument

steht für einen Zeichenfolgenausdruck, der den Text angibt, der linksbündig in der

Statusleiste angezeigt wird. Dieses Argument ist erforderlich, wenn das Argument

3.5 Umwandlungsfunktionen

143

3

Aktion auf acSysCmdInitMeter, acSysCmdUpdateMeter oder acSysCmdSetStatus festge-

legt wurde.

In unserem Beispiel haben Sie die Einstellung acSysCmdGetObjectState verwendet. In

diesem Fall müssen Sie beispielsweise eine der vorgegebenen integrierten Konstan-

ten verwenden:

� acTable: eine Tabelle

� acQuery: eine Abfrage

� acForm: ein Formular

� acReport: ein Bericht

� acMacro: ein Makro

� acModule: ein Modul

� acDataAccessPage: eine Datenzugriffsseite

� acDiagram: ein Diagramm

Bei Argument3 handelt es sich um einen optionalen Variant-Wert. Dahinter verbirgt

sich ein numerischer Ausdruck, der die Statusanzeige steuert. Dieses Argument ist

erforderlich, wenn das Argument Aktion auf acSysCmdInitMeter festgelegt wurde. Für

andere Werte des Arguments Aktion ist es nicht anzugeben.

So können Sie beispielsweise über die Methode SysCMD ermitteln, ob ein Formular

geöffnet ist. Rufen Sie die SysCmd-Methode mit dem auf acSysCmdGetObjectState fest-

gelegten Argument Aktion und den Argumenten Objekttyp und Objektname auf, um

den Status des Formulars Datenbankobjekt zurückzugeben.

Ein Objekt kann einen von vier möglichen Status aufweisen:

� nicht geöffnet bzw. nicht vorhanden

� geöffnet

� neu

� geändert, jedoch noch nicht gespeichert

Was jetzt noch fehlt, ist die Prozedur, die unsere Funktion FormularGeöffnet aufruft.

Erfassen Sie jetzt diese Prozedur:

Sub FormularCheck() Dim bool As Boolean

bool = FormularGeöffnet("Personal") If bool = True Then MsgBox "Das Formular ist geöffnet!" Else

3 Die wichtigsten Sprachelemente in Access

144

MsgBox "Das Formular ist noch nicht geöffnet!" DoCmd.OpenForm "Personal", acViewNormal End If

End Sub

Listing 3.50 Formular öffnen, falls es noch nicht geöffnet ist

Die Funktion FormularGeöffnet liefert Ihnen einen Wahrheitswert True, wenn das

Formular Personal bereits geöffnet ist. Ist es nicht geöffnet, dann liefert die Funktion

den Wert False. In diesem Fall wenden Sie die Methode OpenForm an, um das Formu-

lar zu öffnen. Dieser Methode müssen Sie sowohl den Objekttyp als auch den Objekt-

namen bekannt geben.

3.5.2 Die Typumwandlungsfunktion »CDbl«

Mithilfe der Typumwandlungsfunktion CDbl können Sie beispielsweise aus einem

String, der einen Wert enthält, alle Punkte entfernen. Dieser String wird dann in

einen Ausdruck des Datentyps Double umgewandelt.

Im nächsten Beispiel werden aus einem String, der Tausenderpunkte enthält, diese

Punkte entfernt und in einer Variablen vom Typ Double gespeichert.

Sub TausenderpunkteRaus() Dim strZk As String Dim dblBetrag As Double

strZk = "128.235.311,45" Debug.Print "Zeichenkette vorher: " & strZk dblBetrag = CDbl("128.235.311,45") Debug.Print "Zeichenkette nachher: " & dblBetrag

End Sub

Listing 3.51 Tausenderpunkte aus einem String entfernen

Abbildung 3.42 Tausenderpunkte aus einem String entfernen

3.5 Umwandlungsfunktionen

145

3

3.5.3 Die Typumwandlungsfunktion »CDate«

Mithilfe der Typumwandlungsfunktion CDate können Sie Datumsangaben in Zei-

chenfolgen in echte Datumsangaben umwandeln. So wird beispielsweise aus der

Zeichenfolge 13. Oktober 2013 das Datum 13.10.2013.

In der Prozedur aus Listing 3.52 sehen Sie weitere Beispiele:

Sub DatumWandeln() Const strcDatum1 As String = "11/25/2013 8:30 AM" Const strcDatum2 As String = "12. Februar 2013" Const strcDatum3 As String = "Januar, 2013"

Debug.Print CDate(strcDatum1) Debug.Print CDate(strcDatum2) Debug.Print CDate(strcDatum3)End Sub

Listing 3.52 Datumswerte aus Strings herstellen

Abbildung 3.43 Sie können einen datumsähnlichen String

in korrekte Datumsangaben umwandeln.

3.5.4 Die Funktion »Val«

Mithilfe der Funktion Val können Sie numerische Werte aus einer Zeichenfolge her-

ausholen.

Im folgenden Praxisbeispiel sollen aus einer Zeichenfolge nur die numerischen

Werte extrahiert werden. Für diese Aufgabe schreiben Sie eine Funktion und überge-

ben dieser die komplette Zeichenfolge, die sowohl numerische als auch alphanume-

rische Zeichen enthalten kann. Als Rückgabe soll die Funktion nur die numerischen

Zeichen zurückliefern.

Function NumZeichExtra(strZ As String) As String Dim i As Integer Dim str As String

If IsNull(strZ) = False Then For i = 1 To Len(strZ)

3 Die wichtigsten Sprachelemente in Access

146

If Mid(strZ, i, 1) >= "0" And _ Mid(strZ, i, 1) <= "9" Then str = str & Mid(strZ, i, 1) End If Next i End If NumZeichExtra = str

End Function

Listing 3.53 Numerische Zeichen extrahieren

Prüfen Sie zuerst einmal, ob überhaupt eine Zeichenfolge an die Funktion übergeben

wurde. Dazu setzen Sie die Funktion IsNull ein. Danach ermitteln Sie mithilfe der

Funktion Len die Anzahl der übergebenen Zeichen. Sie durchlaufen eine Schleife, in

der Sie Zeichen für Zeichen überprüfen und in die Variable str einfügen, sofern das

jeweilige Zeichen einen Wert zwischen 0 und 9 aufweist. Geben Sie am Ende der Funk-

tion den so manipulierten String an die aufrufende Prozedur zurück.

Um diese Funktion richtig zu testen, erstellen Sie eine Prozedur, die testweise meh-

rere Zeichenfolgen nacheinander an die Funktion übergibt:

Sub TextzeichenRaus() Dim str1 As String Dim str2 As String Dim str3 As String Dim str4 As String str1 = "KD03456" str2 = "K897" str3 = "567MZ" str4 = "451234" Debug.Print "vorher " & str1 str1 = NumZeichExtra(str1) Debug.Print "nachher " & str1 & Chr(13) Debug.Print "vorher " & str2 str2 = NumZeichExtra(str2) Debug.Print "nachher " & str2 & Chr(13) Debug.Print "vorher " & str3 str3 = NumZeichExtra(str3) Debug.Print "nachher " & str3 & Chr(13)

3.6 Die »Is«-Funktionen in VBA

147

3

Debug.Print "vorher " & str4 str4 = NumZeichExtra(str4) Debug.Print "nachher " & str4

End Sub

Listing 3.54 Textzeichen eliminieren

Abbildung 3.44 Textzeichen eliminieren

3.6 Die »Is«-Funktionen in VBA

In VBA stehen Ihnen einige wichtige Funktionen zur Verfügung, mit denen Sie prü-

fen können, welcher Datentyp vorliegt. Auf diese Weise können Sie auf Nummer

sicher gehen, wenn Sie Werte weiterverarbeiten möchten.

3.6.1 Die Funktion »IsArray«

Mithilfe der Funktion IsArray prüfen Sie, ob es sich bei der angesprochenen Variab-

len um ein Datenfeld (Array) handelt.

Um diese Funktion zu üben, schreiben Sie eine Prozedur, in der Sie festlegen, wie

groß ein Datenfeld angelegt werden soll. Diese Information übergeben Sie einer

Funktion, die das Datenfeld in der gewünschten Größe anlegt und an die aufrufende

Prozedur zurückliefert.

Function ArrayBilden(lngGröße As Long) As Variant 'Array mit vorgegebener Größe erzeugen ReDim alngArr2(lngGröße - 1) As Long Dim lng As Long

291

6

Kapitel 6

Abfragen programmieren

Sie verwenden Abfragen, um Daten auf mehrere Arten anzuzeigen, zu

ändern und zu analysieren. Sie können sie auch als Datenquellen für

Formulare, Berichte und Datenzugriffsseiten verwenden.

In diesem Kapitel erfahren Sie, wie Sie mit Abfragen in Access umgehen können.

Unter anderem werden dabei folgende Fragen beantwortet:

� Welche Abfragetypen gibt es?

� Wie kann ich eine Abfrage öffnen bzw. starten?

� Wie führe ich Abfragen mit SQL durch?

� Wie funktioniert eine Aktualisierungsabfrage?

� Wie entwerfe ich eine Anfügeabfrage?

� Wie führe ich eine Löschabfrage durch?

� Wie erstelle ich eine neue Tabelle mithilfe einer Abfrage?

� Wie schreibe ich eine Datendefinitionsabfrage?

� Wie kann ich meine Anwender zwingen, bestimmte Eingaben in einer Tabelle vor-

zunehmen?

� Wie kann ich Daten aus mehreren Tabellen zusammenführen?

� Wie erstelle ich Abfragen mithilfe von ADO?

Die in diesem Kapitel vorgestellten Lösungen finden Sie auf der CD-ROM zum Buch

im Ordner Kap06 unter dem Namen Nordwind.accdb.

6.1 Abfragetypen

Access bietet eine ganze Reihe von verschiedenen Abfragen an, die Sie manuell

erstellen oder auch programmieren können. Sie verwenden Abfragen, um Daten auf

mehrere Arten anzuzeigen, zu ändern und zu analysieren. Sie können sie auch als

Datenquellen für Formulare, Berichte und Datenzugriffsseiten verwenden.

6 Abfragen programmieren

292

In Access unterscheidet man zwischen folgenden Abfragetypen:

� Auswahlabfragen: Mithilfe einer Auswahlabfrage rufen Sie Daten aus einer oder

mehreren Tabellen ab und zeigen die Ergebnisse in einem Datenblatt an. Dort

können Sie die Datensätze aktualisieren. Mit einer Auswahlabfrage können Sie

auch Datensätze gruppieren und Summen, die Anzahl, Durchschnittswerte und

andere Werte berechnen.

� Parameterabfragen: Eine Parameterabfrage ist eine Abfrage, die beim Ausführen

ein Dialogfeld zur Eingabe von Informationen anzeigt. Dies können Kriterien zum

Abrufen von Datensätzen oder auch Werte sein, die in ein Feld eingefügt werden

sollen. Sie können die Abfrage auch so entwerfen, dass nach mehreren Informatio-

nen gefragt wird.

� Kreuztabellenabfragen: Sie verwenden Kreuztabellenabfragen, um Daten zur Ver-

einfachung von Analysen zu berechnen und neu zu strukturieren. Kreuztabellen-

abfragen berechnen eine Summe, einen Durchschnitt, eine Anzahl oder eine

andere Funktion für Daten, die nach zwei Informationstypen gruppiert sind: ent-

lang der linken Seite des Datenblatts und entlang der oberen Seite.

� Aktionsabfragen: Diese Abfragen führen in nur einer Operation Änderungen an

einer Vielzahl von Datensätzen durch bzw. verschieben diese. Bei den Aktionsab-

fragen unterscheidet man zwischen folgenden Typen:

– Löschabfragen: Mithilfe einer Löschabfrage löschen Sie eine Gruppe von

Datensätzen aus einer oder mehreren Tabellen. Löschabfragen löschen immer

vollständige Datensätze, nicht die in Datensätzen markierten Felder.

– Aktualisierungsabfragen: Eine Aktualisierungsabfrage führt globale Änderun-

gen an Gruppen von Datensätzen in einer oder mehreren Tabellen durch. Mit

einer Aktualisierungsabfrage können Sie Daten in vorhandenen Tabellen

ändern.

– Anfügeabfragen: Eine Anfügeabfrage fügt eine Gruppe von Datensätzen aus

einer oder mehreren Tabellen am Ende einer anderen Tabelle oder mehrerer

Tabellen an.

– Tabellenerstellungsabfragen: Eine Tabellenerstellungsabfrage erstellt eine

Tabelle aus allen Daten oder einem Teil der Daten, in einer oder mehreren

Tabellen.

– SQL-Abfragen: Eine SQL-Abfrage ist eine Abfrage, die unter Verwendung einer

SQL-Anweisung erstellt wird. Mit der Structured Query Language (SQL) können

Sie relationale Datenbanken wie z. B. Access abfragen, aktualisieren und ver-

walten.

6.2 Abfragen durchführen

293

6

6.2 Abfragen durchführen

Über die Methode OpenQuery können Sie eine Auswahl- oder Kreuztabellenabfrage in

der Datenblattansicht, Entwurfsansicht oder Seitenansicht öffnen. Diese muss natür-

lich schon in der Datenbank angelegt sein.

Die Methode OpenQuery hat folgende Syntax:

OpenQuery(Abfragename, Ansicht, Datenmodus)

Im Argument Abfragename geben Sie den Namen der Abfrage ein, die Sie durchführen

möchten.

Beim Argument Ansicht können Sie entscheiden, wie Sie Ihre Tabelle anzeigen

möchten. Es stehen Ihnen dabei folgende Konstanten zur Verfügung:

� acViewDesign öffnet die Abfrage in der Entwurfsansicht.

� acViewNormal öffnet die Abfrage in gewohnter Weise in der Tabellenansicht (Stan-

dardeinstellung).

� acViewPivotChart stellt die Abfrage für ein Pivot-Diagramm zur Verfügung.

� acViewPivotTable: Hiermit können Sie die Felder der Abfrage für eine Pivot-

Tabelle verwenden.

� acViewPreview zeigt die Abfrage in der Seitenansicht an.

Beim letzten Argument Datenmodus legen Sie fest, ob Änderungen an der Abfrage

durchgeführt werden dürfen oder nicht. Dabei können Sie folgende Konstanten fest-

legen:

� acAdd: Der Anwender kann neue Datensätze hinzufügen, jedoch keine bestehen-

den Datensätze bearbeiten.

� acEdit: Der Anwender kann bestehende Datensätze bearbeiten und neue hinzufü-

gen (Standardeinstellung).

� acReadOnly: Der Anwender kann die Datensätze nur ansehen.

Die Prozedur aus Listing 6.1 öffnet die Abfrage Rechnungen aus der Datenbank Nord-

wind.accdb.

Sub AbfrageDurchführen() DoCmd.OpenQuery "Rechnungen", acViewNormal, acReadOnlyEnd Sub

Listing 6.1 Abfrage öffnen

6 Abfragen programmieren

294

Nach der Abfrage werden die Daten in einer Datentabelle ausgegeben (siehe Abbil-

dung 6.1).

Abbildung 6.1 Die Abfrage »Rechnungen« wurde ausgeführt.

Abbildung 6.2 Die Abfrage in der Entwurfsansicht mit allen Verknüpfungen zu den Tabellen

6.4 Aktualisierungsabfrage – Artikelnamen ändern

295

6

Was steckt konkret hinter dieser Abfrage? Öffnen Sie dazu einfach die Abfrage Rech-

nungen in der Entwurfsansicht. Dazu setzen Sie die Prozedur aus Listing 6.2 ein:

Sub AbfrageEntwurfÖffnen()

DoCmd.OpenQuery "Rechnungen", acViewDesign

End Sub

Listing 6.2 Abfrage in der Entwurfsansicht öffnen

Indem Sie der Methode OpenQuery die Konstante acViewDesign zuweisen, öffnen Sie

die Abfrage in der Entwurfsansicht (siehe Abbildung 6.2).

6.3 Abfragen mit SQL generieren

Eine weitere Möglichkeit, eine Abfrage in VBA zu erstellen und zu starten, ist die

Methode RunSQL. Mit dieser Methode können Sie eine Microsoft-Access-Aktions-

abfrage ausführen, indem Sie die entsprechende SQL-Anweisung verwenden.

Die Syntax der Methode RunSQL lautet:

RunSQL(SQLAnweisung, TransaktionVerwenden)

Im Argument SQLAnweisung erfassen Sie Ihre SQL-Anweisung. Speichern Sie diese

SQL-Anweisung vorher am besten in einer String-Variablen, und übergeben Sie diese

dann der Methode RunSQL.

Im Argument TransaktionVerwenden entscheiden Sie, ob Sie diese Abfrage in eine

Transaktion aufnehmen möchten. Unter einer Transaktion versteht man eine Reihe

von Änderungen, die an den Daten und am Schema einer Datenbank vorgenommen

werden. Wenn Sie dies wünschen, setzen Sie dieses Argument auf den Wert True.

6.4 Aktualisierungsabfrage – Artikelnamen ändern

Im ersten Beispiel zur Methode RunSQL (siehe Listing 6.3) führen Sie eine Aktualisie-

rungsabfrage durch. Dabei soll in der Datenbank Nordwind.accdb die Tabelle Artikel

geöffnet werden. Danach soll der Artikel Tofu umbenannt werden, und zwar in

Tofu-Eintopf.

Sub ArtikelNamenÄndern() Dim str As String

str = "UPDATE Artikel " & _

6 Abfragen programmieren

296

"SET Artikel.Artikelname = 'Tofu-Eintopf' " & _ "WHERE Artikel.Artikelname = 'Tofu'" DoCmd.RunSQL str

End Sub

Listing 6.3 Aktualisierungsabfrage durchführen (Artikelnamen ändern)

Mit der Anweisung UPDATE geben Sie bekannt, dass Sie die Tabelle Artikel aktualisie-

ren möchten. Geben Sie über SET bekannt, wie der neue Name des Artikels lauten soll.

Über WHERE bestimmen Sie, nach welchen Sätzen in der Tabelle gesucht werden soll.

Haben Sie sich Ihre SQL-Anweisung auf diese Weise zusammengestellt, übergeben

Sie sie an die Methode RunSQL.

Abbildung 6.3 Die Aktionsabfrage (Aktualisierung) muss bestätigt werden.

6.4.1 Aktualisierungsabfrage – Felder initialisieren

Möchten Sie schnell bestimmte Felder initialisieren, können Sie die SQL-Anweisung

UPDATE einsetzen:

Sub FelderInitialisieren() Dim str As String

str = "UPDATE Artikel2 SET Artikel2.Einzelpreis = 0" DoCmd.RunSQL str

End Sub

Listing 6.4 Aktualisierungsabfrage durchführen (Felder initialisieren)

Wenn Sie keine Null als Zahl, sondern einfach nur leere Felder in der Spalte Einzel-

preis haben möchten, verwenden Sie diese Anweisung:

SET Artikel2.Einzelpreis = NULL

Mithilfe der Methode RunSQL führen Sie die Aktualisierungsabfrage durch. Beim Aus-

führen der Prozedur werden Sie darauf hingewiesen, dass Sie Daten verändern möch-

ten. Diese Warnung sieht in etwa so wie in Abbildung 6.4 aus:

6.4 Aktualisierungsabfrage – Artikelnamen ändern

297

6

Abbildung 6.4 Warnmeldung bestätigen

Diese Meldung können Sie selbstverständlich auch unterdrücken. Ändern Sie dazu

die Prozedur aus Listing 6.4 wie folgt:

Sub FelderInitialisieren() Dim str As String

DoCmd.SetWarnings False str = "UPDATE Artikel2 SET Artikel2.Einzelpreis = NULL" DoCmd.RunSQL str DoCmd.SetWarnings True

End Sub

Listing 6.5 Aktualisierungsabfrage durchführen (Felder ohne Rückfrage initialisieren)

Abbildung 6.5 Die Einzelpreise wurden initialisiert.

6 Abfragen programmieren

298

6.5 Anfügeabfrage – Mitarbeiter hinzufügen

Im Beispiel aus Listing 6.6 führen Sie eine Anfügeabfrage durch. In die Tabelle Perso-

nal soll ein neuer Mitarbeiter eingefügt werden.

Sub MitarbeiterHinzufügen() Dim str As String

str = "INSERT INTO " & _ "Personal(Nachname, Vorname, " & _ "Position, Anrede, Geburtsdatum) " & _ "VALUES " & _ "('Held', 'Bernd', 'Externer Berater', " & _ "'Herr', '02.04.1969')" DoCmd.RunSQL str

End Sub

Listing 6.6 Anfügeabfrage durchführen (Festwerte anfügen)

Über die SQL-Anweisung INSERT INTO geben Sie bekannt, dass Sie in die Tabelle Perso-

nal einen Satz einfügen möchten. Geben Sie danach die Datenfelder der Tabelle an,

die Sie anfügen möchten. Achten Sie dabei darauf, dass die Feldnamen der Tabelle

mit Ihren Angaben übereinstimmen. Erfassen Sie nach VALUES die tatsächlichen

Werte in Textform. Betten Sie jede Information in einfache Anführungszeichen ein.

Trennen Sie jede Information durch Kommata voneinander ab.

Abbildung 6.6 Anfügeabfrage bestätigen

Wenn Sie die Prozedur aus Listing 6.6 starten, müssen Sie die Anfügeabfrage bestäti-

gen, indem Sie die Schaltfläche Ja anklicken (siehe Abbildung 6.6). Das Resultat sehen

Sie in Abbildung 6.7.

Im nächsten Beispiel führen Sie eine Anfügeabfrage durch. Dabei haben Sie die

neuen Mitarbeiter in eine separate Tabelle namens PersonalNeu eingegeben (siehe

Abbildung 6.8). Diese Mitarbeiter sollen nun in der Tabelle Personal hinten ange-

hängt werden.

6.5 Anfügeabfrage – Mitarbeiter hinzufügen

299

6

Abbildung 6.7 Der neue Mitarbeiter wurde eingefügt.

Abbildung 6.8 Diese beiden Tabellen sollen zusammengefügt werden.

Die Lösung für diese Aufgabenstellung sehen Sie in Listing 6.7.

Sub MitarbeiterHinzufügenAusTabelle() Dim str As String

str = "INSERT INTO " & _ "Personal(Nachname, Vorname, " & _

6 Abfragen programmieren

300

"Position, Anrede, Geburtsdatum) " & _ "SELECT Nachname, Vorname, Position, " & _ "Anrede, Geburtsdatum FROM [PersonalNeu]" DoCmd.RunSQL str

End Sub

Listing 6.7 Anfügeabfrage durchführen (aus einer Tabelle in derselben Datenbank)

Über die SQL-Anweisung INSERT INTO geben Sie an, dass Sie neue Sätze in die Tabelle

Personal einfügen möchten. Nachdem Sie festgelegt haben, welche Felder Sie dabei

bestücken möchten, wählen Sie über die SQL-Anweisung SELECT die Felder aus, die Sie

aus der Quelltabelle holen möchten. Achten Sie darauf, dass die Anzahl der einzufü-

genden Felder auf beiden Seiten gleich groß ist, also vor und hinter der Anweisung

SELECT. Vergessen Sie nicht, die Quelltabelle nach dem Schlüsselwort FROM anzugeben.

Abbildung 6.9 Die neuen Mitarbeiter wurden unten angehängt.

6.6 Löschabfrage ausführen

Im folgenden Beispiel führen Sie eine Löschabfrage aus. Dabei greifen Sie auf die

Tabelle Bestelldetails zu und löschen alle Datensätze, die sich auf die Bestellnummer

10250 beziehen.

6.6 Löschabfrage ausführen

301

6

Die Prozedur für diese Aufgabenstellung sehen Sie in Listing 6.8.

Sub BestelldetailsAusTabelleLöschen() Dim str As String str = "DELETE * FROM Bestelldetails " & _ "WHERE ([Bestell-Nr] = 10250)" DoCmd.RunSQL str

End Sub

Listing 6.8 Löschabfrage ausführen

Setzen Sie die SQL-Anweisung DELETE ein, um eine Löschabfrage auszuführen, die

komplette Datensätze aus einer Tabelle löscht. Geben Sie dabei an, aus welcher

Tabelle Sie Datensätze löschen möchten. Geben Sie mit der Bedingung WHERE das

Löschkriterium an. Es werden dann die Datensätze aus der Tabelle gelöscht, für die

das Löschkriterium zutrifft.

Wenn Sie die WHERE-Bedingung weglassen, werden alle Datensätze der angegebenen

Tabelle gelöscht. Die folgende Anweisung würde somit alle Datensätze aus der

Tabelle Bestelldetails löschen:

DoCmd.RunSQL "DELETE * FROM Bestelldetails"

Wenn Sie auf diese Weise Datensätze aus einer Tabelle löschen, gelten ähnliche

Bedingungen, als würden Sie die Datensätze manuell löschen. So müssen Sie bei-

spielweise auch den Löschvorgang manuell bestätigen, wie in Abbildung 6.10 darge-

stellt.

Abbildung 6.10 Die Löschabfrage muss bestätigt werden.

Sie können mit der DELETE-Anweisung per Löschweitergabe auch Datensätze aus

Tabellen entfernen, die Datensätze in derjenigen Tabelle referenzieren, die Sie

löschen möchten.

6 Abfragen programmieren

302

Sie müssen auch berücksichtigen, ob durch den Löschvorgang nicht eventuell die

referenzielle Integrität von Tabellenbeziehungen verletzt würde. In diesem Fall müs-

sen Sie entsprechende Einstellungen vornehmen, sonst erhalten Sie unter Umstän-

den eine Fehlermeldung. Sehen Sie sich dazu das Beispiel aus Listing 6.9 an:

Sub MitarbeiterAusTabelleLöschen() Dim str As String

str = "DELETE * FROM Personal " & _ "WHERE (Ort = 'London')" DoCmd.RunSQL str

End Sub

Listing 6.9 Alle Mitarbeiter aus London entfernen

Über diese Löschabfrage sollen alle Datensätze aus der Tabelle Personal gelöscht wer-

den, bei denen im Feld Ort der Eintrag London angegeben ist.

Führen Sie die Prozedur aus. Nachdem Sie den Dialog mit der Löschbestätigung ange-

klickt haben, erhalten Sie, je nach Access-Version, eine Fehlermeldung.

Abbildung 6.11 Fehlermeldung beim Ausführen der Löschabfrage

Sie hätten zwar dem Dialog zufolge die Möglichkeit, trotz Fehlermeldung die Aktion

auszuführen, doch klicken Sie in diesem Fall auf Nein.

Warum lassen sich die Daten nicht fehlerfrei löschen? Öffnen Sie zur näheren Klä-

rung das Fenster Beziehungen, indem Sie im Menü Extras den Befehl Beziehun-

gen auswählen. Bei Access 2007 bis 2013 gehen Sie entsprechend über das Ribbon

Datenbanktools und wählen den Befehl Beziehungen.

Wie Sie dem Fenster Beziehungen entnehmen können, steht die Tabelle Personal in

einer 1:n-Beziehung zur Tabelle Bestellungen. Demnach referenziert die Tabelle Be-

stellungen Datensätze aus der Tabelle Personal. Wenn Sie nun Datensätze aus der

Tabelle Personal löschen, fehlen einigen Datensätzen der Tabelle Bestellungen unter

Umständen entsprechende Referenzen.

6.6 Löschabfrage ausführen

303

6

Abbildung 6.12 Die Tabelle »Personal« steht in einer 1:n-Beziehung zur Tabelle

»Bestellungen«.

Klicken Sie mit der rechten Maustaste auf die Verbindungslinie zwischen der Tabelle

Personal und der Tabelle Bestellungen, und wählen Sie im Kontextmenü den Menü-

punkt Beziehung bearbeiten. Es öffnet sich das Fenster Beziehungen bearbei-

ten, das Sie in Abbildung 6.13 sehen.

Abbildung 6.13 Die Beziehungseigenschaften zwischen der Tabelle

»Personal« und der Tabelle »Bestellungen«

6 Abfragen programmieren

304

Bei der Tabelle Bestellungen ist zum einen die Erzwingung der referenziellen Integri-

tät eingestellt, zum andern ist eine Löschweitergabe nicht aktiviert. Konkret heißt

dies, dass Access eine Fehlermeldung ausgibt, wenn wir in der Tabelle Bestellungen

nicht zuerst alle Datensätze löschen, die diejenigen Datensätze referenzieren, die wir

in der Tabelle Personal löschen möchten.

Nun gehen wir in unserem Beispiel davon aus, dass es für uns kein Problem darstellt,

die zugehörigen Datensätze in der Tabelle Bestellungen auch zu löschen. Access

macht es uns in diesem Fall sehr einfach. Aktivieren Sie im Fenster Beziehungen

bearbeiten einfach die Option Löschweitergabe an verwandte Datensätze:

Dann erledigt Access die Löschung der entsprechenden Datensätze in der Tabelle

Bestellungen völlig automatisch für uns.

Bevor Sie nun die Prozedur aus Listing 6.9 ausführen, bearbeiten Sie auch noch die

Beziehung zwischen der Tabelle Bestelldetails und Bestellung, die ebenfalls in einer

1:n-Beziehung stehen. Aktivieren Sie auch hier die Löschweitergabe entsprechend.

Nun lassen sich die Datensätze in der Tabelle Personal über die in Listing 6.9 darge-

stellte Prozedur problemlos löschen. Beachten Sie jedoch bitte, dass in unserem Bei-

spiel nun aus den Tabellen Bestellungen und Bestelldetails alle Datensätze gelöscht

werden, die in Beziehung zu denjenigen Datensätzen stehen, die aus der Tabelle Per-

sonal gelöscht werden.

6.7 Tabellenerstellungsabfrage durchführen

Bei einer Tabellenerstellungsabfrage wird eine neue Tabelle aus Informationen einer

anderen Tabelle erstellt.

Im nächsten Beispiel sollen aus der Tabelle Kunden alle Kunden in eine neue Tabelle

übertragen werden, die am Standort Deutschland sind. Die Lösung dieser Aufgabe

sehen Sie in Listing 6.10:

Sub DeutscheKundenErmitteln() Dim str As String

str = "SELECT " & _ "Firma, Kontaktperson, " & _ "Position, Straße, Ort " & _ "INTO [KundenDeutschland] " & _ "FROM Kunden WHERE (Land = 'Deutschland')" DoCmd.RunSQL str

End Sub

Listing 6.10 Tabellenerstellungsabfrage durchführen

6.8 Öffnen oder neu anlegen

305

6

Über die SQL-Anweisung SELECT wählen Sie die Felder aus, die Sie in der neuen

Tabelle speichern möchten. Bei der Vergabe der Feldnamen können Sie bis zu 64 Zei-

chen für einen Namen verwenden. Über INTO geben Sie den Namen der Tabelle an,

die angelegt werden soll. Danach legen Sie mit der SQL-Anweisung FROM fest, woher

die Daten stammen. Mit der WHERE-Anweisung können Sie die zu übertragenden

Datensätze einschränken.

Abbildung 6.14 Alle Kunden aus Deutschland in einer neuen Tabelle

6.8 Öffnen oder neu anlegen

Wenn Sie die Prozedur aus Listing 6.10 ein zweites Mal starten, dann werden Sie fest-

stellen, dass Access automatisch die beim ersten Mal erstellte Tabelle Kunden-

Deutschland löscht und die Aufgabe erneut ausführt. Sie erhalten also immer ein

aktuelles, neues Ergebnis. Möchten Sie vorher prüfen, ob eine bestimmte Tabelle

existiert, können Sie je nach Prüfergebnis einmal die Tabelle KundenDeutschland öff-

nen, sofern sie bereits angelegt ist, oder die Tabelle neu anlegen, wenn sie noch nicht

angelegt wurde. Diese Prüfung erledigen Sie mit der Prozedur aus Listing 6.11.

Sub ÖffnenOderAnlegen() Dim str As String Dim dbs As Object

6 Abfragen programmieren

306

Dim obj As AccessObject Dim boolExistiert As Boolean

boolExistiert = False

Set dbs = Application.CurrentData For Each obj In dbs.AllTables If obj.Name = "KundenDeutschland" Then _ boolExistiert = True Next obj

If boolExistiert = True Then DoCmd.OpenTable "KundenDeutschland", acViewNormal Else str = "SELECT " & _ "Firma, Kontaktperson, " & _ "Position, Straße, Ort " & _ "INTO [KundenDeutschland] " & _ "FROM Kunden WHERE (Land = 'Deutschland')" DoCmd.RunSQL str End If

End Sub

Listing 6.11 Tabellenerstellungsabfrage erstellen oder Tabelle öffnen

Im Auflistungsobjekt AllTables sind alle Tabellen der geöffneten Datenbank ver-

zeichnet. Mithilfe einer Schleife ermitteln Sie, ob die Tabelle KundenDeutschland

bereits in der Datenbank vorhanden ist. Wenn ja, setzen Sie die Variable b auf den

Wert True. Im anderen Fall behält diese Variable ihren am Anfang der Prozedur zuge-

wiesenen Wert False.

Ist die Tabelle bereits in der Datenbank enthalten, wenden Sie die Methode OpenTable

an, um sie direkt zu öffnen. Muss die Tabelle erst noch erstellt werden, setzen Sie die

Methode RunSQL ein und übergeben ihr den String mit der SQL-Anweisung.

6.9 Datendefinitionsabfragen durchführen

Über SQL-Anweisungen können Sie auch neue Tabellen erstellen bzw. bestehende

ändern. Für diese Aufgaben stehen Ihnen folgende SQL-Anweisungen zur Verfügung:

� ALTER TABLE: Mit dieser Anweisung ändern Sie eine bereits bestehende Tabelle.

� CREATE TABLE: Mithilfe dieser Anweisung legen Sie eine neue Tabelle an.

6.9 Datendefinitionsabfragen durchführen

307

6

� CREATE INDEX: Diese Anweisung erstellt Ihnen einen Index für ein Datenfeld bzw.

eine Datengruppe.

� DROP TABLE: Durch diesen Befehl löschen Sie eine Tabelle.

� DROP INDEX: Durch den Einsatz dieser Anweisung entfernen Sie einen Tabellen-

index.

6.9.1 Neue Tabelle anlegen

Verwenden Sie die SQL-Anweisung CREATE TABLE, um eine neue Tabelle in Ihrer

Datenbank anzulegen. Dabei bestimmen Sie den Namen, den Feldtyp und die Größe

des Feldes. Die so erstellte Tabelle ist vorerst aber noch leer.

Im Beispiel aus Listing 6.12 wird eine neue Tabelle angelegt, die folgende Felder ent-

halten soll:

� Firma (Textfeld mit max. 30 Zeichen)

� Kontaktperson (Textfeld mit max. 30 Zeichen)

� Ort (Textfeld mit max. 20 Zeichen)

� Land (Textfeld mit max. 20 Zeichen)

Packen Sie diese Definitionen in eine Prozedur:

Sub Definitionsabfrage01() Dim str As String

str = "CREATE TABLE KundenNeu " & _ "(Firma Text(30), Kontaktperson Text(30), " & _ "Ort Text(20), Land Text (20))" DoCmd.RunSQL str Application.RefreshDatabaseWindow

End Sub

Listing 6.12 Neue Tabelle mit »CREATE TABLE« anlegen

Geben Sie bei der SQL-Anweisung CREATE TABLE den Namen der neuen Tabelle an.

Danach definieren Sie die einzelnen Felder, teilen Access mit, um welchen Datentyp

es sich handelt, und legen die Größe des Datenfeldes fest. Führen Sie direkt im

Anschluss daran die Methode RunSQL durch, um die neue Tabelle anzulegen.

Denken Sie daran, am Ende der Prozedur mithilfe der Methode RefreshDataBaseWin-

dow die Ansicht zu aktualisieren, da sonst die neue Tabelle nicht angezeigt wird. Diese

Methode simuliert das Drücken der Taste (F5).

6 Abfragen programmieren

308

Abbildung 6.15 Die fertige Tabelle in der Entwurfsansicht

Im letzten Beispiel haben Sie lediglich Datenfelder vom Typ Text angelegt. In Tabelle 6.1

können Sie weitere gängige Felddatentypen sehen, die Sie einsetzen können.

Datentyp Felddatentyp

BIT Ja/Nein

DATETIME Datum/Uhrzeit

DECIMAL Numerischer Datentyp

IMAGE OLE-Objekt

MONEY Währung

CHARACTER Text

TEXT Memo

Tabelle 6.1 Die gängigsten Datentypen für SQL-Anweisungen

6.9 Datendefinitionsabfragen durchführen

309

6Wenden Sie ein paar dieser Datentypen in der nächsten Aufgabe an. Dabei soll eine

Artikeltabelle erstellt werden, die folgende Datenfelder aufweist:

� Artikelname (Textfeld mit max. 30 Zeichen)

� Lagerbestand (numerischer Wert)

� Mindestbestand (numerischer Wert)

� Einzelpreis (Währungstyp)

� Verfallsdatum (Datumstyp)

Setzen Sie diese Felder wie in Listing 6.13 um:

Sub Definitionsabfrage02() Dim str As String

str = "CREATE TABLE ArtikelNeu " & _ "(Artikelname Text(30), Lagerbestand INTEGER, " & _ "Mindestbestand INTEGER, Einzelpreis MONEY, " & _ "Verfallsdatum DATETIME)" DoCmd.RunSQL str Application.RefreshDatabaseWindow

End Sub

Listing 6.13 Neue Tabelle anlegen

Sie können bei der Anlage von Tabellen in Access festlegen, dass ein Wert in ein

bestimmtes Feld eingegeben werden muss. In der Entwurfsansicht ist dabei im Grup-

penfeld Feldeigenschaften das Feld Eingabe erforderlich zuständig. Dieses

Feld können Sie ebenso über eine SQL-Anweisung belegen. In der Prozedur aus

Listing 6.14 wird eine Tabelle angelegt, bei der der Lagerbestand immer eingegeben

werden muss:

Sub Definitionsabfrage03() Dim str As String

SMALLINT Integerzahl (–32.768 bis 32.767)

TINYINT Integerzahl zwischen 0 und 255

INTEGER Integerzahl (–2.147.483.648 bis 2.147.483.647)

Datentyp Felddatentyp

Tabelle 6.1 Die gängigsten Datentypen für SQL-Anweisungen (Forts.)

6 Abfragen programmieren

310

str = "CREATE TABLE ArtikelNeu2 " & _ "(Artikelname Text(30), " & _ "Lagerbestand INTEGER NOT NULL, " & _ "Mindestbestand INTEGER, Einzelpreis MONEY, " & _ "Verfallsdatum DATETIME)" DoCmd.RunSQL str Application.RefreshDatabaseWindow

End Sub

Listing 6.14 Eingabepflicht für Datenfeld festlegen

Abbildung 6.16 Die neue Artikeltabelle in der Entwurfsansicht

Mit der SQL-Anweisung NOT NULL zwingen Sie einen Anwender zur Eingabe bestim-

mter Daten in eine Tabelle. Ein unvollständig eingegebener Datensatz kann nicht

gespeichert werden.

6.9 Datendefinitionsabfragen durchführen

311

6

Abbildung 6.17 Das Feld »Lagerbestand« muss eingegeben werden.

6.9.2 Tabellen ändern

Um eine bereits vorhandene Tabelle zu ändern, können Sie die SQL-Anweisung ALTER

TABLE einsetzen. Dabei müssen Sie genau angeben, was Sie konkret mit der Tabelle

anstellen möchten. Dafür stehen Ihnen weitere SQL-Statements zur Verfügung:

� ADD COLUMN: Über diese Anweisung fügen Sie einer Tabelle ein neues Feld hinzu.

� ADD CONSTRAINT: Mithilfe dieser Anweisung fügen Sie Ihrer Tabelle einen Mehrfach-

index hinzu.

� DROP COLUMN: Durch den Einsatz dieser SQL-Anweisung entfernen Sie ein Feld aus

Ihrer Tabelle.

� DROP CONSTRAINT: Hiermit löschen Sie einen Mehrfachindex aus Ihrer Tabelle.

In der nächsten Aufgabe soll in die Tabelle Personal ein weiteres Datenfeld, Abtei-

lung, eingefügt werden. Die Prozedur für diese Aufgabe können Sie Listing 6.15 ent-

nehmen:

Sub TabellenfeldEinfügen() Dim str As String

6 Abfragen programmieren

312

str = "ALTER TABLE Personal " & _ "ADD COLUMN Abteilung Text(20)" DoCmd.RunSQL str Application.RefreshDatabaseWindow

End Sub

Listing 6.15 Neues Feld in Tabelle anlegen

Geben Sie nach der SQL-Anweisung ALTER TABLE den Namen der Tabelle an, die Sie

ändern möchten. Nach dem Befehl ADD COLUMN geben Sie das Feld inklusive des Daten-

typs an und führen danach die Methode RunSQL aus, um das Feld in die Tabelle einzu-

fügen.

Abbildung 6.18 Das Feld »Abteilung« wurde eingefügt.

Um das Datenfeld Abteilung wieder aus der Tabelle Personal zu löschen, starten Sie

die Prozedur aus Listing 6.16:

Sub TabellenfeldLöschen() Dim str As String

6.9 Datendefinitionsabfragen durchführen

313

6

str = "ALTER TABLE Personal " & _ "DROP COLUMN Abteilung" DoCmd.RunSQL str Application.RefreshDatabaseWindowEnd Sub

Listing 6.16 Feld aus Tabelle entfernen

Beim Löschen eines Datenfeldes müssen Sie lediglich den Namen des Feldes angeben.

Möchten Sie mehrere Felder aus einer Tabelle entfernen, so geben Sie diese (durch

Kommata getrennt) nach der Anweisung DROP COLUMN an.

6.9.3 Einen Tabellenindex bestimmen

Möchten Sie einer Tabelle einen Index bzw. Mehrfachindex zuweisen, setzen Sie die

SQL-Anweisung CREATE INDEX ein. Ein Index beschleunigt das Suchen und Sortieren

von Datenfeldern.

Im nächsten Beispiel soll im ersten Schritt die Tabelle ArtikelNeu2 angelegt werden,

die aus den Feldern ArtNr, Artikelname, Lagerbestand, Mindestbestand, Ein-

zelpreis und Verfallsdatum besteht. Danach soll das Feld ArtNr mit einem Index

ausgestattet werden, bei dem Duplikate möglich sind. Den Code für diese Prozedur

können Sie in Listing 6.17 sehen:

Sub TabelleMitIndexEinfügen() Dim str As String

'Erster Schritt - Tabelle anlegen str = "CREATE TABLE ArtikelNeu2 " & _ "(ArtNr INTEGER, Artikelname Text(30), " & _ "Lagerbestand INTEGER NOT NULL, " & _ "Mindestbestand INTEGER, Einzelpreis MONEY, " & _ "Verfallsdatum DATETIME)" DoCmd.RunSQL str

'Zweiter Schritt - Index einbauen str = "CREATE INDEX IndexDoppelt " _ & "ON ArtikelNeu2 (ArtNr)" DoCmd.RunSQL str Application.RefreshDatabaseWindow

End Sub

Listing 6.17 Tabelle erstellen und Index (Duplikate möglich) setzen

6 Abfragen programmieren

314

Die SQL-Anweisung CREATE TABLE setzen Sie ein, um Ihre Tabelle und die einzelnen

Felder anzulegen. Danach verwenden Sie die Anweisung CREATE INDEX, um einen

Index in die Tabelle einzufügen. Dabei müssen Sie dem Index einen Namen geben

und Access mitteilen, in welcher Tabelle und auf welches Datenfeld dieser Index

angewendet werden soll. Übergeben Sie dann der Methode RunSQL den String str, der

die komplette SQL-Anweisung enthält.

Abbildung 6.19 Tabelle mit Index ausstatten (Duplikate sind möglich)

Soll der Index eindeutig sein, also keine Duplikate zulassen, dann starten Sie die Pro-

zedur aus Listing 6.18:

Sub TabelleMitEindeutIndexEinfügen() Dim str As String

'Erster Schritt - Tabelle anlegen str = "CREATE TABLE ArtikelNeu3 " & _ "(ArtNr INTEGER, Artikelname Text(30), " & _ "Lagerbestand INTEGER NOT NULL, " & _ "Mindestbestand INTEGER, Einzelpreis MONEY, " & _ "Verfallsdatum DATETIME)" DoCmd.RunSQL str

6.9 Datendefinitionsabfragen durchführen

315

6

'Zweiter Schritt - Index einbauen str = "CREATE UNIQUE INDEX IndexDoppelt " & _ "ON ArtikelNeu3 (ArtNr)" DoCmd.RunSQL str Application.RefreshDatabaseWindowEnd Sub

Listing 6.18 Tabelle erstellen und Index (ohne Duplikate) setzen

Das Schlüsselwort UNIQUE sorgt dafür, dass der Index ohne Duplikate angelegt wird.

6.9.4 Tabellenindex entfernen

Wenn Sie einen bereits gesetzten Index aus einer Tabelle entfernen möchten, setzen

Sie die SQL-Anweisung DROP INDEX ein. Die folgende Prozedur aus Listing 6.19 entfernt

den Index aus der Tabelle ArtikelNeu2:

Sub TabellenIndexEntfernen() Dim str As String

str = "DROP INDEX IndexDoppelt ON ArtikelNeu2" DoCmd.RunSQL str Application.RefreshDatabaseWindow

End Sub

Listing 6.19 Den Index aus einer Tabelle entfernen

Als Ergebnis sehen Sie im Entwurfsmodus der Tabelle ArtikelNeu2 im Feld Indiziert

den Wert Nein. Der Index wurde also entfernt.

6.9.5 Tabelle entfernen

Verwenden Sie die SQL-Anweisung DROP TABLE, um eine Tabelle aus Ihrer Datenbank

zu entfernen.

Im Beispiel aus Listing 6.20 wird die Tabelle ArtikelNeu2 aus der Datenbank entfernt:

Sub TabelleEntfernen() Dim str As String

str = "DROP TABLE ArtikelNeu2"

DoCmd.RunSQL str

6 Abfragen programmieren

316

Application.RefreshDatabaseWindow

End Sub

Listing 6.20 Tabelle entfernen

Achten Sie beim Löschen darauf, dass die Tabelle nicht geöffnet ist. Sollte die Tabelle

geöffnet sein, während Sie versuchen, diese zu löschen, erhalten Sie eine Fehlermel-

dung.

Sie haben die Möglichkeit, mithilfe des Auflistungsobjekts AllTables zu prüfen, ob

Ihre Tabelle existiert. Die Eigenschaft IsLoaded prüft, ob die zu löschende Tabelle

geöffnet ist. Wenn ja, dann verwenden Sie die Methode Close, um die Tabelle zu

schließen. Direkt anschließend können Sie sie dann entfernen.

Sub TabelleEntfernen() Dim str As String

If CurrentData.AllTables("ArtikelNeu2").IsLoaded _ Then DoCmd.Close acTable, "ArtikelNeu2"

str = "DROP TABLE ArtikelNeu2" DoCmd.RunSQL str Application.RefreshDatabaseWindow

End Sub

Listing 6.21 Tabelle entfernen bei vorheriger Prüfung

6.10 Daten zusammenführen

Möchten Sie Tabellen ähnlichen Aufbaus in einer einzigen Tabelle zusammenführen,

können Sie für diese Aufgabe die SQL-Anweisung UNION verwenden.

In der nächsten Aufgabe werden Sie die Tabellen Lieferanten und Kunden der Daten-

bank Nordwind.accdb zusammenführen. Dabei gehen Sie Schritt für Schritt vor:

1. Wechseln Sie von der Entwicklungsumgebung zurück in Ihre Datenbankansicht.

2. Klicken Sie in der Leiste Datenbankobjekte auf Abfragen.

3. Führen Sie einen Doppelklick auf den Befehl Erstellt eine neue Abfrage in der

Entwurfsansicht aus.

4. Schließen Sie das Fenster Tabelle anzeigen mit einem Klick auf Schliessen.

5. Wählen Sie aus dem Menü Abfrage den Befehl SQL spezifisch/Union.

6.10 Daten zusammenführen

317

6

6. Geben Sie im Abfragefenster die Zeilen aus Abbildung 6.20 ein.

Abbildung 6.20 Die SQL-Anweisung erfassen

7. Speichern und benennen Sie die Abfrage.

8. Starten Sie die gerade erstellte Abfrage, indem Sie sie doppelt anklicken.

Abbildung 6.21 Zwei Tabellen wurden zusammengeführt.

Wenn Sie Ihr gerade erzeugtes Ergebnis ansehen, werden Sie feststellen, dass alle

Sätze aus den beiden Tabellen zusammengeführt wurden. Selbstverständlich kön-

nen Sie aber auch nur bestimmte Sätze aus beiden Tabellen über eine Abfrage zusam-

menführen.

Folgende Ergänzungen werden Sie jetzt an der gerade erstellten Lösung vornehmen:

� Es sollen nur Daten aus Deutschland zusammengeführt werden.

� Die Sortierung soll nach der Kontaktperson durchgeführt werden.

� Das Feld Kontaktperson muss in das Feld Ansprechpartner umbenannt

werden.

6 Abfragen programmieren

318

Um diese Änderungen durchzuführen, öffnen Sie die soeben erstellte Abfrage im

Entwurfsmodus und ändern die SQL-Abfrage so, wie es in Abbildung 6.22 zu sehen ist.

Abbildung 6.22 Die Abfrage einschränken

Mit dem SQL-Schlüsselwort AS können Sie einem bereits benannten Datenfeld in

der Ergebnistabelle einen neuen Feldnamen geben. Über die Anweisung WHERE kön-

nen Sie dafür sorgen, dass nur bestimmte Datensätze selektiert werden. Über die

Anweisung ORDER BY legen Sie die Sortierreihenfolge fest. Standardmäßig wird hier-

bei in aufsteigender Reihenfolge sortiert. Möchten Sie stattdessen lieber absteigend

sortieren, fügen Sie das Schlüsselwort DESC hinter dem Feldnamen Ansprechpart-

ner ein.

Abbildung 6.23 Nur Ansprechpartner aus Deutschland werden angezeigt.

6.11 Abfragen mit ADO programmieren

319

6

6.11 Abfragen mit ADO programmieren

Um noch mehr Möglichkeiten bei Abfragen zu haben, können Sie auch auf ADO

zurückgreifen und eigene Abfragen per VBA-Code generieren.

6.11.1 Tabellen durch eine Abfrage erstellen

Der Einsatz von ADO im Zusammenspiel mit SQL-Anweisungen ermöglicht es Ihnen,

neue Tabellen zu erstellen.

Im Beispiel aus Listing 6.22 wird eine neue Datentabelle mithilfe einer Abfrage angelegt:

Sub AbfrageErstellenMitADO() Dim conn As New ADODB.Connection Dim cmd As ADODB.Command

Set conn = CurrentProject.Connection

Set cmd = New ADODB.Command With cmd .CommandText = "CREATE TABLE Adressen2 " & _ "(ZählNR IDENTITY (10, 10), Nachname CHAR, " & _ "Vorname CHAR, Straße CHAR, PLZ CHAR, Ort CHAR)" .ActiveConnection = conn .Execute End With Set cmd = Nothing Set conn = NothingEnd Sub

Listing 6.22 Tabelle über eine Abfrage anlegen

Tipp

Bei einer UNION-Abfrage werden alle Sätze automatisch herausgefiltert, die doppelt

vorkommen. Sie brauchen sich daher nicht mehr darum zu kümmern, die doppelten

Sätze rauszuwerfen. Möchten Sie jedoch auch die doppelten Sätze ausgeben, um

selbst entscheiden zu können, was Sie später entfernen, dann setzen Sie das Schlüs-

selwort ALL ein. Die komplette Anweisung sieht dann wie folgt aus:

SELECT Land, Ort, Firma, Kontaktperson AS Ansprechpartner FROM Kunden WHERE LAND = "Deutschland" UNION ALL SELECT Land, Ort, Firma, Kontaktperson FROM Lieferanten WHERE LAND = "Deutschland" ORDER BY Ansprechpartner;

6 Abfragen programmieren

320

Sollte die Prozedur aus Listing 6.22 eine Fehlermeldung erzeugen, liegt dies daran,

dass Sie in der Entwicklungsumgebung über den Menübefehl Extras � Verweise

noch die ADO-Bibliothek einbinden müssen.

Lassen Sie uns nun die einzelnen Schritte der Prozedur aus Listing 6.21 durchgehen: Im

ersten Schritt erstellen Sie ein neues ADO-Objekt und geben bekannt, welche Verbin-

dung und welche Datenbank vorliegen. Da die neue Tabelle in die aktuelle Datenbank

eingebunden werden soll, können Sie die Anweisung CurrentProject.Connection ein-

setzen.

Im nächsten Schritt erstellen Sie ein Command-Objekt, mit dessen Hilfe Sie unter ande-

rem einen SQL-Befehl ausführen können. Diesen SQL-Befehl geben Sie in der Eigen-

schaft CommandText ein. Die SQL-Anweisung CREATE TABLE legt eine neue Tabelle an.

Dabei müssen Sie den Namen der Tabelle angeben sowie die Felder definieren. Das

erste AutoFeld beispielsweise wird über das Schlüsselwort IDENTITY angelegt. Dabei

bedeuten die beiden Argumente in Klammern, dass die Zählung bei 10 beginnen und

der nächste Satz jeweils um den Wert 10 hochaddiert werden soll.

In der nachfolgenden ActiveConnection-Eigenschaft müssen Sie nochmals Ihre Ver-

bindungsdaten angeben. Über die Methode Execute führen Sie die Abfrage bzw. die

SQL-Anweisung durch. Löschen Sie am Ende der Prozedur die Objektverweise, um

den reservierten Arbeitsspeicher wieder freizugeben.

Abbildung 6.24 Eine neue Tabelle über SQL-Abfrage anlegen

6.11 Abfragen mit ADO programmieren

321

6

6.11.2 Daten aus Tabelle entfernen

Möchten Sie lediglich Daten aus einer Tabelle löschen, nicht aber die komplette

Tabelle, so können Sie eine Abfrage schreiben, die so aussehen wird wie in Listing 6.23.

Dabei wird die erstellte Abfrage nicht gespeichert.

Sub DatensätzeLöschen() Dim conn As New ADODB.Connection Dim cmd As ADODB.Command

Set conn = CurrentProject.Connection

Set cmd = New ADODB.Command With cmd .CommandText = "DELETE * FROM Artikel2" .ActiveConnection = conn .Execute End With Set cmd = Nothing Set conn = NothingEnd Sub

Listing 6.23 Daten aus Tabelle löschen

Legen Sie über die Eigenschaft CommandText die SQL-Anweisung fest, um alle Daten-

sätze aus der Tabelle Artikel2 zu entfernen. Mithilfe der SQL-Anweisung DELETE *

löschen Sie alle Artikel aus der Tabelle. Über die Eigenschaft ActiveConnection geben

Sie die Datenbank an, auf die zugegriffen werden soll. Die Methode Execute führt

schließlich die gewünschte Version durch.

6.11.3 Eine Abfrage erstellen

Möchten Sie eine Abfrage erstellen und diese dann auch als Abfrage in Access spei-

chern, dann müssen Sie unter dem Menü Extras und dem Befehl Verweise die

Bibliothek Microsoft ADO Ext. 2.7 for DDL and Security (Access 2003) einbinden bzw.

Microsoft ADO Ext. 2.8 for DDL and Security (Access 2007 und Access 2013).

Danach haben Sie Zugriff auf das Objekt Catalog, das Sie einsetzen können, um soge-

nannte View-Objekte (Abfragen) zu programmieren.

In Listing 6.24 wird eine Abfrage per VBA-Prozedur angelegt. Dabei werden Daten aus

der Tabelle Artikel übertragen. Bevor Sie die Prozedur starten, sollten Sie prüfen, ob

im Menü Extras unter dem Befehl Verweise die Bibliothek Microsoft ActiveX

Objects Library aktiviert ist.

6 Abfragen programmieren

322

Sub AbfrageAnlegen() Dim cat As New ADOX.Catalog Dim cmd As ADODB.Command

cat.ActiveConnection = CurrentProject.Connection Set cmd = New ADODB.Command With cmd .CommandText = "SELECT * FROM Artikel" End With cat.Procedures.Append "ArtikelAbfrage01", cmd

Set cmd = Nothing Set cat = Nothing

End Sub

Listing 6.24 Abfrage erstellen

Abbildung 6.25 Die Abfrage wurde angelegt.

Definieren Sie im ersten Schritt eine Objektvariable vom Typ ADOX.Catalog. Zusätz-

lich dazu benötigen Sie noch ein ADODB-Objekt vom Typ Command. Darunter spei-

6.11 Abfragen mit ADO programmieren

323

6

chern Sie später mithilfe der Eigenschaft CommandText Ihre SQL-Anweisung. In der

Eigenschaft ActiveConnection geben Sie auch hier wieder Ihre aktuelle Datenbank als

Quelle an. Über das Objekt Procedures legen Sie eine gespeicherte Prozedur an. Set-

zen Sie die Methode Append ein, um diesem Objekt die Abfrage hinzuzufügen. Als wei-

teres Argument benötigt die Methode noch die Information, was konkret die Abfrage

machen soll. Diese Information haben Sie bereits als SQL-Anweisung in der Variablen

SQLcmd bekannt gegeben. Vergessen Sie nicht, die Objekte nach Ihrem Gebrauch wie-

der freizugeben.

Führen Sie einen Doppelklick auf die Abfrage durch, um die Ergebnisse daraus in

einer Tabelle anzuzeigen.

6.11.4 Komplexere Abfragen generieren

Wenn Sie komplexere Abfragen erstellen möchten, können Sie weitere SQL-Anwei-

sungen in Ihren Quellcode einbauen.

In der Prozedur aus Listing 6.25 werden aus der Tabelle Personal alle Mitarbeiter aus

den Städten Seattle und London ermittelt. Die Abfrage wird unter dem Namen

ArtikelAbfrage02 gespeichert.

Sub AbfrageAnlegen02() Dim cat As New ADOX.Catalog Dim cmd As ADODB.Command

cat.ActiveConnection = CurrentProject.Connection Set cmd = New ADODB.Command

With cmd .CommandText = "SELECT Anrede, Nachname, " & _ "Vorname, Geburtsdatum, Ort FROM Personal " & _ "WHERE (Ort = 'London' OR Ort = 'Seattle')" End With cat.Procedures.Append "ArtikelAbfrage02", cmd

Application.RefreshDatabaseWindow

Set cmd = Nothing Set cat = Nothing

End Sub

Listing 6.25 Komplexere Abfrage erstellen (Orte selektieren)

6 Abfragen programmieren

324

Setzen Sie die SQL-Anweisung WHERE ein, und trennen Sie die einzelnen Kriterien

durch das Schlüsselwort OR.

Abbildung 6.26 So finden Sie alle Mitarbeiter aus London und Seattle.

Im folgenden Beispiel soll eine Abfrage erstellt werden, die die Tabelle Artikel verar-

beitet. Dabei sollen alle Artikel ermittelt werden, die einen Lagerbestand von weniger

als 15 Stück und einen Einzelpreis von unter 50 EUR haben. Die Lösung dieser Auf-

gabe sehen Sie in Listing 6.26.

Sub AbfrageAnlegen03() Dim cat As New ADOX.Catalog Dim cmd As ADODB.Command

cat.ActiveConnection = CurrentProject.Connection Set cmd = New ADODB.Command

With cmd .CommandText = "SELECT Artikelname, " & _ "Liefereinheit, Einzelpreis, " & _ "Lagerbestand FROM Artikel WHERE " & _ "(Lagerbestand < 15 AND Einzelpreis < 50) " & _ "ORDER BY Lagerbestand" End With

6.11 Abfragen mit ADO programmieren

325

6

cat.Procedures.Append "ArtikelAbfrage03", cmd

Application.RefreshDatabaseWindow

Set cmd = Nothing Set cat = Nothing

End Sub

Listing 6.26 Komplexere Abfrage erstellen (Lagerbestand und Einzelpreis checken)

Die SQL-Anweisung WHERE kann natürlich auch mit dem Schlüsselwort AND kombi-

niert werden. Mithilfe der Anweisung ORDER BY können Sie zusätzlich eine Sortierung

der Ergebnistabelle vornehmen.

Abbildung 6.27 Alle Artikel, die einen Lagerbestand < 15 und einen Einzelpreis < 50 haben

Im nächsten Beispiel werten Sie gleich zwei Tabellen zusammen aus. Die Tabellen

Kunden und Lieferanten sollen gemeinsam ausgewertet werden. Dabei sollen nur

Kunden angezeigt werden, die aus Deutschland, Frankreich oder Spanien kommen.

Sehen Sie sich die Lösung dieser Aufgabe in Listing 6.27 an:

Sub AbfrageAnlegen04() Dim cat As New ADOX.Catalog Dim cmd As ADODB.Command

cat.ActiveConnection = CurrentProject.Connection Set cmd = New ADODB.Command

6 Abfragen programmieren

326

With cmd .CommandText = "SELECT Land, Ort, Firma, " & _ "Kontaktperson AS Ansprechpartner " & _ "FROM Kunden WHERE LAND = 'Deutschland' " & _ "UNION ALL SELECT Land, Ort, Firma, " & _ "Kontaktperson FROM Lieferanten " & _ "WHERE LAND = 'Deutschland' OR " & _ "LAND = 'Spanien' OR Land = 'Frankreich' " & _ "ORDER BY Ansprechpartner" End With

cat.Procedures.Append "ArtikelAbfrage04", cmd

Application.RefreshDatabaseWindow

Set cmd = Nothing Set cat = Nothing

End Sub

Listing 6.27 Komplexere Abfrage erstellen (Bestände zusammenführen)

Abbildung 6.28 Alle Ansprechpartner aus den Ländern Deutschland, Spanien und

Frankreich

6.11 Abfragen mit ADO programmieren

327

6

Mit dem Schlüsselwort AS können Sie einem Datenfeld im Ergebnis einen anderen

Namen geben. Mit der Anweisung UNION ALL werden alle Datensätze aus beiden Tabel-

len im Ergebnis präsentiert. Sind einzelne Kunden bzw. Lieferanten doppelt erfasst,

dann werden sie bei dieser Option nicht automatisch gelöscht. Sollen jedoch die dop-

pelten Sätze sofort gelöscht werden, dann lassen Sie das Schlüsselwort ALL nach der

UNION-Anweisung weg. In der WHERE-Anweisung schreiben Sie die einzelnen Kriterien

für die Filterung getrennt durch das Schlüsselwort OR hintereinander. Sortieren Sie

anschließend die Ergebnistabelle mithilfe der SQL-Anweisung ORDER BY nach dem

Ansprechpartner.

Die gerade erstellte UNION-Abfrage hebt sich von den anderen Abfragen ab. Wenn Sie

in der Abfragen-Ansicht nachsehen, werden Sie vor der Abfrage ein doppeltes Ring-

Symbol sehen. Dies ist das Zeichen für eine UNION-Abfrage.

6.11.5 Parameterabfragen erstellen

Bei Parameterabfragen müssen Sie über ein Eingabefeld das Kriterium eingeben,

nach dem die Abfrage arbeiten soll. Angewandt in einem Beispiel könnte das bedeu-

ten, dass eine Adressentabelle zu durchsuchen ist. Im Eingabefeld geben Sie die

gewünschte Stadt ein, und Access sucht Ihnen dann aus dem Datenbestand alle

Adressen dieser Stadt aus.

Die Lösung dieser Aufgabenstellung können Sie Listing 6.28 entnehmen:

Sub ParameterAbfrageAnlegen() Dim cat As New ADOX.Catalog Dim cmd As ADODB.Command

cat.ActiveConnection = CurrentProject.Connection Set cmd = New ADODB.Command

With cmd .CommandText = "PARAMETERS [Orteingabe] text; " & _ "SELECT * FROM Kunden WHERE Ort = [Orteingabe]" End With cat.Procedures.Append "ArtikelAbfrage05", cmd

Application.RefreshDatabaseWindow

Set cmd = Nothing Set cat = Nothing

End Sub

Listing 6.28 Parameterabfrage erstellen (nach Texten suchen)

6 Abfragen programmieren

328

Über das Schlüsselwort PARAMETERS geben Sie an, dass es sich um eine Abfrage han-

deln soll, bei der der Anwender noch einen Wert eingeben muss. Setzen Sie einen

Begriff in eckige Klammern. Dieser Begriff wird dann später in der Meldung ange-

zeigt, sobald Sie die Abfrage durch einen Doppelklick starten möchten. Gleich danach

legen Sie fest, um welche Art Dateneingabe es sich dabei handeln soll. Da Sie eine

Stadt eingeben müssen, verwenden Sie hierfür den Datentyp Text.

Abbildung 6.29 Die Eingabe des gesuchten Ortes ...

Abbildung 6.30 ... bringt alle Kunden aus London.

Im nächsten Beispiel durchforsten Sie die Tabelle nach den Bestellungen, die an

einem bestimmten Datum eingegangen sind. Den Code für diese Aufgabenstellung

sehen Sie in Listing 6.29:

Sub ParameterAbfrageAnlegen02() Dim cat As New ADOX.Catalog Dim cmd As ADODB.Command

cat.ActiveConnection = CurrentProject.Connection Set cmd = New ADODB.Command

With cmd .CommandText = "PARAMETERS [Datumseingabe] Date; " _

6.11 Abfragen mit ADO programmieren

329

6

& "SELECT * FROM Bestellungen WHERE " _ & "Bestelldatum = [Datumseingabe]" End With

cat.Procedures.Append "ArtikelAbfrage06", cmd

Application.RefreshDatabaseWindow

Set cmd = Nothing Set cat = Nothing

End Sub

Listing 6.29 Parameterabfrage erstellen (nach Datum auswerten)

Da es sich um ein Datum handelt, das Sie abfragen möchten, müssen Sie das Daten-

feld mit dem Datentyp Date definieren.

Abbildung 6.31 Über die Eingabe eines Datums ...

Abbildung 6.32 ... werden alle dazugehörigen Bestellungen ermittelt.

Inhalt

5

Inhalt

Vorwort ................................................................................................................................................... 21

1 Grundsätzliches zur Programmierung 25

1.1 Wie gehe ich von Anfang an richtig vor? ................................................................. 25

1.2 Die Entwicklungsumgebung von Access .................................................................. 28

1.2.1 Das Eigenschaften-Fenster ............................................................................... 29

1.2.2 Prozeduren ausführen ....................................................................................... 33

1.2.3 Wie erfahre ich mehr über die einzelnen Befehle? .................................. 33

1.3 Hilfsmittel für die Programmierung .......................................................................... 34

1.3.1 Die Symbolleiste »Bearbeiten« ....................................................................... 34

1.3.2 Automatische Syntaxprüfung ......................................................................... 41

1.3.3 Mit Tastenkombinationen arbeiten .............................................................. 41

1.4 Die Fenster und die Testumgebung ........................................................................... 43

1.4.1 Das Code-Fenster ................................................................................................. 43

1.4.2 Hilfe im Direktfenster ........................................................................................ 45

1.4.3 Den Code Schritt für Schritt durchlaufen lassen ...................................... 46

1.4.4 Überwachung hinzufügen ............................................................................... 47

1.4.5 Das Lokal-Fenster ................................................................................................ 49

1.5 Weitere Einstellungen ...................................................................................................... 50

1.5.1 Editor-Einstellungen ........................................................................................... 50

1.5.2 Allgemeine Einstellungen vornehmen ......................................................... 52

1.5.3 Fenster verankern ................................................................................................ 53

2 Variablen, Konstanten und Datentypen 55

2.1 Regeln für die Syntax von Variablen ......................................................................... 56

2.2 Variablen am Beginn der Prozedur deklarieren .................................................... 56

2.3 Die verschiedenen Variablentypen ............................................................................ 57

2.3.1 Statische Variablen ............................................................................................. 57

2.3.2 Private Variablen .................................................................................................. 58

2.3.3 Öffentliche Variablen ......................................................................................... 58

2.4 Variablendeklarationen erzwingen ........................................................................... 59

Inhalt

6

2.5 Die wichtigsten Variablentypen .................................................................................. 60

2.6 Noch kürzere Deklaration von Variablen ................................................................ 62

2.7 Variablendeklaration mit »DefType« ........................................................................ 63

2.8 Konstanten verwenden ................................................................................................... 64

2.9 Systemkonstanten einsetzen ........................................................................................ 64

2.9.1 Datumsformat-Konstanten ............................................................................. 65

2.9.2 Dir-Konstanten ..................................................................................................... 70

2.9.3 File-Input/Output-Konstanten ....................................................................... 71

2.9.4 Die Shell-Konstanten ......................................................................................... 75

2.9.5 StrConv-Konstanten ........................................................................................... 77

2.9.6 Var-Type-Konstanten ......................................................................................... 79

2.9.7 Die DoCmd.RunCommand-Konstanten ....................................................... 81

3 Die wichtigsten Sprachelemente in Access 85

3.1 Verzweigungen .................................................................................................................... 85

3.1.1 Eingaben auswerten ........................................................................................... 86

3.1.2 Eingaben prüfen und umwandeln ................................................................. 88

3.1.3 Eine Besonderheit ................................................................................................ 91

3.2 Die Anweisung »Select Case« für mehr Übersicht ............................................... 92

3.2.1 Zahlenwerte mit »Select Case« prüfen ........................................................ 93

3.2.2 Textwerte mit »Select Case« prüfen ............................................................. 94

3.3 Schleifen in Access einsetzen ........................................................................................ 96

3.3.1 »For...Next«-Schleifen ........................................................................................ 96

3.3.2 »For Each...Next«-Schleifen .............................................................................. 98

3.3.3 Die Schleife »Do Until...Loop« .......................................................................... 104

3.3.4 Die Schleife »Do While...Loop« ........................................................................ 106

3.4 VBA-Funktionen einsetzen ............................................................................................. 108

3.4.1 Textdateien einlesen .......................................................................................... 108

3.4.2 Eingegebene E-Mail-Adressen prüfen .......................................................... 109

3.4.3 Textteile extrahieren .......................................................................................... 110

3.4.4 Dateiendungen prüfen ...................................................................................... 113

3.4.5 Texte kürzen und extrahieren ......................................................................... 115

3.4.6 Texte splitten ........................................................................................................ 117

3.4.7 Texte zerlegen, konvertieren und wieder zusammensetzen ................ 119

3.4.8 Texte bereinigen .................................................................................................. 120

3.4.9 Zahlenwerte runden ........................................................................................... 121

Inhalt

7

3.4.10 Dateien löschen ................................................................................................... 121

3.4.11 Verzeichnis(se) erstellen ................................................................................... 123

3.4.12 Verzeichnisse löschen ........................................................................................ 125

3.4.13 Wochentag ermitteln ......................................................................................... 126

3.4.14 Monat ermitteln .................................................................................................. 127

3.4.15 Datumsteile extrahieren ................................................................................... 128

3.4.16 Datumsberechnungen durchführen ............................................................. 129

3.4.17 Zukünftige Termine berechnen ...................................................................... 129

3.4.18 Datumsangaben formatieren ......................................................................... 131

3.4.19 Zeitfunktionen einsetzen .................................................................................. 133

3.4.20 Farbfunktionen verwenden ............................................................................. 135

3.4.21 Werte aus einer Liste auswählen ................................................................... 138

3.4.22 Ganzzahligen Wert extrahieren ..................................................................... 139

3.5 Umwandlungsfunktionen .............................................................................................. 140

3.5.1 Die Typumwandlungsfunktion »CBool« ...................................................... 141

3.5.2 Die Typumwandlungsfunktion »CDbl« ........................................................ 144

3.5.3 Die Typumwandlungsfunktion »CDate« ..................................................... 145

3.5.4 Die Funktion »Val« .............................................................................................. 145

3.6 Die »Is«-Funktionen in VBA ........................................................................................... 147

3.6.1 Die Funktion »IsArray« ....................................................................................... 147

3.6.2 Die Funktion »IsDate« ........................................................................................ 149

3.6.3 Die Funktionen »IsEmpty« und »IsNull« ...................................................... 150

3.6.4 Die Funktion »IsObject« .................................................................................... 152

3.6.5 Arbeiten mit Arrays ............................................................................................. 152

3.6.6 Einfache Arrays ..................................................................................................... 152

3.6.7 Mehrdimensionale Arrays ................................................................................ 154

3.6.8 Das Praxisbeispiel »Straßentausch« ............................................................. 156

3.6.9 Das Praxisbeispiel »Top3 Max« und » Top3 Min« ..................................... 159

3.7 Operatoren ............................................................................................................................ 165

3.7.1 Arithmetische Operatoren ............................................................................... 165

3.7.2 Vergleichsoperatoren ......................................................................................... 166

3.7.3 Verkettungsoperatoren ..................................................................................... 167

3.7.4 Logische Operatoren .......................................................................................... 168

3.8 Eigene Funktionen schreiben ........................................................................................ 169

3.8.1 Dateien in einem Verzeichnis zählen ........................................................... 169

3.8.2 Prüfen, ob eine bestimmte Datei existiert .................................................. 170

3.8.3 Prüfen, ob eine Datei gerade bearbeitet wird ............................................ 171

3.8.4 Dokumenteigenschaften einer Datenbank ermitteln ............................ 172

3.8.5 Den letzten Tag im Monat ermitteln ............................................................ 174

3.8.6 Sonderzeichen aus Strings entfernen ........................................................... 175

Inhalt

8

3.8.7 Eine eigene Runden-Funktion erstellen ....................................................... 176

3.8.8 Die Position der ersten Zahl eines Strings ermitteln ............................... 178

3.8.9 Buchstaben eliminieren .................................................................................... 179

3.8.10 Römische Ziffern in arabische Ziffern umwandeln ................................. 180

3.8.11 Arabische Zahlen in die römische Syntax umwandeln .......................... 182

3.8.12 Die Anzahl der Zahlen in einem String ermitteln ..................................... 183

3.8.13 die Anzahl der Buchstaben in einem String zählen ................................. 183

4 Ein Streifzug in die Welt der Objekte 185

4.1 Das »Application«-Objekt ............................................................................................... 185

4.1.1 Datenbankinformationen erhalten ............................................................... 186

4.1.2 Aktuellen Anwendernamen ermitteln ......................................................... 187

4.1.3 Installierte Drucker ermitteln .......................................................................... 187

4.1.4 Datenbank schließen ......................................................................................... 188

4.1.5 Access beenden .................................................................................................... 188

4.1.6 Aktuelle Access-Version ausgeben ................................................................ 189

4.1.7 Formular anlegen ................................................................................................ 189

4.1.8 Durchschnitt errechnen .................................................................................... 191

4.1.9 Summen ermitteln .............................................................................................. 191

4.1.10 Datensätze zählen ............................................................................................... 192

4.1.11 Minimal- und Maximalwerte ermitteln ...................................................... 193

4.2 Das Objekt »AccessObject« ............................................................................................ 193

4.3 Das Objekt »CodeData« ................................................................................................... 198

4.4 Das Objekt »DoCmd« ........................................................................................................ 199

4.4.1 Berichte aufrufen ................................................................................................. 199

4.4.2 Tabellen nach Excel exportieren .................................................................... 201

4.4.3 Formular aufrufen und Vorauswahl treffen .............................................. 203

4.5 Integrierte Dialoge einsetzen ........................................................................................ 206

4.5.1 Das Dialogfeld »Öffnen« anzeigen ................................................................ 206

4.5.2 Verzeichnis einstellen ........................................................................................ 209

4.5.3 Dateien per Filtereinstellung suchen ............................................................ 210

4.5.4 Weitere Dialogfelder verwenden ................................................................... 211

4.6 Das Objekt »FileSystemObject« ................................................................................... 213

4.6.1 Computerinfos anzeigen .................................................................................. 214

4.6.2 Verzeichnisse ermitteln ..................................................................................... 215

4.6.3 Tastenkombinationen programmieren ....................................................... 217

4.6.4 Homepagezugang ganz fix .............................................................................. 218

Inhalt

9

4.6.5 Laufwerke mappen ............................................................................................. 218

4.6.6 Gemappte Laufwerke anzeigen ...................................................................... 220

4.6.7 Laufwerk auswerten ........................................................................................... 221

4.6.8 Aktuelle Datenbank sichern ............................................................................. 223

4.6.9 Datenbank-Datumsangaben auswerten .................................................... 224

4.6.10 Verzeichnisstruktur auslesen .......................................................................... 226

5 Tabellen programmieren 229

5.1 Tabellen bearbeiten mit »DoCmd« ............................................................................ 229

5.1.1 Tabelle öffnen ....................................................................................................... 230

5.1.2 Tabellen filtern ..................................................................................................... 235

5.1.3 Tabellen kopieren ................................................................................................ 238

5.1.4 Tabellen umbenennen ....................................................................................... 239

5.2 Tabellen mit ADO programmieren ............................................................................. 239

5.2.1 Tabelleninhalte auslesen .................................................................................. 240

5.3 SQL-Anweisungen .............................................................................................................. 243

5.3.1 Die SELECT-Anweisung ...................................................................................... 243

5.3.2 UNION-Anweisung ............................................................................................. 245

5.3.3 Die TOP-Anweisung ............................................................................................ 246

5.3.4 Eine externe Datenbank öffnen ..................................................................... 248

5.3.5 Tabelleninhalte suchen und ausgeben ........................................................ 250

5.3.6 Lagerbestände manipulieren .......................................................................... 258

5.3.7 Preiserhöhung durchführen ............................................................................ 259

5.3.8 Tabellen updaten ................................................................................................. 263

5.3.9 Artikel bewerten .................................................................................................. 264

5.3.10 Datensätze filtern ................................................................................................ 265

5.3.11 Datensätze sortieren .......................................................................................... 266

5.3.12 Datensätze zählen ............................................................................................... 269

5.3.13 Lesezeichen einsetzen ........................................................................................ 270

5.3.14 Datensätze löschen ............................................................................................. 272

5.3.15 Datensätze hinzufügen ..................................................................................... 274

5.4 Tabellenstrukturen mit ADOX ermitteln ................................................................. 276

5.4.1 Tabellen auslesen ................................................................................................ 276

5.4.2 Tabellenstruktur auslesen ................................................................................ 278

5.4.3 Eine neue Tabelle anlegen ................................................................................ 282

5.4.4 Tabellen löschen .................................................................................................. 285

5.5 Datenbanken suchen und dokumentieren ............................................................. 286

Inhalt

10

6 Abfragen programmieren 291

6.1 Abfragetypen ....................................................................................................................... 291

6.2 Abfragen durchführen ...................................................................................................... 293

6.3 Abfragen mit SQL generieren ........................................................................................ 295

6.4 Aktualisierungsabfrage – Artikelnamen ändern .................................................. 295

6.4.1 Aktualisierungsabfrage – Felder initialisieren ........................................... 296

6.5 Anfügeabfrage – Mitarbeiter hinzufügen ............................................................... 298

6.6 Löschabfrage ausführen ................................................................................................. 300

6.7 Tabellenerstellungsabfrage durchführen ................................................................ 304

6.8 Öffnen oder neu anlegen ................................................................................................ 305

6.9 Datendefinitionsabfragen durchführen ................................................................... 306

6.9.1 Neue Tabelle anlegen ......................................................................................... 307

6.9.2 Tabellen ändern ................................................................................................... 311

6.9.3 Einen Tabellenindex bestimmen .................................................................... 313

6.9.4 Tabellenindex entfernen ................................................................................... 315

6.9.5 Tabelle entfernen ................................................................................................ 315

6.10 Daten zusammenführen ................................................................................................. 316

6.11 Abfragen mit ADO programmieren ............................................................................ 319

6.11.1 Tabellen durch eine Abfrage erstellen ......................................................... 319

6.11.2 Daten aus Tabelle entfernen ........................................................................... 321

6.11.3 Eine Abfrage erstellen ........................................................................................ 321

6.11.4 Komplexere Abfragen generieren .................................................................. 323

6.11.5 Parameterabfragen erstellen .......................................................................... 327

7 Programmierung von Dialogen, Steuerelementen und Formularen 331

7.1 Das Meldungsfeld »MsgBox« ....................................................................................... 332

7.1.1 Welche Schaltfläche wurde angeklickt? ...................................................... 333

7.1.2 Löschrückfrage einholen ................................................................................... 334

7.1.3 Informationen anzeigen ................................................................................... 335

7.1.4 Ist eine bestimmte Datenbank vorhanden? ............................................... 336

7.2 Die Eingabemaske »InputBox« .................................................................................... 336

Inhalt

11

7.2.1 Mehrwertsteuer errechnen .............................................................................. 337

7.2.2 Mehrere Eingaben erfassen ............................................................................. 338

7.3 Formulare erstellen ............................................................................................................ 339

7.3.1 Formulare selbst zusammenstellen .............................................................. 342

7.3.2 Die Steuerelemente aus der Toolbox ............................................................ 342

7.3.3 Steuerelemente einfügen ................................................................................. 345

7.3.4 Formularfelder bearbeiten ............................................................................... 346

7.3.5 Aktivierreihenfolge anpassen .......................................................................... 348

7.3.6 Formularfelder formatieren ............................................................................. 349

7.3.7 Formulareigenschaften einstellen ................................................................. 350

7.3.8 Steuerelementeigenschaften einstellen ..................................................... 355

7.3.9 Bedingte Formatierung ..................................................................................... 359

7.3.10 Schaltflächen einfügen ...................................................................................... 361

7.3.11 Weitere wichtige Schaltflächen integrieren .............................................. 365

7.3.12 Steuerelemente identifizieren ........................................................................ 370

7.3.13 Formular aufrufen ............................................................................................... 375

7.3.14 Formulare schließen ........................................................................................... 376

7.3.15 Textfelder programmieren ............................................................................... 377

7.3.16 Textfelderinhalte retten .................................................................................... 382

7.3.17 QuickInfos hinzufügen ...................................................................................... 383

7.3.18 Textfelder aktivieren und sperren ................................................................. 384

7.3.19 Eingaben in Textfelder zaubern ..................................................................... 386

7.3.20 Textfelder dynamisch ein- und ausblenden ............................................... 390

7.3.21 Textfelder begrenzen ......................................................................................... 392

7.3.22 Datentyp bei Eingabe überwachen ............................................................... 393

7.3.23 Bezeichnungsfelder einsetzen ........................................................................ 393

7.3.24 Kombinationsfeldlisten erstellen und programmieren ......................... 395

7.3.25 Listenfelder programmieren ............................................................................ 401

7.3.26 Kontrollkästchen programmieren ................................................................. 408

7.3.27 Optionsschaltflächen programmieren ......................................................... 411

7.3.28 Registerelemente programmieren ................................................................ 415

7.3.29 Die Uhr im Formular ........................................................................................... 419

7.3.30 Das »TreeView«-Steuerelement ..................................................................... 421

7.3.31 Das Media-Player-Steuerelement .................................................................. 423

7.3.32 Einen Hyperlink in ein Formular integrieren .............................................. 425

7.3.33 »ImageList« und »ListView« programmieren ............................................ 426

7.3.34 Diagramme in Formulare integrieren .......................................................... 428

7.4 Das Bildbetrachter-Tool ................................................................................................... 433

7.4.1 Das Formular zeichnen ...................................................................................... 433

7.4.2 Das Formular programmieren ........................................................................ 434

Inhalt

12

8 Berichte erstellen und programmieren 443

8.1 Berichtsarten in Access .................................................................................................... 443

8.2 Der Berichtsaufbau ............................................................................................................ 444

8.3 Berichte entwerfen ............................................................................................................ 445

8.4 Berichte bearbeiten mit »DoCmd« ............................................................................. 446

8.4.1 Berichte öffnen ..................................................................................................... 446

8.4.2 Bericht aus einer anderen Datenbank öffnen ........................................... 447

8.4.3 Bericht mit Vorauswahl öffnen ...................................................................... 448

8.4.4 Berichte drucken .................................................................................................. 451

8.4.5 Berichte kopieren und umbenennen ............................................................ 452

8.4.6 Berichte ausgeben ............................................................................................... 453

8.5 Berichte formatieren ......................................................................................................... 454

8.5.1 Magenta und Weiß im Wechsel ..................................................................... 454

8.5.2 Schriftformatierungen anwenden ................................................................. 455

8.6 Berichte identifizieren ...................................................................................................... 459

8.6.1 Berichte zählen ..................................................................................................... 460

8.6.2 Berichtselemente ansprechen ........................................................................ 460

8.6.3 Berichtselemente auflisten .............................................................................. 461

8.6.4 Die verschiedenen Sektionen eines Berichts .............................................. 465

8.7 Berichte erstellen ................................................................................................................ 466

8.7.1 Steuerelemente einfügen ................................................................................. 467

8.7.2 Vollautomatische Berichtserstellung ........................................................... 470

8.7.3 Bereiche vergrößern ........................................................................................... 472

8.7.4 Bereiche ein- und ausblenden ......................................................................... 474

8.7.5 Seitenzahlen, Datum und Namen ................................................................. 476

8.7.6 Überschriften, Trennlinien und Summen ................................................... 479

9 Ereignisse in Access programmieren 485

9.1 Das Ereignis »Form_Open« ............................................................................................ 486

9.1.1 Zugang zu einem Formular einrichten ......................................................... 486

9.1.2 Den Fokus auf ein bestimmtes Formularfeld setzen .............................. 487

9.1.3 Verknüpfte Tabelle eines Formulars prüfen ............................................... 488

9.2 Das Ereignis »Form_Close« ............................................................................................ 489

9.2.1 Weitere Formulare und Tabellen schließen ............................................... 489

Inhalt

13

9.2.2 Countdown programmieren ............................................................................ 491

9.2.3 Öffnen nach dem Schließen ............................................................................ 492

9.3 Das Ereignis »Form_Load« ............................................................................................. 492

9.3.1 Beim Laden des Formulars ein Listenfeld füllen ....................................... 492

9.4 Das Ereignis »Form_Current« ....................................................................................... 494

9.4.1 Letzter Datensatz erreicht? .............................................................................. 494

9.4.2 Felder ein- und ausblenden .............................................................................. 495

9.4.3 Titelleiste dynamisch verändern .................................................................... 497

9.5 Das Ereignis »Form_AfterInsert« ................................................................................. 498

9.5.1 Reaktion auf die Anlage eines neuen Satzes .............................................. 498

9.6 Das Ereignis »Form_BeforeInsert« ............................................................................. 500

9.6.1 Felder automatisch vorbelegen ...................................................................... 501

9.6.2 Eingabemöglichkeit beschränken .................................................................. 503

9.7 Das Ereignis »Form_BeforeUpdate« .......................................................................... 503

9.7.1 Rückfrage einholen ............................................................................................. 503

9.7.2 Eingaben prüfen .................................................................................................. 504

9.7.3 Eingabe in Formularfeld erzwingen .............................................................. 506

9.7.4 Letztes Änderungsdatum anzeigen .............................................................. 506

9.7.5 Alle Änderungen am Datenbestand dokumentieren .............................. 507

9.7.6 Neuanlage verhindern ....................................................................................... 508

9.7.7 Keine Änderungen zulassen ............................................................................ 509

9.8 Das Ereignis »Form_AfterUpdate« ............................................................................. 509

9.9 Das Ereignis »Form_Delete« .......................................................................................... 509

9.9.1 Löschung verhindern bei Kriterium ............................................................... 509

9.9.2 Löschung mehrerer Datensätze verhindern ............................................... 511

9.10 Das Ereignis »Form_Dirty« ............................................................................................. 513

9.10.1 Änderungen sofort speichern .......................................................................... 513

9.11 Das Ereignis »BeforeDelConfirm« ............................................................................... 513

9.11.1 Die Standardlöschabfrage ersetzen .............................................................. 514

9.12 Das Ereignis »Form_AfterDelConfirm« ..................................................................... 515

9.12.1 Löschung bestätigen .......................................................................................... 515

9.13 Das Ereignis »Form_Activate« ...................................................................................... 515

9.13.1 Formular maximieren ........................................................................................ 516

9.13.2 Fokus setzen .......................................................................................................... 516

9.13.3 Einen bestimmten Datensatz im Formular einstellen ............................ 516

9.13.4 Formular aktualisieren ....................................................................................... 517

Inhalt

14

9.14 Das Ereignis »Form_Deactivate« ................................................................................. 519

9.15 Das Ereignis »Form_Resize« .......................................................................................... 519

9.15.1 Steuerelemente automatisch anpassen ...................................................... 519

9.16 Das Ereignis »Form_DblClick« ...................................................................................... 521

9.16.1 Ein schneller Sprung zwischen den Ansichten .......................................... 521

9.16.2 Verkaufsraum-Formular erstellen ................................................................. 523

9.17 Das Ereignis »Click« ........................................................................................................... 525

9.17.1 Datum und Uhrzeit ausgeben ......................................................................... 525

9.18 Die Ereignisse »MouseDown« und »MouseUp« ................................................... 526

9.18.1 Welche Maustaste wurde gedrückt? ............................................................ 526

9.18.2 Auf Textfeld-Mausklick reagieren ................................................................. 527

9.18.3 Schaltflächenfarbe verändern ......................................................................... 529

9.18.4 Kontextmenü deaktivieren .............................................................................. 530

9.19 Das Ereignis »MouseMove« ........................................................................................... 531

9.19.1 Spezialeffekte für Textfelder einsetzen ....................................................... 531

9.20 Das Ereignis »Schaltfläche_Click« ............................................................................... 533

9.21 Die Ereignisse »GotFocus« und »LostFocus« .......................................................... 533

9.21.1 Formularfelder bei Eintritt färben ................................................................. 533

9.22 Die »Key«-Ereignisse ......................................................................................................... 535

9.22.1 Welche Tastaturtaste wurde gedrückt? ...................................................... 535

9.22.2 Datumsfelder automatisch erhöhen ............................................................ 536

9.22.3 Datum und Zeit einfügen ................................................................................. 538

9.23 Das Ereignis »Steuerelement_BeforeUpdate« ...................................................... 539

9.23.1 Ist Artikel x schon angelegt? ............................................................................ 539

9.23.2 Eingaben vervollständigen ............................................................................... 541

9.23.3 Postleitzahl prüfen .............................................................................................. 543

9.23.4 Löschen von Eingaben rückgängig machen ............................................... 544

9.24 Das Ereignis »Steuerelement_Enter« ........................................................................ 545

9.24.1 Vorabinformationen geben ............................................................................. 545

9.25 Das Ereignis »Steuerelement_Exit« ........................................................................... 547

9.25.1 Nachfrage starten ............................................................................................... 547

9.26 Die Reihenfolge der Ereignisse ..................................................................................... 548

9.26.1 Die Reihenfolge beim Öffnen und Schließen eines Formulars ............ 548

9.26.2 Die Aktivierreihenfolge bei Steuerelementen ........................................... 549

9.26.3 Die Reihenfolge der Aktualisierungsereignisse ......................................... 549

9.26.4 Eine komplette Kette von Ereignissen .......................................................... 550

Inhalt

15

10 Access im Zusammenspiel mit Office 551

10.1 Textdateien im Zugriff von Access ............................................................................. 552

10.1.1 Textdateien speichern ....................................................................................... 552

10.1.2 Textdateien exportieren ................................................................................... 556

10.1.3 Codes sichern ........................................................................................................ 558

10.1.4 Textdateien einlesen .......................................................................................... 560

10.2 Access im Zusammenspiel mit Word ......................................................................... 568

10.2.1 Die Adressendatenbank anlegen ................................................................... 572

10.2.2 Das Word-Dokument anlegen ........................................................................ 573

10.2.3 Den VBA-Code erfassen ..................................................................................... 574

10.3 Outlook und Access ........................................................................................................... 578

10.3.1 Adresstabelle in den Outlook-Kontaktordner übertragen .................... 578

10.3.2 Den Kontaktorder in einer Access-Tabelle sichern ................................... 584

10.3.3 Termine in den Terminkalender übertragen .............................................. 587

10.3.4 Aufgaben in die Aufgabenliste von Outlook übertragen ....................... 592

10.3.5 E-Mails in einer Access-Datenbank speichern ........................................... 596

10.3.6 Sammel-E-Mails versenden ............................................................................. 598

10.4 Access im Duett mit Excel ............................................................................................... 600

10.4.1 Access-Tabelle in eine Excel-Tabelle umwandeln .................................... 600

10.4.2 Excel-Daten in eine Access-Tabelle transferieren .................................... 603

10.4.3 Automatisches Anlegen einer Access-Tabelle mit

anschließendem Import .................................................................................... 604

10.4.4 Der Zugriff von Excel auf Access .................................................................... 609

10.4.5 Suchen, Anlegen, Ändern und Löschen ........................................................ 611

10.4.6 Benutzerverwaltung für Access-Anwendungen ....................................... 617

11 API-Funktionen einsetzen 629

11.1 Das CD-ROM-Laufwerk ermitteln ................................................................................ 630

11.2 Den Namen des Anwenders ermitteln ...................................................................... 632

11.3 Das CD-ROM-Laufwerk bedienen ................................................................................ 633

11.4 Die Bildschirmauflösung ermitteln ............................................................................ 634

11.5 Ist ein externes Programm gestartet? ....................................................................... 635

11.6 Ein externes Programm aufrufen ................................................................................ 635

Inhalt

16

11.7 Wie lange läuft ein externes Programm? ................................................................ 636

11.8 Access schlafen schicken ................................................................................................. 638

11.9 Verzeichnisse erstellen ..................................................................................................... 638

11.10 Verzeichnis löschen .......................................................................................................... 639

11.11 Verzeichnisbaum anzeigen und auswerten .......................................................... 639

11.12 Die Windows-Version ermitteln .................................................................................. 641

11.13 Windows-Verzeichnis ermitteln ................................................................................. 642

11.14 Windows-Systemverzeichnis ermitteln .................................................................. 643

11.15 Das temporäre Verzeichnis ermitteln ...................................................................... 644

11.16 Das aktuelle Verzeichnis ermitteln ........................................................................... 644

11.17 Windows-Infobildschirm anzeigen ........................................................................... 645

11.18 Access-Verzeichnis ermitteln ....................................................................................... 645

11.19 Standardverzeichnis festlegen .................................................................................... 646

11.20 Dateityp und Anwendung ermitteln ......................................................................... 646

11.21 Kurze Pfadnamen ermitteln .......................................................................................... 647

11.22 Den Computernamen ermitteln .................................................................................. 648

11.23 Texte mit API-Funktionen konvertieren ................................................................. 649

11.24 Die Zwischenablage löschen ......................................................................................... 649

11.25 Soundkarte checken ......................................................................................................... 650

11.26 Sounds per API-Funktion ausgeben ........................................................................... 651

11.27 PC piepsen lassen ............................................................................................................... 651

11.28 Tasten abfangen ................................................................................................................ 652

11.29 Dateien suchen ................................................................................................................... 652

11.30 Datei-Informationen auslesen .................................................................................... 653

11.31 Ist die Internetverbindung aktiv? ................................................................................ 655

11.32 Cursorposition in Pixel angeben .................................................................................. 656

Inhalt

17

12 Datenbanken und Quellcode schützen und pflegen 659

12.1 Ihre Access-Lösung mithilfe von Startparametern absichern ........................ 659

12.2 Eine ACCDE erstellen ......................................................................................................... 661

12.3 Eine Datenbank über ein Kennwort schützen ....................................................... 662

12.3.1 Geschützte Datenbank per VBA öffnen (DAO) .......................................... 663

12.3.2 Geschütze Datenbank per VBA öffnen (ADO) ............................................ 664

12.3.3 Das Datenbankkennwort ändern ................................................................... 667

12.4 Quellcode schützen ............................................................................................................ 668

12.4.1 Ein Kennwort für die Anzeige des Quellcodes anlegen .......................... 668

12.5 Eine Datenbank komprimieren und reparieren .................................................... 669

12.5.1 Automatisches Komprimieren beim Schließen ........................................ 670

12.5.2 Automatisches Komprimieren einer externen Datenbank ................... 671

12.6 Die MZ-Tools für VBA ........................................................................................................ 672

12.6.1 Zeilennummern automatisch einfügen ...................................................... 672

12.6.2 Eine Fehlerbehandlung per MZ-Tools hinzufügen ................................... 674

12.6.3 Den Quellcode analysieren ............................................................................... 675

13 VBE-Programmierung in Access 677

13.1 Die VBE-Bibliothek einbinden ....................................................................................... 678

13.2 Weitere Bibliotheken einbinden bzw. entfernen ................................................ 680

13.3 Fehlerhafte Verweise ermitteln ................................................................................... 682

13.4 In den VBE springen ........................................................................................................... 683

13.5 Objektbibliotheken auslesen ........................................................................................ 683

13.6 Neue Module einfügen .................................................................................................... 684

13.7 Modul(e) löschen ................................................................................................................ 685

13.8 Prozedur(en) löschen ........................................................................................................ 686

13.9 Einzelne Texte bzw. Befehle im Quellcode finden .............................................. 688

13.10 Module mit Quellcode versorgen (Import) ............................................................. 691

13.11 Prozeduren sichern (Export) .......................................................................................... 694

13.12 Module drucken .................................................................................................................. 696

Inhalt

18

13.13 »Lines Of Code« ermitteln .............................................................................................. 697

13.14 Identifikation von VB-Komponenten ........................................................................ 698

13.15 Prozeduren auflisten ......................................................................................................... 699

13.16 Die eigene VBA-Datenbank anlegen ......................................................................... 703

13.16.1 Der Zugriff auf einzelne Prozeduren ............................................................. 705

14 Anwendungen optimieren 709

14.1 Die automatische Leistungsanalyse ........................................................................... 709

14.1.1 Den richtigen Datentyp einsetzen ................................................................. 709

14.1.2 Programmleichen entfernen ........................................................................... 710

14.1.3 Variablen deklarieren ......................................................................................... 711

14.1.4 Zu viele Steuerelemente meiden ................................................................... 711

14.2 Datenbanken und Quellcode dokumentieren ....................................................... 712

14.3 Tabellen optimal anlegen ............................................................................................... 713

14.3.1 Primärschlüssel .................................................................................................... 714

14.3.2 Indizes einsetzen ................................................................................................ 715

14.4 Die richtigen Befehle ......................................................................................................... 715

14.4.1 Objekte exakt deklarieren ................................................................................. 716

14.4.2 Variablen und Konstanten einsetzen ........................................................... 717

14.4.3 Berechnung und Bildschirmaktualisierung ausschalten ....................... 718

14.4.4 Warnmeldungen ausschalten ........................................................................ 718

15 Access und das Internet 719

15.1 E-Mail verschicken .............................................................................................................. 719

15.1.1 E-Mail über API-Funktion versenden ............................................................ 722

15.1.2 E-Mail mit Anhang versenden ......................................................................... 723

15.1.3 Dynamische Auswahl von E-Mail-Adressen ............................................... 724

15.1.4 E-Mail-Verteiler zusammenstellen ................................................................ 731

15.1.5 Posteingang auslesen ....................................................................................... 734

15.1.6 Alle gesendeten Mails dokumentieren ........................................................ 736

15.1.7 Dateianhänge speichern ................................................................................... 739

15.2 Mini-Browser erstellen ..................................................................................................... 741

15.3 Arbeiten mit Hyperlinks .................................................................................................. 742

15.3.1 E-Mail direkt aus einem Formular absetzen ............................................... 743

Inhalt

19

15.4 Tabellen in Internetformate transferieren .............................................................. 743

15.4.1 Tabelle als HTML-Datei abspeichern ........................................................... 743

15.4.2 Tabelle in ein XML-Dokument umwandeln ............................................... 744

16 Ribbons programmieren 747

16.1 Programmierung über ein XML-Markup .................................................................. 748

16.1.1 Die Tabelle »USysRibbons« anlegen ............................................................ 749

16.1.2 Ereignis-Prozedur erstellen .............................................................................. 751

16.1.3 Neue Menüleiste auswählen ........................................................................... 751

16.1.4 Dynamisches Laden ohne »USysRibbon« .................................................... 752

16.2 Weitere wichtige Quellen und Hilfen ........................................................................ 754

17 FAQ für Access-Entwickler 757

17.1 Wie hänge ich ein Feld an eine Tabelle an? ............................................................ 758

17.2 Wie kann ich verhindern, dass ein Formular geschlossen wird? ................... 759

17.3 Wie frage ich alle Tabellen einer geschlossenen Datenbank ab? ................. 760

17.4 Wie kann ich in einem bestimmten Verzeichnis eine neue

Datenbank automatisch anlegen? .............................................................................. 762

17.5 Wie kann ich eine Tabelle aus einer anderen Datenbank verlinken? ......... 764

17.6 Wie kann ich Telefonnummern in Tabellen normieren? .................................. 765

17.7 Wie kann ich eine komplette Datenbank dokumentieren? ............................ 767

17.8 Wie kann ich prüfen, ob eine bestimmte Tabelle existiert? ........................... 768

17.9 Wie kann ich prüfen, ob ein bestimmtes Feld in einer

Tabelle angelegt ist? ......................................................................................................... 770

17.10 Wie kann ich eine SQL-Abfrage auf eine andere

Datenbank ausführen? .................................................................................................... 771

17.11 Wie kann ich alle verfügbaren Drucker ermitteln? ............................................. 773

17.12 Wie kann ich bestimmte Feldinhalte einer Tabelle in eine

Textdatei schreiben? ......................................................................................................... 773

17.13 Wie kann ich eine Access-Tabelle nach Word transferieren? ......................... 775

17.14 Wie kann ich eine Parameterabfrage automatisch anlegen? ........................ 778

Inhalt

20

17.15 Wie kann ich auf Tabelleneigenschaften einer Datenbank zugreifen? ..... 780

17.16 Wie kann ich die beiden Extremwerte einer Tabelle abfragen? ................... 781

17.17 Wie kann ich eine Durchschnittsberechnung durchführen? ........................... 782

17.18 Wie kann ich eine Unikatsliste erstellen? ............................................................... 784

17.19 Wie kann ich die Gesamtsumme für ein Tabellenfeld ermitteln? ................ 785

17.20 Wie kann ich eine bedingte Summierung durchführen? .................................. 786

17.21 Wie kann ich über eine ID den dazugehörigen Lieferanten auslesen? ...... 787

Index ........................................................................................................................................................ 789

Index

789

Index

A

Abfrage

auflisten .................................................... 196, 277

durchführen ..................................................... 410

erstellen ............................................................. 321

exportieren ....................................................... 557

programmieren .............................................. 319

versenden .......................................................... 720

Abfragetypen

definieren .......................................................... 291

Abläufe

automatisieren .................................................. 25

acActiveDataObject .................................. 205, 234

acAdd .............................................................. 231, 293

acAll .......................................................................... 232

acAnywhere .......................................................... 232

acBoundObjectFrame .................... 372, 462, 468

ACCDE-Datei ......................................................... 661

Access

beenden ....................................................... 82, 188

Benutzerverwaltung ..................................... 617

schlafen schicken ........................................... 638

Access-Datenbanken

ermitteln ............................................................ 102

AccessObject ............................ 193, 196, 198–199

Access-Tabelle

in Excel-Tabelle umwandeln ..................... 600

transferieren .................................................... 775

Access-Version

ausgeben ........................................................... 189

acCheckBox ........................................ 372, 462, 468

acCmdAboutMicrosoftAccess .......................... 82

acCmdAnswerWizard ........................................... 82

acCmdCloseWindow ............................................ 82

acCmdDatabaseProperties ................................ 82

acCmdDatasheetView ....................................... 523

acCmdDocMaximize ............................................ 82

acCmdDocMinimize ............................................. 82

acCmdExit ................................................................ 82

acCmdFind ............................................................... 82

acCmdNewDatabase ............................................. 82

acCmdOpenDatabase ........................................... 83

acCmdOpenTable .................................................. 83

acCmdOptions ........................................................ 83

acCmdPrint .............................................................. 83

acCmdQuickPrint .................................................. 83

acCmdRedo .............................................................. 83

acCmdRelationships ............................................. 83

acCmdReportHdrFtr ................................. 475, 483

acCmdSaveRecord .............................................. 365

acCmdSend ............................................................... 83

acCmdUndo ............................................................. 83

acComboBox ..................................... 372, 462, 468

acCommand .......................................................... 201

acCommandButton ........................ 372, 462, 468

acCopy ..................................................................... 364

Account ................................................................... 582

acCtrlMask ............................................................. 539

acCurrent ............................................................... 232

acCustomControl ............................. 372, 462, 468

acCut ........................................................................ 364

acDataAccessPage ............................................... 143

acDataForm .................................................. 205, 234

acDataFunction .......................................... 205, 234

acDataQuery ................................................ 205, 234

acDataReport ........................................................ 205

acDataServerView ...................................... 205, 234

acDataStoredProcedure .......................... 206, 234

acDataTable .................................................. 206, 234

acDelete .................................................................. 364

acDesign .............................................. 203, 375, 418

acDetail ................................................ 465, 469, 473

acDiagram .............................................................. 143

acDialog ............................................... 204, 375, 447

acDown ................................................................... 232

acDraft ............................................................ 200, 451

acEdit .............................................................. 231, 293

acEditMenu ........................................................... 363

acEntire ................................................................... 232

acExport ........................................................ 202, 602

acFile ........................................................................ 363

acFirst ................................................... 206, 234, 517

acFooter ............................................... 465, 469, 473

acForm ....................................... 143, 377, 490–491

acFormAdd ................................................... 204, 375

acFormatDAP ....................................................... 720

acFormatHTML ................................. 557, 720, 743

acFormatRTF ................................................ 557, 720

acFormatTXT .................. 557, 559, 720–721, 730

acFormatXLS ................................................ 557, 720

acFormBar ............................................................. 363

acFormDS ............................................................... 203

acFormEdit ................................................... 204, 375

Index

790

acFormPivotChart .............................................. 203

acFormPivotTable .............................................. 203

acFormPropertySettings ........................ 204, 375

acFormReadOnly ....................................... 204, 375

acGoTo ........................................................... 234, 517

acGroupLevel1Footer ..................... 465, 469, 473

acGroupLevel1Header .................... 465, 469, 473

acGroupLevel2Footer ..................... 465, 469, 473

acGroupLevel2Header ................... 465, 469, 473

acHeader .................................... 465, 469, 473, 483

acHidden ............................................. 204, 375, 447

acHigh ............................................................ 200, 451

acIcon ................................................... 204, 375, 447

acImage ................................................ 372, 463, 468

acImport .............................................. 202, 602–603

acLabel ................................................. 372, 463, 468

acLast .............................................................. 234, 517

acLeftButton ......................................................... 527

acLine .......................................... 372, 463, 468, 483

acLink ............................................................. 202, 602

acListBox ............................................. 372, 463, 468

acLow .............................................................. 200, 451

acMacro .................................................................. 143

acMedium ..................................................... 200, 451

acMenuVer20 ....................................................... 364

acMenuVer70 ....................................................... 364

acMiddleButton .................................................. 527

acModule ............................................ 143, 238, 453

acNew ...................................................................... 364

acNewRec ...................................................... 234, 517

acNext ............................................................ 234, 517

acNormal ....................................................... 203, 375

acObject .................................................................. 364

acObjectFrame .................................. 372, 463, 468

acObjectUpdate ................................................... 364

acObjectVerb ........................................................ 364

acOptionButton ............................... 372, 463, 468

acOptionGroup ................................. 372, 463, 468

acOutputForm ..................................................... 557

acOutputFunction .............................................. 557

acOutputModule ....................................... 557, 559

acOutputQuery .................................................... 557

acOutputReport .................................................. 557

acOutputServerView ......................................... 557

acOutputStoredProcedure .............................. 557

acOutputTable ..................................................... 557

acPage ................................................... 373, 463, 468

acPageBreak ....................................... 373, 463, 468

acPageFooter .................. 465, 469, 473, 479, 483

acPageHeader ................. 465, 469, 473, 478, 483

acPages ........................................................... 200, 451

acPaste .................................................................... 364

acPreview ............................................................... 203

acPrevious .................................................... 234, 517

acPrintAll ...................................................... 200, 451

acQuery ...................................... 143, 238–239, 453

acQuit ...................................................................... 189

acQuitPrompt ...................................................... 189

acQuitSaveAll ....................................................... 189

acQuitSaveNone .................................................. 189

acReadOnly .................................................. 231, 293

acRecordsMenu ................................................... 363

acRectangle ........................................ 373, 463, 469

acRefresh ................................................................ 364

acReport ............................................... 143, 453, 467

acRightButton ............................................. 527, 531

acSaveForm ........................................................... 364

acSaveFormAs ...................................................... 364

acSaveNo ................................................................ 377

acSavePrompt ...................................................... 377

acSaveRecord ........................................................ 364

acSaveYes ............................................ 377, 419, 467

acSearchAll ............................................................ 232

acSelectAllRecords ............................................. 364

acSelection .................................................... 200, 451

acSelectRecord ..................................................... 364

acSendDataAccessPage .................................... 720

acSendForm .......................................................... 720

acSendModule ............................................ 720–721

acSendNoObject .................................................. 720

acSendQuery ........................................................ 720

acSendReport ....................................................... 720

acSendTable .......................................................... 720

acSpreadsheetTypeExcel10 ............................. 603

acSpreadsheetTypeExcel11 .............................. 603

acSpreadsheetTypeExcel12 ............................. 603

acSpreadsheetTypeExcel8 ............................... 603

acSpreadsheetTypeExcel9 ............................... 603

acStart ...................................................................... 232

acSubform .......................................... 373, 463, 469

acSysCmdAccessDir ........................................... 142

acSysCmdAccessVer .......................................... 142

acSysCmdClearStatus ........................................ 142

acSysCmdGetObjectState ....................... 142–143

acSysCmdGetWorkgroupFile ......................... 142

acSysCmdIniFile .................................................. 142

acSysCmdInitMeter .................................. 142–143

acSysCmdProfile ................................................. 142

acSysCmdRemoveMeter .................................. 142

acSysCmdRuntime ............................................. 142

acSysCmdSetStatus ................................... 142–143

acSysCmdUpdateMeter ........................... 142–143

Index

791

acTabCtl ............................................... 373, 463, 469

acTable .................... 143, 238–239, 408, 453, 490

acTextBox .................................. 373, 463, 469, 717

Activate ................................................................... 515

ActiveConnection ........ 252, 277, 283, 320–321,

323, 606, 761, 781

ActiveExplorer ..................................................... 740

ActiveX Data Objects

einbinden .......................................................... 577

acToggleButton ................................ 373, 463, 469

ActualWork ........................................................... 595

acUndo .................................................................... 364

acUp ......................................................................... 232

acViewDesign ................. 199, 230, 293, 295, 447

acViewNormal ......................... 199, 230, 293, 447

acViewPivotChart ...................................... 230, 293

acViewPivotTable ...................................... 230, 293

acViewPreview ......................... 199, 230, 293, 447

acWindowNormal ........................... 204, 375, 447

adBoolean .............................................................. 284

adChar ..................................................................... 284

adCmdTable .......................................................... 667

adCurrency ............................................................ 284

Add ................. 211, 369–370, 418, 422–423, 428,

569–570, 684, 740, 772, 777

ADD COLUMN ............................................. 311–312

ADD CONSTRAINT .............................................. 311

adDecimal .............................................................. 284

AddFromFile ...................................... 681, 693–694

AddFromGuid ............................................. 679–680

AddIns ..................................................................... 680

AddItem .................. 401, 424, 435, 707–708, 726

AddNew ........ 274, 289, 499, 587, 598, 608, 615,

736, 738

adDouble ................................................................ 284

Address ................................................................... 628

adLockBatchOptimistic ........................... 253, 666

adLockOptimistic ...................................... 253, 666

adLockPessimistic ..................................... 252, 666

adLockReadOnly ........................................ 252, 666

adLongVarChar .................................................... 284

adModeRead ......................................................... 665

adModeReadWrite ............................................. 665

adModeShareDenyNone ................................. 665

adModeShareDenyRead .................................. 665

adModeShareDenyWrite ................................. 665

adModeShareExclusive .................................... 665

adModeUnknown ............................................... 665

adModeWrite ........................................................ 665

adNumeric ............................................................. 284

ADODB.Connection ........................................... 250

adOpenDynamic .............................. 252, 624, 666

adOpenForwardOnly ...................... 252, 624, 665

adOpenKeyset ............................................. 252, 666

adOpenStatic ............................................... 252, 666

ADOX.Catalog ....................................................... 781

ADOX.Table ........................................................... 781

Adressendatenbank

anlegen ............................................................... 572

Adresstabelle

nach Outlook transportieren .................... 578

adSearchBackward ............................................. 253

adSearchForward ................................................ 253

adSeekAfter ........................................................... 258

adSeekAfterEQ ..................................................... 258

adSeekBefore ........................................................ 258

adSeekBeforeEQ .................................................. 258

adSeekFirstEQ ...................................................... 258

adSeekLastEQ ....................................................... 258

adSingle .................................................................. 284

adUseClient ........................................................... 267

advapi32.dll ........................................................... 632

adVarChar .............................................................. 284

adVarWChar ................................................. 284–285

AfterUpdate ................................................... 78, 509

Aktion

widerrufen ......................................... 83, 540, 544

wiederholen ......................................................... 83

Aktionsabfrage

durchführen ..................................................... 292

Aktivierreihenfolge

Steuerelemente ............................................... 549

Aktualisierungsabfrage

durchführen ..................................................... 292

Aktuelles Verzeichnis

ermitteln ............................................................ 644

AllDataAccessPages .................................. 100, 194

AllDatabaseDiagrams ........................................ 194

AllForms ........................... 100, 194, 197–198, 490

AllFunctions .......................................................... 194

Allgemeine Einstellungen

bearbeiten ............................................................ 52

AllMacros ...................................................... 100, 194

AllModules ............................... 100, 194–195, 560

AllowBypassKey .................................................. 661

AllowValueListEdits ........................................... 408

AllQueries ..................................................... 194, 197

AllReports ........................................... 100, 194, 460

AllTables ........ 194–195, 199, 306, 316, 744, 769

AllViews .................................................................. 194

ALTER TABLE ...................................... 306, 311–312

An ..................................................................... 720–721

Index

792

AND .......................................................................... 325

And .................................................................. 168, 265

Änderungen

dokumentieren ............................................... 507

nicht zulassen .................................................. 509

speichern ........................................................... 513

Änderungsdatum

anzeigen ............................................................ 506

ermitteln ............................................................ 276

Anfügeabfrage

durchführen ..................................................... 292

Ansicht

aktualisieren .................................................... 307

wechseln ............................................................ 521

Anwendernamen

ermitteln ................................................... 187, 632

Anzeige

mehrzeilig ......................................................... 335

Append .............................. 284–285, 323, 554, 759

Application ..... 41, 185–187, 189, 191, 479, 773

Applikationsverzeichnis

ermitteln ............................................................ 142

ApplyFilter ............................................................. 235

Arabische Ziffern

umwandeln ...................................................... 182

Arbeitsgruppendateipfad

ermitteln ............................................................ 142

Arbeitsmappe

anlegen .............................................................. 740

Arithmetische Operatoren

verwenden ........................................................ 165

Array ........................................................................ 153

abarbeiten ............................................... 148, 154

auslesen ............................................................. 148

definieren .......................................................... 156

durchlaufen ...................................................... 154

füllen ................................................................... 153

programmieren .............................................. 152

Artikel

bewerten ............................................................ 264

Artikelanlage

kontrollieren .................................................... 539

Artikelnamen

ändern ................................................................ 295

AS ..................................................................... 318, 327

ASC ...................................... 161–162, 267–268, 539

Asc .................................................................... 178–179

AtEndOfStream ...................................................... 74

Attachments ................................................ 736, 739

Attributes ............................................................... 278

Aufgabenliste

importieren ...................................................... 592

Aufgaben-Objekt(Outlook)

erstellen .............................................................. 581

Auflistungsobjekt .................................................. 99

Ausgabeformat

festlegen ............................................................. 557

Auskommentierung

aufheben ............................................................... 36

Auslaufartikel

löschen ............................................................... 272

Auswahlabfrage

durchführen ..................................................... 292

AutoAnpassen ...................................................... 570

AutoFitBehavior .................................................. 570

AutoStart ................................................................ 558

AVG ........................................................................... 783

Avg ............................................................................ 484

B

BackColor ......................... 136, 378, 454, 457, 535

Bcc ............................................................................. 721

Bedingte Formatierung

durchführen ..................................................... 359

Beep .......................................................................... 651

Befehl

ausführen ............................................................. 81

BeforeUpdate .............................................. 503, 539

Bei Aktivierung .................................................... 548

Bei Deaktivierung ............................................... 549

Bei Entladen .......................................................... 549

Bei Fokuserhalt ........................................... 549–550

Bei Fokusverlust ......................................... 549–550

Bei Geändert ......................................................... 550

Bei Grössenänderung ........................................ 548

Bei Laden ....................................................... 548, 550

Bei Maustaste Ab ................................................. 550

Bei Maustaste ab ................................................. 412

Bei Taste .................................................................. 550

Bei Taste Auf ......................................................... 550

Bei Zeitgeber ......................................................... 420

Beim Anzeigen ..................................................... 548

Beim Hingehen ........................................... 549–550

Beim Klicken ......................................................... 420

Beim Öffnen ................................................. 548, 550

Beim Schließen .................................................... 549

Beim Verlassen ........................................... 549–550

Berechnung

ausschalten ...................................................... 718

Index

793

Bereiche

ausblenden ....................................................... 474

einblenden ........................................................ 474

vergrößern ........................................................ 472

Bereichsgröße

festlegen ............................................................ 473

Bericht

aufrufen ............................................................. 199

ausgeben ........................................................... 453

bearbeiten ......................................................... 446

drucken ..................................................... 200, 451

entwerfen .......................................................... 445

erstellen ............................................................. 466

exportieren ....................................................... 557

formatieren ...................................................... 454

identifizieren .................................................... 459

kopieren ............................................................. 452

maximiert anzeigen ..................................... 447

öffnen ........................................................ 446–447

schließen ................................................... 461, 467

umbenennen .................................................... 452

versenden .......................................................... 720

zählen ................................................................. 460

Bericht mit Diagrammen

ausführen .......................................................... 444

Bericht mit Vorauswahl

öffnen ................................................................. 448

Bericht mit Zusammenfassung

durchführen ..................................................... 444

Berichtsarten

definieren .......................................................... 443

Berichtsaufbau

festlegen ............................................................ 444

Berichtselemente

auflisten ............................................................. 461

Berichtssektionen

ansprechen ....................................................... 465

Berichtstypen

ermitteln ............................................................ 461

Beschriftung

festlegen ............................................................ 483

Bestände

zusammenführen ........................................... 325

Bezeichnungsfelder

einsetzen ............................................................ 393

Bibliotheken

einbinden .......................................................... 680

entfernen ........................................................... 680

Bild

laden ................................................................... 441

Bildbetrachter-Tool

programmieren .............................................. 433

Bilddateien

suchen ................................................................. 439

Bildlaufleisten

setzen .................................................................. 351

Bildschirmaktualisierung

ausschalten ............................................. 199, 718

einschalten ....................................................... 199

Bildschirmauflösung

ermitteln ............................................................ 634

Binary ...................................................................... 554

Birthday .................................................................. 582

BIT ............................................................................. 308

Block

auskommentieren ............................................ 35

Block-Syntax

verwenden ........................................................... 86

Body ...................................................... 590, 595, 600

BOF ........................................................................... 262

Bookmark ............................................ 270, 518, 576

Boolean ................................................... 61, 540, 543

BusinessAddressCity ......................................... 582

BusinessAddressPostalCode .......................... 582

BusinessAddressState ....................................... 582

BusinessAddressStreet ..................................... 582

BusinessFaxNumber ......................................... 582

BusinessTelephoneNumber ........................... 582

Button ..................................................................... 527

Byte .............................................................................. 61

ByVal ........................................................................... 71

C

Cancel ...................... 510–511, 540, 544, 548, 760

Caption .............................. 391, 419, 426, 497, 539

festlegen ............................................................. 483

Case ............................................................................. 93

Case Else .......................................................... 94, 626

Catalog .............................. 277, 283, 321, 606, 761

Categories ..................................................... 590, 595

CBool ............................................................... 140–141

Cbool ........................................................................ 141

Cbyte ........................................................................ 140

Cc ............................................................................... 721

Ccur .......................................................................... 140

CDate ....................................................................... 145

Cdate ........................................................................ 140

CDbl ................................................................. 140, 144

CDec ......................................................................... 141

Index

794

CD-ROM-Laufwerk

bedienen ............................................................ 633

ermitteln ............................................................ 630

Cell ................................................................... 571, 777

Cells .......................................................................... 608

Change .................................................................... 438

CHARACTER .......................................................... 308

CharLower ............................................................. 649

CharUpper ............................................................. 649

CHDIR ......................................................................... 26

ChDir ........................................................................ 209

CHDRIVE ................................................................... 26

Choose ..................................................................... 138

Chr ......................................................... 335, 546, 692

Chr(13) ...................................................................... 114

CInt ........................................................................... 141

Clear ...................................................... 211, 428, 611

Click .......................... 423, 425, 522, 525–526, 533

CLng ......................................................................... 141

Close ........ 74, 109, 156, 161, 164, 258–259, 262,

289, 316, 376, 461, 467, 487, 489–490, 492,

499, 508, 555, 576, 609, 667, 696, 736, 739,

768, 777

CloseClipboard ..................................................... 650

CloseCurrentDatabase ............................. 188, 205

Code ......................................................................... 560

schrittweise durchlaufen ............................... 46

sichern ................................................................ 558

CodeData ................................................................ 198

Code-Fenster

anpassen .............................................................. 50

anzeigen ............................................................... 43

teilen ............................................................... 40, 44

CodeModule ......................................................... 708

CodePanes ............................................................. 680

Codezeilen

ermitteln ............................................................ 688

zählen ................................................................. 697

Column .......................................................... 278, 284

Columns ........................................................ 280, 284

Command .............................................................. 322

CommandBars ..................................................... 680

CommandText ........................ 320–321, 323, 772

CompactDatabase .............................................. 671

Complete ................................................................ 595

Computerinfos

anzeigen ............................................................ 214

Computername

ermitteln ............................................................ 648

Connection ............. 160, 251, 259, 554, 613, 665

ConnectionString ............................................... 252

context .................................................................... 333

Control .................................................................... 101

ControlTipText .................................................... 383

ControlType .................... 371, 378, 382–383, 411

CopyFile .................................................................. 224

CopyFromRecordset ................................. 611, 628

CopyObject ............................... 238–239, 452–453

Count ....................... 106, 221, 280, 377, 418, 460,

736, 738–739

Countdown programmieren ......................... 491

CountOfDeclarationLines ............................... 700

CountOfLines ................. 692, 697–698, 700, 708

Create ....................................................................... 763

CREATE INDEX .................................. 307, 313–314

CREATE TABLE ...... 306–307, 314, 320, 735, 738

CreateDirectory ................................................... 639

CreateField ............................................................. 759

CreateForm ................................................... 189–190

CreateItem ................................. 581, 584, 589, 595

CreateObject ........ 174, 215–217, 223, 226, 369,

568–569, 581, 600, 607, 663, 740, 772, 777

CreateReport ...................................... 466, 468, 471

CreateReportControl ... 467–468, 478–479, 483

CreateShortcut ..................................................... 217

criteria ..................................................................... 253

CSng ......................................................................... 141

CStr ........................................................................... 141

CSV-Datei ............................................................... 552

Currency .................................................................... 61

CurrentDb ..... 117, 152, 186, 489, 759, 768, 785

CurrentProject ..... 100, 124, 156, 158, 160, 186,

259, 320, 490, 554, 570, 735, 738

CurrentUser .......................................... 41, 187, 479

CurrentX ................................................................. 457

CursorLoaction .................................................... 267

Cursorposition

ermitteln ............................................................ 656

CursorType ................................................... 623, 665

festlegen ............................................................. 252

Cvar .......................................................................... 141

D

DatDiff ..................................................................... 129

Date ....................................... 61, 479, 507, 526, 536

DateAdd .................................................................. 129

DateCreated ........... 196, 225, 276, 284, 287, 781

Index

795

Dateianhänge

speichern ........................................................... 739

Dateien

löschen ............................................................... 121

suchen ............................................. 108, 210, 652

zählen (Verzeichnis) ...................................... 169

Dateiendungen

prüfen ................................................................. 113

Dateiexistenz

prüfen ................................................................. 170

Datei-Informationen

auslesen ............................................................. 653

Dateinamen

ausgeben ........................................................... 104

sammeln ............................................................ 104

Dateinummer ...................................................... 554

Dateityp

ermitteln ............................................................ 646

Dateiverfügbarkeit

prüfen ................................................................. 171

Dateizugriff

festlegen ............................................................... 72

DateLastAccessed ............................................... 225

DateLastModified ...................................... 225, 287

DateModified .................................... 196, 284, 781

Daten

drucken ................................................................. 83

entfernen ........................................................... 321

prüfen .................................................................... 90

transferieren .................................................... 556

zusammenführen ........................................... 316

Datenbank

anlegen ................................................................. 82

automatisch anlegen ................................... 762

dokumentieren ............................................... 767

ermitteln ............................................................ 117

öffnen ................................................................. 248

schließen ............................................................ 188

sichern ................................................................ 223

vorhanden ........................................................ 336

Datenbankeigenschaften

anzeigen ............................................................... 82

Datenbanken

dokumentieren ...................................... 286, 712

suchen ................................................................ 286

zählen ................................................................. 106

Datenbank-Fenster

maximieren ......................................................... 82

minimieren .......................................................... 82

Datenbankinformationen

erhalten .............................................................. 186

Datenbankkennwort

ändern (DAO) ................................................... 667

Datenbankobjektstatus

abfragen ............................................................ 142

Datenblattansicht

aktivieren .......................................................... 523

Datendefinitionsabfragen

durchführen ..................................................... 306

Datenfeld

anlegen .................................................................. 49

löschen ............................................................... 312

Datenformat

festlegen ............................................................. 557

Datenpuffer

auslesen ................................................................ 74

Datensatz

aktivieren ................................................. 271, 517

aktualisieren .................................................... 495

anlegen ...................................................... 498, 587

ansteuern ................................................. 233, 516

duplizieren ........................................................ 366

ersten aktivieren ............................................. 234

filtern .................................................................. 265

hinzufügen ............................................... 274, 289

klonen ................................................................. 494

kopieren ............................................................. 494

letzten aktivieren .................................. 234, 262

löschen ...................................................... 272, 367

nächsten aktivieren ...................................... 234

neu ....................................................................... 546

positionieren .................................................... 234

sortieren ............................................................. 266

suchen ........................... 231–232, 253, 365, 502

summieren ........................................................ 502

vorherigen aktivieren ................................... 234

zählen ........................... 156, 192, 269, 489, 502

Datensatzmarkierer

anzeigen ............................................................ 351

Datentyp

überwachen ...................................................... 393

umwandeln ............................................. 140, 144

Datenzugriffsseite

versenden .......................................................... 720

DatePart ........................................................... 66, 128

verwenden ........................................................... 66

DateSerial ............................................................... 175

DATETIME .............................................................. 308

Datum

einfügen .......................................... 476, 525, 538

zerlegen .............................................................. 175

Index

796

Datumsangaben

formatieren ...................................................... 131

umwandeln ...................................................... 145

Datumsberechnungen

durchführen ..................................................... 129

Datumsfelder

erhöhen .............................................................. 536

Datumsformat-Konstanten

einsetzen ............................................................... 65

Datumsteile

extrahieren ....................................................... 128

Datumswert

überprüfen ........................................................ 149

DAvg ............................................................... 191, 502

DBEngine ............................................................... 663

DblClick .......................................................... 424, 428

DCount .............................. 192, 502–503, 777, 787

Debug.Print ........ 74–75, 97, 101, 104, 109, 118,

148, 156, 164, 242–243, 461, 584, 761,

766, 782, 784–785

DECIMAL ................................................................ 308

Decimal ...................................................................... 61

Declare .................................................................... 631

DefaultTableBehavior ....................................... 570

DefBool ...................................................................... 63

DefByte ...................................................................... 63

DefCur ........................................................................ 63

DefDate ...................................................................... 63

DefDbl ........................................................................ 63

DefinedSize .................................................. 278, 285

Definition

Automatisch Einzug vergrößern ................ 51

Automatische Daten-Tipps ........................... 51

Automatische Quickinfo ................................ 51

Automatische Syntaxüberprüfung ............ 50

Dropdown-Feld Objekt .................................... 43

Dropdown-Feld Prozedur ............................... 43

Eigenschaften ..................................................... 27

Elemente automatisch auflisten ................. 51

Ereignisse ............................................................. 27

Methoden ............................................................. 27

Objekte .................................................................. 27

DefInt .......................................................................... 63

DefLng ........................................................................ 63

DefObj ........................................................................ 63

DefSng ........................................................................ 63

DefStr .......................................................................... 63

DefType ............................................................... 63–64

DefVar ........................................................................ 63

DELETE .................................................................... 301

Delete ........................ 272, 274, 285, 592, 617, 687

DELETE * .................................................................. 321

DeleteLines ............................................................ 688

DeleteObject ................................................ 335, 408

DESC ................................... 161, 248, 267–268, 318

Detailbereich ........................................................ 444

Detailberichte

ausführen .......................................................... 444

DeviceName ................................................. 187, 773

DFirst ....................................................................... 502

Diagramm-Assistent ......................................... 429

Diagramme

einfügen ............................................................. 428

Dialog

anzeigen ............................................................... 87

Dialog Drucken

anzeigen ............................................................... 83

Dialog Optionen

anzeigen ............................................................... 83

Dim .............................................................................. 57

Dir ................................. 70–71, 107, 123, 125, 171,

288, 336, 424, 440, 763

Direktfenster

abfragen ............................................................... 45

editieren ............................................................. 118

einblenden ........................................................... 45

füllen ................................................................... 118

testen ..................................................................... 45

Direkthilfe

anzeigen ............................................................... 82

Dir-Konstanten

verwenden ........................................................... 70

Dirty ................................................................ 509, 513

DisplayAsHyperlink ........................................... 392

DLast ............................................................... 501–502

DLookup ................. 388–389, 502, 540, 543, 787

DMax .............................................................. 193, 502

DMin ............................................................... 193, 502

Do Until 105, 164, 600, 767, 775, 777, 784–785

Do Until...Loop ..................................................... 104

Do While...Loop ........................................... 106, 108

DoCmd ...................................... 198–201, 205, 229,

235, 239, 446, 556, 765

DoEvents ................................................................ 637

Dokumenteigenschaft

auslesen ............................................................. 173

ermitteln ............................................................ 172

DoMenuItem ............................................... 363–364

Double ........................................................................ 61

Drag & Drop

ausschalten ......................................................... 51

DriveLetter ............................................................ 223

Index

797

Drives ...................................................................... 223

DriveType .............................................................. 223

DROP COLUMN .......................................... 311, 313

DROP CONSTRAINT ........................................... 311

DROP INDEX ................................................ 307, 315

DROP TABLE ................................................. 307, 315

Drucker

verfügbare ermitteln .................................... 773

Druckkopien

festlegen ............................................................ 200

Druckqualität

festlegen ............................................................ 200

DStDEv .................................................................... 502

DSum .................................................... 191, 502, 786

DueDate .................................................................. 595

Duration ................................................................. 590

Durchschnitt

errechnen .......................................................... 191

Durchschnittsberechnung

erstellen ............................................................. 782

DVar ......................................................................... 502

dwMajorVersion ................................................. 642

dwMinorVersion ................................................. 642

dwPlatformId ....................................................... 642

DZ .............................................................................. 169

E

Echo ................................................................. 199, 744

Edit ................................................................... 586, 766

Eigene Funktionen

programmieren .............................................. 169

Eigenschaften

anzeigen ............................................................... 36

Eigenschaften-Fenster

einblenden ........................................................... 29

Einfügeposition

festlegen ............................................................ 570

Eingabe

automatisch durchführen .......................... 386

erfassen .............................................................. 338

erzwingen ................................................. 310, 506

prüfen .......................................................... 88, 504

umwandeln ......................................................... 88

vervollständigen ............................................ 541

widerrufen ........................................................ 504

Eingabelänge

überprüfen ........................................................ 393

Eingabemasken

programmieren .............................................. 336

Eingabemöglichkeit

beschränken ..................................................... 503

Einzug

vergrößern ........................................................... 34

verkleinern ........................................................... 34

ElseIf ............................................................................ 87

E-Mail

verschicken ....................................................... 719

versenden (API) ............................................... 722

E-Mail mit Anhang

versenden .......................................................... 723

Email1Address ...................................................... 582

E-Mail-Adresse

austauschen ..................................................... 691

dynamisch auswählen ................................. 724

prüfen ................................................................. 109

E-Mail-Aktion

starten ................................................................ 498

E-Mail-Dialog

öffnen ..................................................................... 83

E-Mail-Objekt(Outlook)

erstellen .............................................................. 581

E-Mail-Verteiler

zusammenstellen ........................................... 731

Enabled ................................................................... 384

End ............................................................................ 590

End Sub ...................................................................... 30

End With ................................................................. 106

Entwicklungsumgebung

aufrufen ............................................... 26, 28, 680

Entwurfsqualität

drucken .............................................................. 200

EnumNetworkDrives ........................................ 221

Environ .................................. 46, 49, 487, 762–764

EOF ........................... 108–109, 241, 253, 258, 262,

555, 576, 667, 732, 767, 775

Ereignis

Activate .............................................................. 548

AfterInsert ......................................................... 498

AfterUpdate ............................................. 549–550

Before_Update ................................................ 543

BeforeDelConfirm .......................................... 513

BeforeUpdate ...................... 541, 544, 549–550

Change ............................................................... 550

Click ..................................................................... 525

Close ................................................. 490–491, 549

Current ............................................................... 548

Deactivate ......................................................... 549

Enter ....................................... 545–546, 549–550

Exit .......................................... 533, 547, 549–550

Form_Activate ....................................... 515, 517

Index

798

Ereignis (Forts.)

Form_AfterDelConfirm ................................ 515

Form_AfterInsert ........................................... 498

Form_AfterUpdate ........................................ 509

Form_BeforeInsert ........................................ 500

Form_BeforeUpdate 503–504, 506, 508–509

Form_Close .............................................. 489–490

Form_Current .................................................. 494

Form_DblClick ................................................ 521

Form_Deactivate ........................................... 519

Form_Delete ........................................... 509–510

Form_Dirty ....................................................... 513

Form_Load ....................................................... 492

Form_Resize ..................................................... 519

GotFocus ......................................... 533, 549–550

KeyDown ........................................ 535–536, 550

KeyPress ............................................................. 550

KeyUp ........................................................ 535, 550

Load ............................................................ 548, 550

LostFocus ........................................ 533, 549–550

MouseDown .................................. 526, 529–530

MouseMove ............................................. 531–532

MouseUp .................................................. 526, 529

Open ........................................................... 548, 550

OpenForm ......................................................... 492

Resize .................................................................. 548

Schaltfläche_Click ......................................... 533

Steuerelement_BeforeUpdate ................... 539

Steuerelement_Enter .................................... 545

Steuerelement_Exit ....................................... 547

Unload ................................................................ 549

Ereignisreihenfolge

abstimmen ....................................................... 548

Erstellungsdatum

abfragen ............................................................ 224

ermitteln ............................................................ 276

Ersten Datensatz

aktivieren .......................................................... 517

ermitteln ............................................................ 502

Etiketten

erstellen ............................................................. 449

Etikettenberichte

starten ................................................................ 444

Euro-Konvertierung

durchführen ..................................................... 411

Excel-Daten

in Access-Tabelle transferieren ................. 603

Excel-Session

starten ................................................................ 369

Excel-Verzeichnis

ermitteln ............................................................ 645

Execute ...................................... 263, 320–321, 784

Exemplare

sortieren ............................................................. 200

Exit ...................................... 532, 544–545, 547–548

Exit Do ............................................................ 104, 106

Exit For ....................................................................... 96

Exit Function ........................................................ 179

Exit Sub ................................................... 87, 338, 489

Exklusivmodus .................................................... 662

Export ............................................................. 695–696

Abfrage ............................................................... 557

Bericht ................................................................ 557

Formular ............................................................ 557

Funktion ............................................................ 557

Modul .................................................................. 557

Prozedur ............................................................ 557

Tabelle ................................................................ 557

Exportdatei

öffnen .................................................................. 558

ExportXML ............................................................ 745

Externes Programm

starten ................................................................ 635

Extremwerte

abfragen ............................................................ 781

F

False ............................................................................. 86

Farbfunktionen

einsetzen ............................................................ 135

FastLaserPrinting ................................................ 452

Fehler

abfangen .............................................................. 90

Fehlerhafte Verweise

ermitteln ............................................................ 682

Fehlermeldungen

formatieren ......................................................... 41

Felddatentypen

ermitteln ............................................................ 281

Felddefinitionen

auslesen ............................................................. 280

Felder

ausblenden ....................................................... 495

einblenden ........................................................ 495

initialisieren ..................................................... 296

vorbelegen ........................................................ 501

Feldinhalt

auslesen ............................................................. 253

Feldinhalte in Textdatei

schreiben ........................................................... 773

Index

799

Fenster

maximieren ...................................................... 200

schließen ............................................................... 82

verankern ............................................................. 53

Fields ............................................ 771, 775, 777, 785

FileDialog ...................................................... 207–211

FileName ................................................................ 425

FileObject ............................................................... 211

FileSystemObject ............ 73, 104, 174, 213, 221,

223–224, 226, 775

FillColor .................................................................. 457

FillStyle ................................................................... 457

Filter ......................................................................... 265

einstellen ........................................................... 211

Filterkriterium

angeben ............................................................. 235

einstellen ........................................................... 235

FilterName ............................................................. 447

Filters ....................................................................... 211

Find .................. 253–254, 259, 576, 688–690, 704

FindExecutable ........................................... 646–647

FindFirst ................................................................. 586

FindFirstFile .......................................................... 655

FindRecord ................................................... 231–232

FindWindow ......................................................... 635

firstdayofweek ........................................................ 67

FirstName .............................................................. 582

Fix ............................................................................. 139

Fokus

setzen ......................................................... 487, 516

FontBold ........................................................ 457, 530

FontItalic ................................................................ 457

FontName ..................................................... 457, 483

FontSize ......................................................... 457, 483

FontUnderline ..................................................... 457

For Append ............................................................ 507

For Each ......................................................... 208, 211

For Each...Next ........ 98, 100–102, 226, 761, 773

For Each...Next-Schleife

anwenden ............................................................ 98

For Next ........ 164, 184, 339, 584, 592, 598, 608,

611, 764, 768

For Output ............................................................. 768

For...Next ................................................................... 96

ForAppending ......................................................... 72

ForeColor ............................................ 136, 457, 530

Form ......................................................................... 418

Form.Repaint ........................................................ 442

Form_Load ......................................... 421, 427, 434

Form_Unload ....................................................... 759

Format 131–132, 161, 191, 420, 454, 736, 738

FormatDateTime .................................................... 65

FormatNumber .................................................... 222Forms .......................................................................... 99Formular

aktualisieren ........................................... 495, 517anlegen ............................................................... 189aufrufen .................................................... 203, 375einrichten .......................................................... 486erstellen .............................................................. 339exportieren ....................................................... 557maximieren ...................................................... 516öffnen ......................................................... 144, 198programmieren .............................................. 434schließen ................................................... 489–490Schließen verhindern .................................... 759vergrößern ........................................................ 516zeichnen ............................................................. 433

Formularberichteausführen .......................................................... 444

Formularbeschriftungbestimmen ........................................................ 350

Formularbreiteermitteln ............................................................ 519

Formulardarstellungbearbeiten ............................................................ 52

Formulardatenverknüpfen ........................................................ 191

Formularendeaktivieren .......................................................... 517

Formularexistenzprüfen ................................................................. 197

Formularfelderbearbeiten ......................................................... 346färben .................................................................. 533markieren .......................................................... 348

Formularinhaltdrucken .............................................................. 367

Formularnamenausgeben .............................................................. 99ermitteln ............................................................ 100

ForReading ........................................................ 72, 74ForWriting ................................................................ 72Frachtkosten

Mittelwertsberechnung ............................... 191Frachtkostensumme

ermitteln ............................................................ 191Frachtkostenwert

ermitteln ............................................................ 193FreeSpace ............................................................... 221FROM .............................................................. 300, 305Füllfarbe

festlegen ............................................................. 457

Index

800

Füllmusterfestlegen ............................................................ 457

FullName ................................................................ 174FullPath ................................................................... 682Funktion

beenden .............................................................. 179einsetzen ............................................................ 108exportieren ....................................................... 557

G

Ganzzahliger Wertextrahieren ....................................................... 139

GDI32.dll ................................................................. 631Gesamtsumme

ermitteln ............................................................ 785Gesamttext

teilen ................................................................... 119Geschützte Datenbank

öffnen (ADO) .................................................... 664öffnen (DAO) .................................................... 663

GetAttr ................................................................ 70–71GetClipboardData ............................................... 650GetCommandLine .............................................. 646GetComputerName ........................................... 648GetCurrentDirectory ......................................... 644GetCursorPos .............................................. 656–657GetDefaultFolder .................... 592, 598, 736, 738GetDrive ................................................................. 222GetDriveName ..................................................... 222GetDriveType ....................................................... 632GetExitCodeProcess ................................. 636–637GetFolder ...................................................... 104, 226GetLogicalDriveStrings .................................... 631GetObject ................ 568, 576, 607, 736, 738, 777GetShortPathName ................................... 647–648GetString ............................................. 242–243, 625GetSystemDirectory .......................................... 643GetTempPath ....................................................... 644GetUserName ....................................................... 632GetVersionEx ....................................................... 641GetWindowsDirectory ...................................... 644GotFocus ....................................................... 533–534GoTo ............................................................................ 91GoToRecord ....................................... 233–234, 517Grafik

laden ................................................................... 441Grafikdateien

suchen ................................................................ 439Großbuchstaben

umwandeln ......................................................... 88

GUID ......................................................................... 679

Gültigkeitsprüfung

Verweise ............................................................. 682

H

Haltepunkt

ausschalten ......................................................... 34

einfügen ................................................................ 34

setzen ..................................................................... 34

HauptNr .................................................................. 679

Hauptversionsnummer

festlegen ............................................................. 679

Height ...................................................................... 473

helpfile .................................................................... 333

Hilfsmittel

nutzen .................................................................... 34

Hintergrundfarbe

festlegen ............................................................. 457

Höchstwert

festlegen ................................................................ 98

Homepagezugangsicon

erstellen .............................................................. 218

Hotkey ..................................................................... 217

Hour ......................................................................... 134

HTML-Datei

speichern ........................................................... 743

Hyperlink

einsetzen ............................................................ 742

integrieren ........................................................ 425

I

Icons ......................................................................... 427

IDENTITY ................................................................ 320

If ................................................................................. 544

IIF ................................................................. 91–92, 625

IIF-Verzweigung

einsetzen ............................................................... 91

IMAGE ..................................................................... 308

ImageList ................................................................ 427

imageMso .............................................................. 755

Importdatei

festlegen ............................................................. 566

Index ............................................................... 257, 284

einfügen ............................................................. 307

einsetzen ............................................................ 715

löschen ............................................................... 307

Index

801

Infodialog

aufrufen ................................................................ 82

Informationen

anzeigen ............................................................ 335

Input ........................................................................ 554

InputBox ..................... 87–88, 251, 338–339, 576

Inputbox ................................................................ 336

verwenden ........................................................ 336

INSERT INTO ................................................ 298, 300

InsertLines ............................................................. 688

Installierte Drucker

ermitteln ............................................................ 187

InStr .......................... 104, 109–111, 114, 159, 176

InStrRev ..................................... 111, 113–114, 117

Int .............................................................................. 139

INTEGER ................................................................. 309

Integer ............................................ 60–61, 63, 71, 80

Integrierte Dialoge

einsetzen ............................................................ 206

InternetGetConnectedState ........................... 656

Internetseite

checken .............................................................. 113

Internetverbindung

überprüfen ........................................................ 655

Interval ....................................................................... 67

INTO ......................................................................... 305

IsArray ..................................................... 91, 147–148

IsBroken ................................................................. 682

IsDate ......................................................... 90–91, 149

IsEmpty ............................................................ 91, 150

IsError ......................................................................... 91

IsLoaded ........................... 100, 196, 316, 490–491

IsNull .................................... 91, 146, 150, 506, 536,

540, 543–544, 546, 732

IsNumeric ......................................... 88, 90–91, 393

IsObject ............................................................ 91, 152

ItemData ....................................................... 407, 730

ItemProperties ..................................................... 584

Items ........................................................................ 592

ItemsSelected ....................................................... 406

J

JOIN .......................................................................... 628

Join ............................................................................ 119

Journaleintrag(Outlook)

erstellen ............................................................. 581

K

Kennwortschutz

festlegen ............................................................. 662

Kernel32.dll ............................................................ 631

KeyCode .................................................................. 539

KeyDown ....................................................... 535, 538

Key-Ereignisse ...................................................... 535

KeyPress ........................................................ 392–393

Keys .......................................................................... 284

Kill ................................................ 121–122, 672, 697

Klassen-ID

festlegen ............................................................. 679

Kombinationsfeldlisten

programmieren .............................................. 395

Kommentar

erstellen ................................................................. 36

Komplexere Abfragen

programmieren .............................................. 323

Konstanten

anzeigen ........................................................ 38, 83

definieren ............................................................. 64

einsetzen ............................................................ 717

verwenden ........................................................... 64

Konstantenzugriffsart

festlegen ................................................................ 71

Kontaktobjekt(Outlook)

erstellen .............................................................. 581

Kontextmenü

abschalten ......................................................... 531

deaktivieren ............................................ 530–531

Kontrollkästchen

aktivieren .......................................................... 408

initialisieren ..................................................... 411

Konvertierung

HTML .................................................................. 557

RTF ....................................................................... 557

XLS ....................................................................... 557

Kostenstelle

prüfen ................................................................. 543

Kovertierung

TXT ....................................................................... 557

Kreuztabellenabfrage

durchführen ..................................................... 292

Kurze Pfadnamen

ermitteln ............................................................ 647

Index

802

L

Lagerbestand

kontrollieren .................................................... 324

manipulieren ................................................... 258

LastName ............................................................... 582

Laufwerk

anzeigen ............................................................ 220

auswerten ......................................................... 221

mappen .............................................................. 218

wechseln ............................................................... 26

Laufwerksbuchstaben

ermitteln ............................................................ 223

Laufwerkstyp

ermitteln ............................................................ 223

LBound .................................................................... 148

LCase ................................................................. 89, 649

Leerzeichen

entfernen ........................................................... 120

Left ............................ 115–116, 159, 393, 633, 732

LEFT JOIN ................................................................ 628

Leistungsanalyse

durchführen ..................................................... 709

Len 113, 115, 146, 159, 170, 178–179, 393, 732

Lesezeichen

aufheben ............................................................... 40

einsetzen ............................................................ 270

setzen ..................................................................... 40

zum nächsten springen .................................. 40

Letzte Änderung

abfragen ............................................................ 224

Letzten Datensatz

aktivieren .......................................................... 517

ermitteln ............................................................ 501

Letzter Zugriff

abfragen ............................................................ 224

Lib ............................................................................. 631

Liefertermin

errechnen ............................................................. 90

LIKE ........................................................................... 238

Line Input .............................................................. 109

Lines Of Code

ermitteln ............................................................ 697

ListCount ....................................................... 403, 494

Listeneinträge

demarkieren ..................................................... 405

löschen ............................................................... 403

mit Aktionen ausstatten ............................. 406

Listenfeld

bestücken .......................................................... 424

einfügen ............................................................. 401

Listenfeld (Forts.)

füllen ................................................ 401, 492, 707

programmieren .............................................. 401

Listenfeldeinträge

auslesen ............................................................. 404

löschen ............................................................... 403

zählen ................................................................. 403

ListIndex ..................................... 404, 407, 704, 730

ListView .................................................................. 427

Load ................................................................. 492, 706

LoadCustomUI ..................................................... 753

LoadRibbons ......................................................... 753

Location .................................................................. 590

Lock .......................................................................... 554

Lock Read Write ................................................... 554

Lock Write .............................................................. 554

Locked ..................................................................... 384

LockNavigationPane ......................................... 205

LockType ....................................................... 252, 666

Logische Operatoren

einsetzen ............................................................ 168

Lokal-Fenster

einblenden ........................................................... 49

Long ...................................................................... 61, 80

Löschabfrage

ausführen .......................................................... 300

durchführen ..................................................... 292

ersetzen .............................................................. 514

Löschen

rückgängig machen ...................................... 544

Löschrückfrage

einholen ............................................................. 334

Löschung

bestätigen ......................................................... 515

verhindern ........................................................ 509

Löschweitergabe ................................................. 301

LostFocus ...................................................... 533–534

lpResult ................................................................... 647

LTrim ....................................................................... 120

M

Mailanhänge

speichern ........................................................... 739

MailItem ................................................................. 598

Mails

dokumentieren ................................................ 736

MainWindow ........................................................ 683

Index

803

MapNetworkDrive .............................................. 219

Markierung

drucken .............................................................. 200

Maßeinheit

festlegen ............................................................ 457

Maustastenklicks

abfangen ........................................................... 526

auf Textfeld ...................................................... 527

MAX ......................................................................... 782

Max ........................................................................... 484

Maximalwert

ermitteln ................................................... 247, 502

Maximize ............................................ 200, 447, 516

mciSendString ..................................................... 633

Me .......................................................... 382, 403, 488

Media-Player-Steuerelement

programmieren .............................................. 423

Mehrdimensionale Arrays

programmieren .............................................. 154

Mehrfachauswahl

einstellen ........................................................... 404

Mehrfach-Index

hinzufügen ....................................................... 311

löschen ............................................................... 311

Mehrwertsteuer

errechnen .......................................................... 337

Mehrzeilige Meldung

erzeugen ............................................................ 546

Mehrzeiliges Textfeld

füllen ................................................................... 545

Meldung

anzeigen ............................................................... 31

Menübefehl

ausführen ....................................... 201, 363, 522

Methoden

anzeigen ............................................................... 36

Mid ........................... 113, 115, 117, 178–179, 632

MIN ........................................................................... 782

Min ........................................................................... 484

Mini-Browser

basteln ................................................................ 741

Minimalwert

ermitteln ............................................................ 502

MinMaxSchaltflächen

anzeigen ............................................................ 351

Minute ..................................................................... 134

Mitarbeiter

hinzufügen ....................................................... 298

MkDir .................................................... 123–124, 638

Mod ................................................................. 165, 454

Mode ........................................................................ 665

Modul

drucken .............................................................. 696

einfügen ...................................................... 28, 684

exportieren ....................................................... 557

löschen ............................................................... 685

versenden .......................................................... 720

Modus ...................................................................... 554

Monat

ermitteln ............................................................ 127

MONEY .................................................................... 308

MONTH ................................................................... 628

Month ............................................................. 127, 175

MonthName ................................................ 124, 127

MouseDown ................................................. 413, 526

MouseMove .......................................................... 531

MouseUp ................................................................ 526

MoveFirst ............................................................... 271

MoveLast ....................................................... 262, 271

MoveNext .............. 156, 158, 164, 241, 262, 265,

272, 274, 555, 571, 581, 667, 767, 775, 784

MovePrevious ...................................................... 263

MsgBox ....... 30–31, 34, 38, 40, 87, 99, 118, 161,

175, 181, 332, 337, 504, 624, 646, 648, 698

msoFileDialogFilePicker .................................. 208

msoFileDialogFolderPicker .................... 208–209

msoFileDialogOpen ........................................... 208

msoFileDialogSaveAs ........................................ 208

Multifunktionsleiste programmieren ....... 749

N

Nach Aktualisierung .......................................... 550

Nachfrage

starten ................................................................ 547

Nächsten Datensatz aktivieren ..................... 517

Name .............. 117, 186, 190, 195–196, 226, 276,

460–461, 467, 478, 570, 584, 611,

672, 682, 707, 761, 768, 772, 781

ändern ................................................................... 29

einfügen ............................................................. 476

festlegen ................................................................ 29

Navigate .................................................................. 742

Navigationsschaltflächen

einblenden ........................................................ 351

NebenNr ................................................................. 679

Nebenversionsnummer

festlegen ............................................................. 679

network ................................................................... 215

Netzwerkressource

abfragen ............................................................ 223

Index

804

Neuanlage

verhindern ........................................................ 508

New .................................................................. 160, 592

NewName .............................................................. 239

NewPassword ....................................................... 668

NewRecord ................................ 497, 499, 509, 546

NoMatch ................................................................. 586

Not ............................................................................... 88

NOT NULL .............................................................. 310

Nothing ........... 74, 156, 208, 210–211, 258–259,

277, 281, 555, 587, 609, 741

Notiz-Objekt(Outlook)

erstellen ............................................................. 581

Now ............................................. 133, 637–638, 692

Number ................................................................... 172

NumColumns ....................................................... 570

NumericScale ....................................................... 278

Numerische Werte

extrahieren ....................................................... 145

Numerische Zeichen

extrahieren ....................................................... 145

NumRows .............................................................. 570

O

Object ...................................................... 61, 696, 772

ObjectName .......................................................... 557

ObjectType ................................................... 453, 557

Objekt

abfragen ............................................................ 152

erstellen ............................................................. 216

hinzufügen ....................................................... 323

Objektbibliotheken

auslesen ............................................................. 683

Objektkatalog

aufrufen ................................................................ 26

Objektverknüpfung

aufheben ............................................................ 277

Objektverweis

aufheben ................................................... 156, 555

Öffnen-Dialog

anzeigen ............................................................... 83

olAppointmentItem ................................. 581, 589

olContactItem ...................................................... 581

olDistributionListItem ..................................... 581

OldValue .............................................. 382–383, 508

olFolderCalendar ................................................ 592

olFolderInbox ............................................. 598, 736

olFolderSentMail ................................................ 738

olJournalItem ....................................................... 581

olMailItem .................................................... 581, 600

olNoteItem ............................................................ 581

olPostItem ............................................................. 581

olTaskItem .................................................... 581, 595

Open ..... 109, 156, 160, 172, 241, 247, 252, 259,

486–487, 492, 507, 554, 569, 581, 600, 607, 610,

613, 665, 667, 735, 738, 768, 775, 777, 782–783

open ......................................................................... 426

OpenArgs ............................................................... 447

OpenClipboard .................................................... 650

OpenDatabase ............................................. 663, 668

OpenForm .............. 144, 198, 203, 375, 418–419

OpenProcess ................................................ 636–637

OpenQuery ......................................... 293, 295, 410

OpenRecordset ................................. 732, 766, 785

OpenReport .............................. 199, 446, 448–449

OpenTable .................................. 152, 230, 306, 407

OpenText ............................................................... 696

OpenTextFile ................................................. 73, 775

Operationen

ausführen .......................................................... 199

Operatoren

einsetzen ............................................................ 165

Option Explicit .......................................... 59, 62, 64

Optionen-Dialog

aufrufen ............................................................. 212

Options ................................................................... 253

Optionsschaltflächen

programmieren .............................................. 411

OR ..................................................................... 324, 327

Or ............................................................................... 265

ORDER BY ...... 244, 246, 248, 271, 318, 325, 327

Outlook-Objekt

erstellen .............................................................. 581

Output ..................................................................... 554

OutputFile .............................................................. 558

OutputFormat ...................................................... 557

OutputTo ............... 454, 557–558, 560, 572, 600,

695, 743

P

Pages ............................................................... 418, 479

Parameterabfrage

automatisch anlegen ................................... 778

durchführen ............................................ 292, 328

erstellen .............................................................. 327

PARAMETERS ........................................................ 328

ParentCatalog .............................................. 279, 284

Path ................................................................. 124, 186

Index

805

PC-Piepse

erzeugen ............................................................ 651

Pfadname ............................................................... 554

Picture ............................................................ 441–442

PLZ

prüfen ................................................................. 543

Port ........................................................................... 187

Posteingang

auslesen ............................................................. 734

Postleitzahlen

ermitteln ............................................................... 94

Präzision

festlegen ............................................................ 279

Precision ................................................................. 279

Preiserhöhung

durchführen ..................................................... 259

Preserve .................................................................. 440

Print ...................................................... 508, 555, 768

Printers .......................................................... 187, 773

PrintOut ...................................... 200, 368, 451, 696

Private ........................................................................ 58

Procedures ............................................................. 323

ProcOfLine ............................................................. 700

ProcOfLines ........................................................... 688

ProcStartLine ........................................................ 688

Programmausführung

abbrechen ............................................................ 47

Programmierleistung

messen ................................................................ 697

Programmlaufdauer

messen ................................................................ 636

Programmstatus

abfragen ............................................................ 635

Projekt-Fenster

anpassen .............................................................. 50

Properties ........................................... 279, 284, 665

Provider .................................................................. 665

Prozedur

anlegen .............................................................. 323

auflisten ............................................................. 699

aufspüren .......................................................... 688

ausführen ............................................................. 33

entfernen ........................................................... 686

exportieren ....................................................... 557

finden .................................................................. 688

löschen ............................................................... 686

sichern ................................................................ 694

starten ................................................................... 33

verlassen ............................................................ 338

Prozedurtext

anzeigen ............................................................ 704

Prozedurzeilen

löschen ............................................................... 688

Public ................................................................... 58–59

Q

QBColor .......................................................... 135, 458

Quellcodeeinfügen ............................................................. 691importieren ...................................................... 691schützen ............................................................. 668

Quellcodeanzeigeverhindern ........................................................ 668

QueryTables .......................................................... 772QuickInfo

anzeigen ............................................................... 37hinzufügen ........................................................ 383

Quit .................................................................. 188, 448

R

Rahmenartbestimmen ........................................................ 351

Random .................................................................. 554Range .............................................................. 571, 608Read .......................................................................... 554Read Write ............................................................. 554ReadAll ....................................................................... 75ReadLine .................................................................... 74ReceivedTime ....................................................... 736Record ..................................................................... 206RecordCount ........ 156, 158, 164, 269–270, 489,

494, 613, 616–617, 623RecordsAffected .................................................. 263Recordset ...... 160, 241, 252, 257, 259, 553, 569,

576, 587, 598–600, 613, 665–666, 775RecordsetClone .................................................... 494RecordSource .................................... 191, 467, 471ReDim .......................................... 156, 158, 164, 440Reference ............................................................... 682Referenzielle Integrität ..................................... 302Refresh ................................................. 495, 518, 772RefreshDataBaseWindow ....................... 307, 735Registerelemente

anlegen ............................................................... 416programmieren .............................................. 415

Registerkarteaktivieren .......................................................... 417einfügen ............................................................. 417löschen ............................................................... 419

Index

806

Registerkarte (Forts.)

suchen ................................................................ 419

umbenennen .................................................... 417

Reihenfolge

Aktualisierungsereignisse .......................... 549

RelatedColumn .................................................... 279

ReminderMinutesBeforeStart .............. 590, 595

ReminderPlaySound ................................ 590, 595

ReminderSet ................................................ 590, 595

ReminderSoundFile ........................................... 595

Remove ....................................... 419, 679, 682, 686

RemoveDirectory ............................................... 639

RemoveItem ...................................... 403–404, 708

RemoveNetworkDrive ...................................... 220

Rename .......................................................... 239, 453

Replace .................................................................... 691

ReplaceLine ........................................................... 691

Report .......................................... 456, 461, 466, 478

Report_Open ........................................................ 466

ReportItem ............................................................ 598

ReportName .......................................................... 446

Reprint .................................................................... 495

Requery .......................................................... 495, 518

RequiredAttendees ............................................ 590

Resize ....................................................................... 519

Restore .................................................................... 191

RGB ..................................... 378, 454, 457, 530, 535

Right ...................................................... 115–116, 159

RmDir ...................................................................... 125

Roman ..................................................................... 182

Römische Ziffern

umwandeln ...................................................... 180

Round ............................................................. 121, 176

RTrim ....................................................................... 120

Rückfrage

einholen ............................................................. 503

Rückschrittzeichen

einfügen ............................................................. 115

Rückwärtssuche

durchführen ..................................................... 253

Run ........................................................................... 692

RunCommand ......... 81, 83, 201, 212, 364–365,

448, 450, 475, 483, 513, 522–523

RunSQL 295–296, 306–307, 312, 314, 735, 738

S

Satzlängevorgeben ............................................................ 555

Save ................................................................. 218, 582

SaveAs ..................................................................... 777SaveAsFile .............................................................. 741ScaleMode .............................................................. 457Schaltflächenfarbe

verändern .......................................................... 529Schaltflächenklick

ermitteln ............................................................ 333Schleife

aufbauen .............................................................. 74einsetzen ............................................................... 96

Schließen-Schaltflächeeinblenden ........................................................ 351

Schriftarteinstellen ........................................................... 457festlegen ............................................................. 483

Schriftfarbefestlegen .................................................... 457, 530

Schriftformatierungenanwenden .......................................................... 455

Schriftgrößefestlegen ............................................................. 457

Schriftschnittfestlegen .................................................... 457, 530

SearchDirection ................................................... 253SearchForRecord ................................................. 205SearchTreeForFile ............................................... 652Second ..................................................................... 134Section ............................................................ 465, 472Seek ....................................................... 254, 256, 258Seitenfuß ................................................................ 444Seitenkopf .............................................................. 444Seitenzahlen

einfügen ............................................................. 476Sektion

anzeigen ............................................................ 466ausblenden ....................................................... 466

SELECT ..................... 242–243, 246, 271, 300, 305Select ............................................................... 264–265Select Case ....... 92–94, 153, 178–179, 282, 374,

415, 464, 515, 625SELECT DISTINCT ................................................ 784Selected ................................................ 406–407, 494SelectedItem ................................................ 423, 428SelectedItems .................................... 208–209, 211Selection ................................................................. 570SelHeight ....................................................... 511–513SelLength ................................................................ 379SelStart .................................................................... 379Send .......................................................................... 600SenderName ......................................................... 736SendObject ............ 719–721, 723, 730, 733–734SentOn .................................................................... 738

Index

807

Serveransichtexportieren ....................................................... 557

SET ............................................................................ 296Set ............ 74, 100, 106, 156, 160, 215, 258–259,

280, 370, 418, 456, 613, 690SetAttr ........................................................................ 71SetCurrentDirectoryA ....................................... 646SetFocus ............................................... 488, 495, 516SetSelection ........................................................... 689Shared ...................................................................... 554ShareName ............................................................ 223SHBrowseForFolder .................................. 437–438Sheets ...................................................................... 608Shell ............................................................ 75, 77, 637ShellAbout ............................................................. 645ShellExecute ...................................... 425, 635, 722Shell-Konstanten

verwenden ........................................................... 75SHGetPathFromIDList ............................. 437–438Shift ................................................................. 527, 539ShortcutMenu ...................................................... 531Show ..................................................... 208–209, 211Single .......................................................................... 61Size ............................................................................ 739SizeToFit ................................................................. 472SkipRows ................................................................ 253Sleep ......................................................................... 442SMALLINT .............................................................. 309sndPlaySound32 .................................................. 651Sonderzeichen

eliminieren ........................................................ 175entfernen ........................................................... 175

Sort ........................... 161–162, 266–267, 736, 739Sortierreihenfolge

bestimmen ........................................................ 279festlegen ............................................................ 267

SortOrder ............................................................... 279Soundkarte

prüfen ................................................................. 650Sounds

ausgeben ........................................................... 651Source ............................................................. 252, 667Spaltenlänge

festlegen ............................................................ 278SpecialEffect ................................................. 415, 532SpecialFolders ............................................. 216–217Speicher

freigeben ............................................................ 555Speicherort

festlegen ............................................................ 558Sperre ...................................................................... 554Sperrverfahren

einstellen ........................................................... 252

Spezialeffekteinfügen (Textfeld) ........................................ 531hinzufügen ........................................................ 410

Spezifikationangeben ............................................................. 566

Split ................................................................. 117–119SQL-Abfrage

durchführen ..................................................... 292erstellen .............................................................. 295

SQL-Abfrage auf andere Datenbankausführen .......................................................... 771

SQL-Anweisungabsetzen .................................................... 263, 320ausführen .......................................................... 263durchführen ..................................................... 320festlegen ............................................................. 321

SQL-Befehlausführen .......................................................... 320

Standardabweichungermitteln ............................................................ 502

Standardansichtfestlegen ............................................................. 350

Standardverzeichnisfestlegen ............................................................. 646

Start .......................................................................... 590StartDate ................................................................ 595startFromScratch ................................................ 748Statusanzeige

aktualisieren .................................................... 142entfernen ........................................................... 142

Statusleisteeditieren ............................................................. 142

Steuerelementaktualisieren .................................................... 495ansprechen ....................................................... 101ausblenden ....................................................... 524automatisch anpassen ....................... 472, 519einblenden ........................................................ 524einfügen ............................................................. 345einfügen (Bericht) ........................................... 467einschränken ................................................... 711identifizieren ........................................... 105, 370zählen ................................................................. 106

Stop .............................................................................. 49StrConv ............................................................... 77–78String ................................................................... 60–61Sub ............................................................................... 30

ausführen ............................................................. 33SubFolders ............................................................. 226

Subject ...................... 590, 592, 595, 600, 736, 738

Suchen-Fenster

anzeigen ............................................................... 82

Index

808

Suchkriterien

festlegen ............................................................ 253

Suchrichtung

angeben ............................................................. 253

Sum .......................................................................... 484

Summe

einfügen ............................................................. 479

ermitteln ............................................................ 191

Summierung

bedingte durchführen .................................. 786

Symbolleiste

Bearbeiten ............................................................ 34

Syntaxprüfung

automatisch ........................................................ 41

SysCMD ................................................................... 143

SysCmd .......................................................... 141, 143

Systemeinstellungen

auslesen ............................................................. 763

Systemfeldmenü

einblenden ........................................................ 351

Systemzeit

ausgeben ........................................................... 526

T

TabControl ............................................................. 418

TabelDefs ............................................................... 152

Tabelle

AccessObjects .................................................. 194

aktualisieren .................................................... 259

Aktualisierungskonstanten der Methode

Open ............................................................... 607

ändern ................................................................ 306

anlegen ........................................... 282, 306–307

Ansichtskonstanten ...................................... 213

arithmetische Operatoren .......................... 166

Auflistungsobjekte ........................................ 100

Befehlskonstanten der Methode

DoMenuItem ............................................... 364

Berichtskonstanten ....................................... 473

CursorType-Konstanten .............................. 665

Datentypen (SQL) ........................................... 308

DatePart ............................................................ 128

Datumskürzel .................................................. 132

drucken .............................................................. 368

Eigenschaftsnummern ................................. 172

entfernen ........................................................... 315

Existenz prüfen ............................................... 768

exportieren ....................................................... 557

Farben mit RGB ............................................... 458

Tabelle (Forts.)

Farbindizes ....................................................... 135

Farbwerte .......................................................... 378

Formatierungsmöglichkeiten von

Berichten ....................................................... 457

gängigste Datentypen ................................. 284

GoToRecord-Konstanten ............................ 517

Konstanten der Methode Add ................... 685

Konstanten für Steuerzeichen .................. 115

Laufwerksindizes für GetDriveType ........ 632

LockType-Konstanten .................................. 666

logische Operatoren ...................................... 168

löschen ...................................................... 307, 335

Mode-Konstanten .......................................... 665

nach Word überführen ................................. 568

öffnen ............................... 83, 152, 156, 230, 252

Outlook Aufgaben-Eigenschaften ........... 595

Outlook-Mail-Eigenschaften ..................... 581

prüfen, ob Feld angelegt .............................. 770

Prüffunktionen ................................................... 91

QBColor .............................................................. 459

Rechenfunktionen .......................................... 484

Schaltflächen für MsgBox .......................... 332

Schaltflächenkonstanten ............................ 333

schließen ......................................... 156, 262, 576

sortieren .................................................... 161, 739

Spezialeffekte ................................................... 532

Standardfarben über RGB .......................... 378

Steuerelemente für Berichte ...................... 468

Steuerelemente für Formulare .................. 342

Steuerelementkonstanten ................. 372, 462

Steuerzeichen ................................................... 268

Suchmethoden in Access ............................. 502

Terminkalender-Eigenschaften ................ 590

übertragen ........................................................ 572

VBA-Konstanten ............................................. 114

Vergleichsoperatoren ............................ 94, 167

versenden .......................................................... 720

Tabelle aus Datenbank

verlinken ............................................................ 764

Tabellen

ändern ................................................................ 311

auflisten ............................................................. 277

auslesen ............................................................. 276

bearbeiten ......................................................... 229

filtern .................................................................. 235

kopieren ............................................................. 238

löschen ............................................................... 285

transferieren .................................................... 201

umbenennen .................................................... 239

updaten .............................................................. 263

Index

809

Tabellenanfang

ermitteln ............................................................ 262

Tabellenende

feststellen .......................................................... 241

Tabellenerstellungsabfrage

durchführen ............................................ 292, 304

Tabellenfeld

anhängen .......................................................... 758

auslesen ............................................................. 243

hinzufügen ....................................................... 311

löschen ...................................................... 311, 313

Tabellenindex

bestimmen ........................................................ 313

entfernen ........................................................... 315

Tabelleninhalte

auslesen ............................................................. 240

suchen ................................................................ 250

Tabellenstruktur

auslesen ............................................................. 278

ermitteln ............................................................ 276

Tabellentyp

abfragen ............................................................ 278

Tabellenverknüpfung

prüfen ................................................................. 488

Table ......................................................................... 606

TableDef ........................................................ 768–769

Tables .................................................... 570, 777, 781

Tabulatorzeichen

einfügen ............................................................. 115

Tag

ermitteln ............................................................ 174

Tagesdatum

ermitteln ............................................................ 526

TargetPath ............................................................. 217

Tastaturtastenklicks

auswerten ......................................................... 535

Tasten

abfangen ........................................................... 652

Tastenkombinationen

einsetzen ........................................................ 41–42

programmieren .............................................. 217

Telefonnummerntabelle

normieren ......................................................... 765

TemplateFile ......................................................... 558

Temporäres Verzeichnis

ermitteln ............................................................ 644

Termine

berechnen .......................................................... 129

übertragen ........................................................ 587

Terminobjekt(Outlook)

erstellen ............................................................. 581

TEXT ......................................................................... 308

Text ........................................................................... 571austauschen ..................................................... 691bereinigen ......................................................... 120extrahieren ....................................................... 115finden .................................................................. 688konvertieren ............................................ 119, 649kürzen ................................................................. 115spitten ................................................................. 117zerlegen .............................................................. 119zusammensetzen ........................................... 119

Textdateiabarbeiten ......................................................... 555einlesen ..................................................... 108, 560exportieren .............................................. 552, 556importieren ............................................. 552, 560lesen ............................................................ 109, 554öffnen ......................................................... 109, 554schließen ................................................... 109, 555schreiben ........................................................... 554speichern .................................................. 552, 556

Text-E-Mailversenden .......................................................... 720

Textfarbefestlegen ............................................................. 457

Textfeldaktivieren .......................................................... 384ausblenden ....................................................... 390begrenzen .......................................................... 392einblenden ........................................................ 390formatieren ...................................................... 377positionieren .................................................... 379programmieren .............................................. 377prüfen ................................................................. 536sperren ................................................................ 384überwachen ...................................................... 380

Textfelderinhalteretten ................................................................... 382

Textfeldhintergrundfärben .................................................................. 535

Textlängebestimmen ........................................................ 379

Textmarkierunganpassen ............................................................ 379

Textstartpositionfestlegen ............................................................. 379

Textteilextrahieren .............................................. 110, 113

Textwerteprüfen .................................................................... 94

Textzeichenentfernen ........................................................... 146

Index

810

Time ............................................... 30, 133, 526, 539Timer ....................................................................... 491TimerInterval .............................................. 421, 491TINYINT .................................................................. 309Titelleiste

anpassen ........................................................... 497title ........................................................................... 333To ............................................................... 94, 600, 738TOP .................................................................. 246–248TransferDatabase ................................................ 765TransferSpreadsheet ...................... 202, 601–603TransferText ...................................... 556, 560, 566Transfertyp ............................................................ 566

festlegen ............................................................ 566TreeView ........................................................ 421–423TreeView-Steuerelement

programmieren .............................................. 421Trennlinie

einfügen ............................................................. 479Trim .......................................................................... 120True ............................................................................. 86Twips ........................................................................ 469Type ....... 278, 281–282, 284, 687, 701, 707, 761TypeName ............................................................. 598TypeText ................................................................ 570

U

Überschrifteinfügen ............................................................. 479

Überwachunghinzufügen .......................................................... 47

Überwachungsfenstereinblenden ........................................................... 47

UBound ............................. 118, 148, 154, 164, 441UCase ................................................................ 88, 649Ucase ........................................................................ 119Uhr

integrieren ........................................................ 419Undo ............................................ 504, 509, 540, 544Unikatsliste

erstellen ............................................................. 784UNION .................................................. 245, 316, 327UNION ALL ............................................................ 327UNIQUE .................................................................. 315UnRead ................................................................... 736Unterbrechen bei Fehlern

einstellen .............................................................. 52UPDATE .................................................................. 296Update ........... 259, 262–263, 499, 587, 598, 608,

616, 666, 736, 739, 767

UpdateLinks .......................................................... 607

User32.dll ................................................................ 631

Username ............................................................... 487

V

Val ............................................................................. 145

Value ............................................................... 253, 417

VALUES ................................................................... 298

Variablen

benennen .............................................................. 56

deklarieren ............................ 56, 58, 62–63, 711

einsetzen ..................................................... 56, 717

prüfen ............................................................. 47, 79

übergeben ............................................................ 71

überprüfen ........................................................ 147

Variablendeklarationen

erzwingen ............................................................. 59

Variablentypen

auswählen ............................................................ 60

verwenden ........................................................... 57

Variant ................................................................ 61–62

Varianz

feststellen .......................................................... 502

VarType ............................................................... 79–80

vbAbortRetryIgnore ............................................. 39

VBA-Datenbank

anlegen ............................................................... 703

erstellen .............................................................. 703

vbArray ...................................................................... 80

vbBack ............................................................ 115, 268

vbBoolean ................................................................. 79

vbByte ........................................................................ 80

vbCancel ................................................................. 515

vbCR ......................................................................... 268

vbCr .......................................................................... 115

vbCritical ................................................................... 39

vbCrLf ................................................... 115, 268, 722

vbCurrency ............................................................... 79

vbDataObject ........................................................... 79

vbDate ........................................................................ 79

vbDecimal ................................................................. 80

vbDirectory .............................................................. 70

vbDouble ................................................................... 79

VBE

aktivieren ................................................. 679, 683

deaktivieren ..................................................... 679

VBE-Bibliothek

einbinden .......................................................... 678

Index

811

vbEmpty .................................................................... 79

vbError ....................................................................... 79

vbExclamation ........................................................ 39

vbext_ct_ClassModule ..................................... 685

vbext_ct_MSForm ............................................. 685

vbext_ct_StdModule ........................................ 685

vbext_pt_StandAlone ....................................... 685

vbFirstFourDays ..................................................... 68

vbFirstFullWeek ..................................................... 68

vbFirstJan1 ................................................................ 68

vbFriday ..................................................................... 68

vbGeneralDate ........................................................ 65

vbHidden .................................................................. 70

vbHide ........................................................................ 76

vbInformation ................................................. 38–39

vbInteger ................................................................... 79

VB-Komponenten

identifizieren .................................................... 698

vbLf ........................................................... 32, 115, 268

vbLong ....................................................................... 79

vbLongDate .............................................................. 65

vbLongTime ............................................................. 65

vbLowerCase ............................................................ 77

vbMaximizedFocus .............................................. 76

vbMinimizedFocus ............................................... 76

vbMinimizedNoFocus ......................................... 76

vbMonday ................................................................ 67

vbNewLine ............................................................. 115

vbNormal .................................................................. 70

vbNormalFocus ...................................................... 76

vbNormalNoFocus ................................................ 76

vbNull ......................................................................... 79

vbNullChar ............................................................ 115

VbNullString ......................................................... 115

vbNullString ................................................ 478, 631

vbObject .................................................................... 79

vbOKCancel .............................................................. 39

vbOkOnly .................................................................. 39

VBProjects .............................................................. 680

vbProperCase .......................................................... 77

vbQuestion ............................................................... 39

vbReadOnly .............................................................. 70

vbRetryCancel ......................................................... 39

vbSaturday ............................................................... 68

VbShortDate ............................................................ 65

vbShortTime ............................................................ 65

vbSingle ..................................................................... 79

vbString ..................................................................... 79

vbSunday .................................................................. 67

vbSystem .................................................................. 70

vbTab .............................................................. 115, 268

vbThursday .............................................................. 68vbTuesday ................................................................. 67vbUpperCase ............................................................ 77vbUseSystem .................................................... 67–68vbVariant .................................................................. 79vbVolume ................................................................. 70vbWednesday .......................................................... 67vbYesNo ........................................................... 39, 122vbYesNoCancel ....................................................... 39Vergleichsoperatoren

einsetzen ..................................................... 94, 166Verkaufsraum-Formular

erstellen .............................................................. 523Verkettungsoperatoren

einsetzen ............................................................ 167Version .................................................................... 189Versionsnummer

ermitteln ............................................................ 142Verteilerliste(Outlook)

erstellen .............................................................. 581Verzeichnis

einstellen ........................................................... 209entfernen ........................................................... 125ermitteln ............................................................ 215erstellen ..................................................... 123, 638löschen ...................................................... 125, 639

Verzeichnisbaumanzeigen ............................................................ 639auswerten ......................................................... 639einsetzen ............................................................ 437

Verzeichnisstrukturauslesen ............................................................. 226

Verzweigungenverschachteln ...................................................... 92verwenden ........................................................... 85

View .......................................................................... 446Visible ............................... 369–370, 391, 466, 495,

524, 569, 607, 683, 772, 777Visual-Basic-Editor

anpassen ............................................................... 50Vollautomatische Berichtserstellung

ausführen .......................................................... 470VolumeName ....................................................... 222Vor Aktualisierung ............................................. 550Vorabinformationen

geben ................................................................... 545Vorauswahl

treffen ................................................................. 203Vorlagendateipfad

angeben ............................................................. 558Vorwärtssuche

durchführen ..................................................... 253

Index

812

W

Wagenrücklaufzeichen

einfügen ............................................................. 115

Warnmeldungen

ausschalten ...................................................... 718

waveOutGetNumDevs ...................................... 650

wdAutoFitContent ............................................. 571

wdAutoFitFixed ................................................... 571

wdAutoFitWindow ............................................. 571

Weekday ........................................................ 126, 153

WeekdayName .............................................. 68, 126

nutzen .................................................................... 68

WHERE ................... 296, 301, 305, 318, 324–325,

327, 610, 623, 626, 628

WhereCondition .............................. 206, 447–448

WindowMode ....................................................... 447

Windows ................................................................. 680

Windows-Infobildschirm

anzeigen ............................................................ 645

Windows-Systemverzeichnis

ermitteln ............................................................ 643

Windows-Version

ermitteln ............................................................ 641

Windows-Verzeichnis

ermitteln ............................................................ 642

WindowWidth ...................................................... 519

With ................................................................. 106, 456

Wochentage

einlesen .............................................................. 152

ermitteln ............................................................ 126

Word-Dokument

anlegen ..................................................... 569, 573

Word-Session

starten ................................................................ 369

WorksheetFunction ........................................... 182

Workspace ............................................................. 663

Write ........................................................................ 554

WriteLine ............................................................... 775

WScript.Network ................................................. 219

X

XML-Format

erstellen ............................................................. 744

Y

YEAR ......................................................................... 628

Year ........................................................................... 175

Z

Zahl

runden ................................................................ 121

Zahlenwerte

prüfen .................................................................... 93

runden ................................................................ 121

Zählerstände

ausgeben .............................................................. 96

Zahlungstermin

errechnen ............................................................. 90

Zeichenfolge

aufspüren .......................................................... 110

suchen ................................................................. 110

Zeichenlänge

ermitteln ............................................................ 113

Zeichenposition

ermitteln ............................................................ 178

Zeilenvorschub

erzeugen ............................................................ 114

Zeit

einfügen .................................................... 525, 538

Zellengröße

anpassen ............................................................ 570

Zieltabelle

bestimmen ........................................................ 566

Zoom

einstellen ........................................................... 201

Zoom-Darstellung .............................................. 432

Zugriffsmodus

festlegen ............................................................. 554

Zustand

abfragen ............................................................... 85

Zweig

einfügen ............................................................. 422

Zwischenablage

löschen ............................................................... 649

öffnen .................................................................. 650

schließen ............................................................ 650

Zyklus

festlegen ............................................................. 354

Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne dürfen Sie diese Leseprobe empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Die vorliegende Leseprobe ist in all ihren Teilen urheberrecht-lich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.

Teilen Sie Ihre Leseerfahrung mit uns!

Bernd Held ist von Haus aus gelernter Informatiker. Zu seinen Spezialgebieten zählen Excel, VBA-Programmie-rung, Access und allgemeine Office-Themen. Er wurde von Microsoft mehrfach als MVP (Most Valuable Profes-sional) für den Bereich Excel ausgezeichnet. Seit 2008 arbeitet er mit einem eigenen Team aus Experten zusam-men, das Projekte und Schulungen durchführt, Unterneh-men berät und Bücher sowie Fachartikel veröffentlicht.

Bernd Held

VBA mit Access812 Seiten, gebunden, mit CD, März 2014 49,90 Euro, 978-3-8362-2596-0

www.galileocomputing.de/3440

Wissen, wie’s geht.