R1.2 Ein erstes VBA-Programm schreiben

Werbung
Walter Doberenz, Thomas Gewinnus
Microsoft Access – Programmier-Rezepte
Walter Doberenz, Thomas Gewinnus
Microsoft Access –
Programmier-Rezepte
Walter Doberenz, Thomas Gewinnus: Microsoft Access – Programmier-Rezepte
Copyright © 2011 O'Reilly Verlag GmbH & Co. KG
Das in diesem Buch enthaltene Programmmaterial ist mit keiner Verpflichtung oder Garantie irgendeiner Art
verbunden. Autor, Übersetzer und der Verlag übernehmen folglich keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programmmaterials oder Teilen davon entsteht.
Das Werk einschließlich aller Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen
des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für
Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Die in den Beispielen verwendeten Namen von Firmen, Organisationen, Produkten, Domänen, Personen, Orten,
Ereignissen sowie E-Mail-Adressen und Logos sind frei erfunden, soweit nichts anderes angegeben ist. Jede Ähnlichkeit mit tatsächlichen Firmen, Organisationen, Produkten, Domänen, Personen, Orten, Ereignissen, E-MailAdressen und Logos ist rein zufällig.
Kommentare und Fragen können Sie gerne an uns richten:
Microsoft Press Deutschland
Konrad-Zuse-Straße 1
85716 Unterschleißheim
E-Mail: [email protected]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
13 12 11
Druck-ISBN: 978-3-86645-098-1, PDF-ISBN 978-3-86645-343-2
© O'Reilly Verlag GmbH & Co. KG
Balthasarstr. 81, D-50670 Köln
Alle Rechte vorbehalten
Satz: Ingenieurbüro Gewinnus (www.doko-buch.de)
Layout: Gerhard Alfes, mediaService, Siegen (www.media-service.tv)
Umschlaggestaltung: Hommer Design GmbH, Haar (www.HommerDesign.com)
Gesamtherstellung: Kösel, Krugzell (www.KoeselBuch.de)
Kurzübersicht
Einführung
............................................................................
17
1
VBA-/Makro-Programmierung
........................................................
21
2
Steuerelemente und Formulare
.......................................................
115
3
ActiveX-Komponenten und Office-Objekte
4
............................................
183
DAO-Programmierung
................................................................
209
5
ADO-Programmierung
................................................................
251
6
Datenbankverwaltung
.................................................................
279
7
Microsoft SQL Server
..................................................................
331
8
Dateien/Verzeichnisse
.................................................................
417
9
Drucker/Berichte
......................................................................
455
10
Internet/Intranet
......................................................................
527
11
Programmschnittstellen
12
Betriebssystem
13
Sonstiges
...............................................................
579
........................................................................
631
..............................................................................
715
................................................................................
787
A
Glossar
B
Wichtige Dateierweiterungen
C
Liste der wichtigsten SQL-Befehle
D
ANSI-Tabelle
E
Wichtige Tastaturcodes
.........................................................
793
.....................................................
795
..........................................................................
797
Stichwortverzeichnis
...............................................................
801
...................................................................
805
Inhaltsverzeichnis
Einführung
1
............................................................................
VBA-/Makro-Programmierung
R1.1
R1.2
R1.3
R1.4
R1.5
R1.6
R1.7
R1.8
R1.9
R1.10
R1.11
R1.12
R1.13
R1.14
R1.15
R1.16
R1.17
R1.18
R1.19
R1.20
R1.21
R1.22
R1.23
R1.24
R1.25
R1.26
R1.27
R1.28
R1.29
R1.30
R1.31
R1.32
R1.33
R1.34
R1.35
R1.36
R1.37
R1.38
R1.39
R1.40
R1.41
17
........................................................
21
Makros konventionell programmieren ............................................
Ein erstes VBA-Programm schreiben .............................................
Makros automatisch nach VBA konvertieren .....................................
Codeblöcke auskommentieren ...................................................
Den Datentyp einer Variablen bestimmen .........................................
Nach Text suchen ...............................................................
Text mit Wildcards suchen .......................................................
Auf ein Wort in einer Textliste zugreifen ..........................................
Überflüssige Leerzeichen entfernen ...............................................
Einen Text mit Zeichen auffüllen .................................................
Telefonnummern filtern .........................................................
Prüfen, ob es sich um eine gerade Zahl handelt ....................................
Eine Zufallszahl generieren .......................................................
Einen Zufallstext erzeugen .......................................................
Einen Text einfach verschlüsseln .................................................
Umwandlung zwischen Byte-Array und String ....................................
Ein Array sortieren ..............................................................
Minimum und Maximum eines Arrays ermitteln ..................................
Byte-Werte formatieren ..........................................................
Umrechnung zwischen Binär- und Ganzzahlen ....................................
Mit dem Datum rechnen ........................................................
Das korrekte Alter bestimmen ....................................................
Zeitkonten zusammenzählen .....................................................
Zeitangaben runden .............................................................
Das Wochenende feststellen ......................................................
Feiertage ermitteln ..............................................................
Beginn von Sommer- und Winterzeit berechnen ..................................
Feststellen, ob es sich um ein Schaltjahr handelt ...................................
Reisekosten abrechnen ..........................................................
Die Zinsbelastung ausrechnen ....................................................
Den internen Zinsfuß berechnen .................................................
Die lineare Abschreibung ermitteln ...............................................
Mit Potenzen und Wurzeln rechnen ..............................................
Kaufmännisch runden ...........................................................
Die optimale Bestellmenge ermitteln ..............................................
Taschenrechner mit Formelparser entwickeln .....................................
Eigenständige Klassenmodule kennen lernen ......................................
Mit Objekten und Auflistungen experimentieren ..................................
Mit globalen Tempvariablen arbeiten .............................................
Schleifen mittels ESC abbrechen ..................................................
Ein einfaches Datenmakro programmieren ........................................
22
26
32
33
33
35
37
39
41
42
44
45
45
46
48
50
52
54
58
60
62
64
65
67
68
70
72
73
74
77
79
81
82
84
85
87
92
95
98
99
99
8
Inhaltsverzeichnis
R1.42
R1.43
R1.44
R1.45
R1.46
2
Steuerelemente und Formulare
R2.1
R2.2
R2.3
R2.4
R2.5
R2.6
R2.7
R2.8
R2.9
R2.10
R2.11
R2.12
R2.13
R2.14
R2.15
R2.16
R2.17
R2.18
R2.19
R2.20
R2.21
R2.22
R2.23
R2.24
R2.25
R2.26
R2.27
R2.28
R2.29
3
Ein Datenmakro mit Nachschlagefunktion erstellen ...............................
Mit einem benannten Datenmakro arbeiten .......................................
Mit VBA auf ein benanntes Datenmakro zugreifen ................................
Änderungen von Tabelleninhalten protokollieren .................................
Besonderheiten der 64-Bit Access-Version ........................................
.......................................................
115
Einen Blinkeffekt erzeugen .......................................................
Das Textfeld programmieren .....................................................
Textfeldeingaben mittels Eingabetaste ............................................
Wechselseitige Ein- und Ausgaben in ungebundene Textfelder .....................
Füllen eines ungebundenen Kombinationsfeldes ...................................
Füllen ungebundener Listenfelder ................................................
Daten mit Kombinations- bzw. Listenfeld verknüpfen .............................
Die Spaltensumme eines Listenfeldes bilden .......................................
Inhalt eines ungebundenen Listenfelds löschen ....................................
Daten farblich hervorheben ......................................................
Steuerelemente verschieben und anordnen ........................................
Automatischer Entwurf eines Steuerelemente-Arrays ..............................
Das Registersteuerelement für 1:n-Beziehungen nutzen ............................
Werte mit einem Spinbutton ändern .............................................
Einen Fortschrittsbalken erzeugen ................................................
Werte über ein selbstgebautes Balken-Steuerelement eingeben .....................
Ein eigenes Kontextmenü erstellen ...............................................
Das Formular sich selbst schließen lassen .........................................
Mit Formularkopien arbeiten ....................................................
Eigenschaften zur Formular-Klasse hinzufügen ....................................
Auf andere Formulare zugreifen ..................................................
Daten zwischen Formularen austauschen .........................................
Ein Unterformular programmieren ...............................................
Den Windows-Farbdialog verwenden .............................................
Den Windows-Schriftartendialog aufrufen ........................................
Tastaturbefehle an andere Programme senden .....................................
Ein einfaches Diagramm anzeigen ................................................
Bild-Ressourcen in die Datenbank einbetten und verwalten ........................
Ein zentrales Startformular entwerfen ............................................
116
117
118
120
122
124
128
132
134
134
136
138
141
146
148
150
152
155
156
159
161
163
165
168
170
173
174
177
180
ActiveX-Komponenten und Office-Objekte
R3.1
R3.2
R3.3
R3.4
R3.5
R3.6
R3.7
R3.8
R3.9
101
106
109
111
113
............................................
183
Eine Statusleiste programmieren .................................................
ImageList- und ListView-Steuerelement kennen lernen ............................
Eine Werkzeugleiste programmieren .............................................
TreeView-und ProgressBar-Steuerelement einsetzen ...............................
Das ListView-Steuerelement programmieren ......................................
Mittels Slider-Steuerelement navigieren ...........................................
Eine Symbolleiste programmieren ................................................
Ein Kontextmenü programmieren ................................................
Die integrierten Schaltflächensymbole kennen lernen ..............................
184
187
189
193
197
200
202
205
206
9
Inhaltsverzeichnis
4
DAO-Programmierung
R4.1
R4.2
R4.3
R4.4
R4.5
R4.6
R4.7
R4.8
R4.9
R4.10
R4.11
R4.12
R4.13
R4.14
5
209
Starteigenschaften per Code zuweisen ............................................
Mit Datenzugriffsobjekten arbeiten ...............................................
Datensätze in Tabellen oder Abfragen zählen ......................................
Mit einem geklonten Recordset arbeiten ..........................................
Den Datensatzzeiger bewegen ....................................................
Nach Datensätzen suchen ........................................................
In einer Tabelle suchen und ersetzen ..............................................
Einen zufälligen Datensatz auswählen .............................................
Indirekte Werte in eine Tabelle eingeben ..........................................
Das versehentliche Ändern von Daten verhindern .................................
Eine Tabelle zur Laufzeit generieren ..............................................
Eine Datenbank analysieren ......................................................
Mit den DAOs auf Anlagen zugreifen .............................................
Mit DAOs auf mehrwertige Felder zugreifen ......................................
210
214
218
220
224
229
232
234
235
237
239
241
245
248
ADO-Programmierung
R5.1
R5.2
R5.3
R5.4
R5.5
R5.6
R5.7
R5.8
R5.9
6
................................................................
................................................................
251
Mit ADO auf eine Access-Datenbank zugreifen ....................................
ADO-Zugriff auf eine passwortgeschützte Datenbank ..............................
Datensätze mittels SQL filtern ....................................................
Ungebundene ADO-Recordsets erzeugen .........................................
Ein ADO-Datenklassenmodul verwenden .........................................
Eine intelligente Eingabemaske unter ADO programmieren ........................
ADO-Recordsets in Reports einsetzen ............................................
Ein Access Projekt (*.adp) erstellen ...............................................
ADO-Datenbankzugriff auf CD/DVD ............................................
252
254
257
259
262
265
270
275
277
Datenbankverwaltung
R6.1
R6.2
R6.3
R6.4
R6.5
R6.6
R6.7
R6.8
R6.9
R6.10
R6.11
R6.12
R6.13
R6.14
R6.15
R6.16
R6.17
R6.18
R6.19
.................................................................
279
Die ADO-Versionsnummer ermitteln ............................................
Eine Access-Datenbank exklusiv öffnen ...........................................
Access-Datenbanken im Netzwerk einsetzen ......................................
Alle aktiven Connections anzeigen ................................................
Das Datenbankkennwort ändern .................................................
ADOX- und JRO-Libraries in Access einbinden ...................................
Eine Access 2007-Datenbank erstellen ............................................
Andere Datenbank-Formate erstellen .............................................
Eine Access-Tabelle erstellen .....................................................
Eine Spalte mit automatischen Zufallswerten erzeugen .............................
Ein Memofeld mit Archiv-Funktion erzeugen .....................................
Ein Rich-Text-Feld erstellen ......................................................
Ein Anlage-Feld erstellen und verwalten ..........................................
Ein Multivalue-Feld erstellen .....................................................
Einen Index definieren ...........................................................
Erstellen von Abfragen ...........................................................
Eine SQL-Pass-Through-Abfrage erstellen ........................................
Eine Access-Datenbank verschlüsseln .............................................
Externe Datenbanken einbinden .................................................
280
280
282
282
283
285
285
287
289
292
293
295
296
297
299
300
301
302
304
10
Inhaltsverzeichnis
R6.20
R6.21
R6.22
R6.23
R6.24
R6.25
R6.26
R6.27
R6.28
R6.29
R6.30
R6.31
R6.32
R6.33
R6.34
R6.35
R6.36
R6.37
7
Externe Verbindungen aktualisieren ..............................................
Externe Verbindungen löschen ...................................................
Access-Datenbanken reparieren/komprimieren ...................................
Testen, ob ein Datensatz gesperrt ist ..............................................
Testen, ob eine Tabelle existiert ..................................................
Eine Tabelle temporär sperren ...................................................
Abfragen über mehrere Datenbanken realisieren ..................................
Die Beziehungen zwischen den Tabellen analysieren ...............................
Erstellen einer ODBC-Verbindung ...............................................
Importieren von Textdaten ......................................................
Importieren/Exportieren von Daten ..............................................
Wichtige Datenbankeigenschaften ermitteln ......................................
Vorhandene Tabellen analysieren ................................................
Beschreibung von Datenbankfeldern abrufen ......................................
Tabellenverknüpfungen darstellen ................................................
Sichten/Abfragen analysieren .....................................................
Nutzer und Nutzergruppen in Access 2010 erstellen ...............................
Berechnete Spalten per Code erzeugen ...........................................
Microsoft SQL Server
R7.1
R7.2
R7.3
R7.4
R7.5
R7.6
R7.7
R7.8
R7.9
R7.10
R7.11
R7.12
R7.13
R7.14
R7.15
R7.16
R7.17
R7.18
R7.19
R7.20
R7.21
R7.22
R7.23
R7.24
R7.25
R7.26
R7.27
R7.28
306
307
307
310
310
311
312
312
314
316
318
319
322
324
325
326
328
329
..................................................................
331
SQL Server 2008 Express installieren ..............................................
Mit Access eine SQL Server-Datenbank erstellen ...................................
Netzwerkzugriff auf SQL Server Express aktivieren ................................
Anmeldeprobleme am SQL Server ................................................
Unterschiede Express-Version/Microsoft SQL Server ..............................
SQL Server programmieren ......................................................
Mit der Express-Version die Volltextsuche nutzen .................................
Connectionstring für integrierte Sicherheit ........................................
Connectionstring für Server-Sicherheit ...........................................
SQL Server-Version ermitteln ....................................................
SQLDMO einbinden und testen ..................................................
SQL Server Management Objects (SMO) verwenden ...............................
Variablen in T-SQL verwenden ...................................................
IF/ELSE in T-SQL verwenden ....................................................
CASE in T-SQL verwenden ......................................................
Schleifen in T-SQL verwenden ...................................................
GOTO in T-SQL verwenden .....................................................
Datenbanken mit den DMO erstellen .............................................
Datenbanken mit T-SQL erstellen ................................................
Datenbanken mit DMO löschen ..................................................
Alle Nutzer einer Datenbank ermitteln ............................................
Die aktiven Client-Prozesse ermitteln .............................................
Alle registrierten SQL Server ermitteln ............................................
Alle Datenbanken und Tabellen ermitteln .........................................
Mit einer Datenbankdatei verbinden ..............................................
Eine Tabelle mit SQL/DMO löschen ..............................................
Tabellen mit den DMO erzeugen .................................................
Tabellen erzeugen/verwalten mit T-SQL ..........................................
332
335
337
340
341
342
343
343
344
345
347
349
349
351
352
353
354
354
356
357
358
359
360
361
363
364
364
366
11
Inhaltsverzeichnis
R7.29
R7.30
R7.31
R7.32
R7.33
R7.34
R7.35
R7.36
R7.37
R7.38
R7.39
R7.40
R7.41
R7.42
R7.43
R7.44
R7.45
R7.46
R7.47
R7.48
R7.49
R7.50
R7.51
R7.52
R7.53
R7.54
R7.55
R7.56
R7.57
R7.58
R7.59
R7.60
R7.61
R7.62
R7.63
R7.64
R7.65
R7.66
R7.67
R7.68
R7.69
R7.70
R7.71
8
Temporäre Tabellen erzeugen ....................................................
Sichten (Views) mit T-SQL erstellen ..............................................
Sichten (Views) mit SQLDMO erstellen ...........................................
Parameter in Stored Procedures verwenden .......................................
Rückgabewert einer Stored Procedure auswerten ..................................
Stored Procedures mit Output-Parametern .......................................
Stored Procedure mit Return-Value ..............................................
Einen Trigger erzeugen und verwenden ...........................................
SQL Server-Fehler auslösen ......................................................
SQL Server-Fehler mit ADO auswerten ...........................................
Fehler auf dem SQL Server behandeln ............................................
@@ERROR wird nicht korrekt verarbeitet .........................................
Die Anzahl der Datensätze beschränken ...........................................
Platzhalterzeichen in T-SQL .....................................................
Leerzeichen entfernen ...........................................................
Teilstrings mit T-SQL erzeugen ..................................................
Ein Index lässt sich nicht löschen ................................................
Anzahl der Datensätze bestimmen ...............................................
Das Basic-IFF ersetzen ...........................................................
Mit Bedingungen Feldinhalte formatieren .........................................
Eine Abfrage mit Platzhaltern ist zu langsam ......................................
Groß-/Kleinschreibung berücksichtigen ..........................................
Die Daten einer Stored Procedure auf dem Server speichern ........................
Eine Datenbank zwischen Servern verschieben/kopieren ...........................
Eine Datenbank umbenennen ....................................................
Nach dem Löschen IDENTITY auf 0 setzen .......................................
Datenbankstruktur kopieren .....................................................
Eine Tabellenspalte umbenennen .................................................
Aktualisierungs- und Löschweitergaben realisieren ................................
Benutzer erzeugen ...............................................................
Benutzer löschen ................................................................
Rolle mit SQLDMO erzeugen ....................................................
Benutzer zu einer Rolle hinzufügen ...............................................
Rechte mit SQLDMO verwalten ..................................................
Änderungen in Tabellen protokollieren ...........................................
Daten aus verschiedenen Datenbanken anzeigen ..................................
SQL-Anweisungen debuggen .....................................................
SQLXML-Daten abfragen ........................................................
SQLXML-Daten mit Access abfragen .............................................
Einen Volltextindex erstellen .....................................................
Volltextabfragen realisieren ......................................................
Upgrading einer Access-Datenbank ...............................................
Eingebundene View kann nicht aktualisiert werden ................................
Dateien/Verzeichnisse
R8.1
R8.2
R8.3
367
368
369
370
371
372
373
374
375
376
378
380
380
381
382
382
383
383
384
385
386
386
387
387
388
389
390
391
392
392
393
394
395
395
396
397
398
399
403
406
409
411
414
.................................................................
417
Einen Verzeichnispfad anlegen ...................................................
Einen Verzeichnisdialog aufrufen .................................................
Die Anzeige langer Verzeichnispfade verkürzen ...................................
418
419
421
12
Inhaltsverzeichnis
R8.4
R8.5
R8.6
R8.7
R8.8
R8.9
R8.10
R8.11
R8.12
R8.13
R8.14
R8.15
R8.16
R8.17
R8.18
9
Das Datenbankverzeichnis ermitteln ..............................................
Den Pfad zur zugehörigen EXE-Datei ermitteln ...................................
Prüfen, ob eine Datei existiert ....................................................
Die Windows-Dateidialoge einbinden ............................................
Die Office-Dateidialoge verwenden ...............................................
Dateien rekursiv suchen .........................................................
Name, Pfad und Extension einer Datei ermitteln ..................................
Einen Temp-Dateinamen erzeugen ...............................................
Die Shellfunktionen für Dateioperationen nutzen .................................
Die verfügbaren Laufwerke feststellen .............................................
Den freien Festplattenspeicher ermitteln ..........................................
Seriennummer der Festplatte ermitteln ...........................................
Das Volume-Label lesen/schreiben ...............................................
Das Dateisystem bestimmen .....................................................
Den UNC-Namen eines Netzlaufwerks ermitteln ..................................
Drucker/Berichte
R9.1
R9.2
R9.3
R9.4
R9.5
R9.6
R9.7
R9.8
R9.9
R9.10
R9.11
R9.12
R9.13
R9.14
R9.15
R9.16
R9.17
R9.18
R9.19
R9.20
R9.21
R9.22
R9.23
R9.24
R9.25
R9.26
R9.27
R9.28
R9.29
R9.30
R9.31
422
423
425
427
432
433
436
438
440
444
446
448
449
451
452
......................................................................
455
Den Drucker-Zugriff realisieren ..................................................
Den aktuellen Drucker ermitteln .................................................
Die installierten Drucker ermitteln ...............................................
Den aktiven Drucker temporär wechseln ..........................................
Die eigene Druckerauswahl funktioniert nicht .....................................
Fehler beim Abbruch durch Anwender verhindern ................................
Informationen über den Drucker gewinnen .......................................
Speichern von Berichts-Optionen ................................................
Ein Kalenderblatt drucken .......................................................
Einzelne Zeilen farbig hinterlegen ................................................
Variable Zeilen farbig hinterlegen ................................................
Seitenzahlen unterdrücken oder verändern ........................................
Grafiksymbole optional einblenden ...............................................
Linke und rechte Seiten verwenden ...............................................
Ein Deckblatt erzeugen ..........................................................
Mehrere Berichte verketten ......................................................
Automatische Seitenumbrüche einfügen ..........................................
Komplette Seite einrahmen ......................................................
Grafikmethoden in Berichten verwenden .........................................
Direkte Druckausgabe per LPT1 ..................................................
Berichte zur Auswahl in einem Listenfeld anzeigen ................................
Alle Zeilen nummerieren ........................................................
Zwischensummen und Überträge berechnen ......................................
Berichte mit Datenfilter aufrufen .................................................
In einem Bericht rechnen und gruppieren .........................................
Berichte über mehrere Tabellen erzeugen .........................................
Grafiken zur Laufzeit erstellen ....................................................
Grafiken zur Laufzeit nachladen ..................................................
Keine leeren Berichte drucken ...................................................
Leerseiten/falsche Umbrüche vermeiden ..........................................
Berichtsvorschau mit Doppelseite öffnen .........................................
456
456
457
458
460
461
462
466
468
471
473
474
475
477
477
479
480
481
482
485
486
487
488
492
496
500
503
507
507
508
508
13
Inhaltsverzeichnis
R9.32
R9.33
R9.34
R9.35
R9.36
R9.37
R9.38
R9.39
R9.40
R9.41
R9.42
R9.43
10
Internet/Intranet
R10.1
R10.2
R10.3
R10.4
R10.5
R10.6
R10.7
R10.8
R10.9
R10.10
R10.11
R10.12
R10.13
R10.14
R10.15
R10.16
R10.17
R10.18
R10.19
R10.20
R10.21
R10.22
R10.23
R10.24
11
Text senkrecht ausgeben .........................................................
Leere Zeilen verhindern ..........................................................
Nur ein Datensatz pro Druckseite ausgeben .......................................
Einen Bericht als PDF-Datei exportieren ..........................................
Einen Bericht als RTF-Datei exportieren ..........................................
Rich-Text-Felder drucken ........................................................
Die Historie eines Memofeldes drucken ...........................................
Eine Liste der Anlagen drucken ...................................................
Berichte nachträglich filtern ......................................................
Ein Pivot-Diagramm drucken ....................................................
Detaildaten aus einem Bericht heraus anzeigen ....................................
Berichte in Formularen anzeigen .................................................
......................................................................
527
Einfache E-Mails automatisch generieren .........................................
Access-Objekte per E-Mail versenden .............................................
E-Mail-Versand mit Microsoft Outlook ...........................................
E-Mail-Versand über die Message-API ............................................
Eingabedaten per E-Mail sammeln ...............................................
Micosoft Internet-Explorer automatisieren ........................................
Microsoft Internet Explorer in die Oberfläche integrieren ..........................
Verwenden des Webbrowsersteuerelements .......................................
Feststellen, ob TCP/IP installiert ist ...............................................
Die IP-Adressen des Computers ermitteln ........................................
Eingegebene E-Mail-Adressen prüfen .............................................
Prüfen, ob eine Internet-Verbindung besteht ......................................
Dateien aus dem Internet laden ..................................................
Hyperlinks in Tabellen speichern .................................................
Hyperlinks analysieren ...........................................................
Hyperlinkfelder in Tabellen erstellen .............................................
Hyperlinks in Formularen/Berichten verwenden ..................................
Exportieren im HTML-Format ...................................................
HTML-Export mittels SQL ......................................................
Access-Tabellen auf den SharePoint-Server exportieren ............................
Listen vom SharePoint-Server einbinden/importieren .............................
Eine neue Webdatenbank erstellen ...............................................
Parameterübergabe an Abfragen in Webdatenbanken ..............................
Anonymen Zugriff auf SharePoint-Website ermöglichen ...........................
528
530
532
534
536
541
543
547
550
552
553
554
555
556
557
559
559
561
562
563
564
566
572
573
Programmschnittstellen
R11.1
R11.2
R11.3
R11.4
R11.5
R11.6
R11.7
R11.8
509
510
510
510
512
513
514
515
518
519
523
525
...............................................................
579
..............................................
580
581
583
587
589
590
594
597
Kopieren und Einfügen mit DoCmd
Ein Clipboard-Objekt programmieren ............................................
Fensterinhalt in die Zwischenablage kopieren .....................................
Word/Excel per OLE-Automation öffnen .........................................
Ein Word-Dokument per OLE öffnen ............................................
Word über OLE-Automation steuern .............................................
Wordformulare über OLE-Automation drucken ..................................
Microsoft Excel über OLE-Automation steuern ...................................
14
Inhaltsverzeichnis
R11.9
R11.10
R11.11
R11.12
R11.13
R11.14
12
Microsoft Excel-Export per OLE-Automation .....................................
OpenOffice.org Writer per OLE steuern ..........................................
Access-Bibliotheken erstellen und einbinden ......................................
Access-Bibliotheken schützen ....................................................
Ein Managed Add-In programmieren und einbinden ..............................
Programmieren von ActiveX-DLLs mit VB 2010 ..................................
Betriebssystem
R12.1
R12.2
R12.3
R12.4
R12.5
R12.6
R12.7
R12.8
R12.9
R12.10
R12.11
R12.12
R12.13
R12.14
R12.15
R12.16
R12.17
R12.18
R12.19
R12.20
R12.21
R12.22
R12.23
R12.24
R12.25
R12.26
R12.27
R12.28
R12.29
R12.30
R12.31
R12.32
R12.33
R12.34
R12.35
R12.36
R12.37
R12.38
R12.39
R12.40
600
602
607
610
611
620
........................................................................
631
Das Betriebssystem unterscheiden ................................................
Das Betriebssystem ermitteln (WMI) .............................................
Den Computernamen abfragen ..................................................
Das Windows-Verzeichnis bestimmen ............................................
Das Temp-Verzeichnis ermitteln .................................................
Die aktuelle Bildschirmauflösung bestimmen .....................................
Die aktuelle Farbtiefe der Grafikkarte bestimmen ..................................
Eine Klasse für den Registryzugriff erstellen .......................................
Auf die Registrierdatenbank zugreifen ............................................
Einfache Wave-Dateien wiedergeben .............................................
Sound-Dateien aufnehmen ......................................................
Testen, ob eine Soundkarte vorhanden ist .........................................
Video-Dateien wiedergeben ......................................................
Ein externes Programm ausführen ................................................
Ein externes Programm synchron ausführen ......................................
Verknüpfte Anwendungen ausführen .............................................
Eine Datei-Verknüpfung erstellen ................................................
Den Computer herunterfahren oder neu starten ...................................
Den Herunterfahren-Dialog anzeigen .............................................
Den Shell-About-Dialog anzeigen ................................................
Den Userlogin-Namen abfragen ..................................................
Den Windows-Lizenznehmer ermitteln ...........................................
Die aktuellen Font-Einstellungen ermitteln .......................................
Alle verfügbaren Schriftarten anzeigen ............................................
Eigene Schriftarten installieren und verwenden ....................................
Den aktuellen Grafikmodus anzeigen bzw. wechseln ...............................
Die Anzahl der Bildschirme bestimmen ...........................................
Den Bildschirmschoner aktivieren bzw. deaktivieren ..............................
Dem Desktop neue Farben zuweisen ..............................................
Die Desktop-Icons ein-/ausblenden ..............................................
Ein Datei-Verzeichnis im Explorer-Fenster öffnen .................................
Die Dokument-Liste löschen .....................................................
Eine Datei in die Dokument-Liste eintragen .......................................
Neue Programmgruppen erzeugen ...............................................
Eine gesperrte Access-Datenbank löschen .........................................
Die Access-Prozesspriorität ändern ...............................................
Den Systemstatus bestimmen ....................................................
Informationen über den Arbeitsspeicher abrufen ..................................
Windows in den Standby-Modus versetzen .......................................
Alle laufenden Anwendungen ermitteln ...........................................
632
634
635
636
638
639
641
642
649
652
653
655
656
657
659
661
663
665
669
670
671
672
674
676
678
679
683
684
685
687
688
689
690
691
694
696
697
699
701
702
15
Inhaltsverzeichnis
R12.41
R12.42
R12.43
R12.44
R12.45
R12.46
R12.47
R12.48
13
Die Taskbar ausblenden .........................................................
Den Papierkorb leeren ...........................................................
Den Windows Suchassistenten verwenden ........................................
Testen auf Administrator ........................................................
Nutzer und Gruppen des Systems ermitteln .......................................
Das Systemprotokoll anzeigen ....................................................
Das Windows-Systemprotokoll nutzen ...........................................
Das Datei-Eigenschaftenfenster anzeigen ..........................................
Sonstiges
R13.1
R13.2
R13.3
R13.4
R13.5
R13.6
R13.7
R13.8
R13.9
R13.10
R13.11
R13.12
R13.13
R13.14
R13.15
R13.16
R13.17
R13.18
R13.19
R13.20
R13.21
R13.22
R13.23
R13.24
R13.25
R13.26
R13.27
R13.28
R13.29
R13.30
R13.31
R13.32
R13.33
R13.34
R13.35
R13.36
703
704
705
706
707
709
710
713
..............................................................................
715
Mehr über die Access-Version erfahren ...........................................
Datenbankfenster/Navigationsbereich ausblenden .................................
Das Access-Hauptfenster ausblenden .............................................
Den Titel des Access-Fensters verändern ..........................................
Microsoft Access per VBA beenden ...............................................
Access neu starten/Datenbank neu laden ..........................................
Eigene Navigationskategorien erstellen ............................................
Mit Reference-Objekten arbeiten ................................................
Den aktuellen Datenbanknutzer ermitteln ........................................
Benutzerdefinierte Eigenschaften in Access einsetzen ..............................
Überlappende Fenster in Access 2010 einstellen ...................................
Das Access-Menüband verkleinern ...............................................
Das Access-Menüband verändern ................................................
Woher bekomme ich die Namen der Controls und Symbole .......................
Alle Hauptregisterkarten ausblenden .............................................
Einzelne Registerkarten ausblenden ...............................................
Einzelne Gruppen ausblenden ....................................................
Eigene Registerkarte, Gruppen und Schaltflächen einfügen .........................
Die Backstage-Ansicht programmieren ...........................................
Das Office-Menü für Access 2007 anpassen .......................................
Fehlermeldungen für eigene Menübanddefinitionen anzeigen ......................
Vorhandene Funktionen des Menübands ändern ..................................
Die Schnellzugriffsleiste programmieren ..........................................
Die Statusleiste programmieren ..................................................
Funktion aus dem Menüband ausführen ..........................................
Arbeiten mit dem Debugger ......................................................
Genaue Zeitmessungen durchführen .............................................
HTML in ANSI-Text umwandeln ................................................
Systemklänge verwenden ........................................................
Den eingebauten Fortschrittsbalken verwenden ...................................
Gespeicherte Im-/Exporte ermitteln und ausführen ................................
Zugriff aus Visual Basic/C# auf Access 2007/2010-Datenbanken ...................
Access Kommandozeilenparameter verwenden ....................................
Access-Optionen abrufen/setzen .................................................
VBA-Code beim Laden automatisch ausführen ....................................
Verteilen von Access-Anwendungen ..............................................
716
717
718
721
723
724
725
727
730
731
734
735
736
741
743
744
745
745
749
754
756
757
757
758
759
760
765
769
771
773
774
775
777
779
781
781
16
Inhaltsverzeichnis
A
Glossar
B
Wichtige Dateierweiterungen
C
Liste der wichtigsten SQL-Befehle
D
ANSI-Tabelle
E
Wichtige Tastaturcodes
................................................................................
.........................................................
787
793
.....................................................
795
..........................................................................
797
Stichwortverzeichnis
...............................................................
801
...................................................................
805
Einführung
Liebe Leserin und lieber Leser!
Mit dem Erscheinen von Microsoft Access 2010 musste auch unser Buch »Microsoft Office Access – Programmier-Rezepte« gründlich überarbeitet und ergänzt werden. Das Ergebnis liegt nun vor Ihnen.
Gemäß der Devise »Programmieren lernt man nur durch Beispiele« enthält es fast 400 Lernrezepte und
Problemlösungen zur VBA-Programmierung unter Access 2010.
HINWEIS
Es ist somit eine ideale Ergänzung für unseren ebenfalls bei Microsoft Press erschienenen umfassenden Titel
»Microsoft Access 2010-Programmierung – Das Handbuch«, ISBN 978-3-86645-459-0.
Die einzelnen Rezepte des Buchs sind in 13 Themengruppen übersichtlich angeordnet und wir haben uns
bemüht, sie mit möglichst treffsicheren Titeln auszustatten. Der Index sollte ein Übriges dazu beitragen,
schnell an die gewünschten Informationen zu kommen.
HINWEIS
Es soll nicht verschwiegen werden, dass heutzutage Internet-Suchmaschinen eine starke Konkurrenz zu einem
ausgesprochenen Rezeptebuch sind. Trotzdem hat ein solches Buch mehr denn je seine Berechtigung: Die ständig wachsende
Flut von ungefilterten guten und schlechten Lösungen aus dem Internet macht es notwendig, »die Spreu vom Weizen zu
trennen«.
Ein Buch für Einsteiger und für Profis
Das vorliegende Werk wurde von Praktikern für die Bedürfnisse der Praxis geschrieben und ist sowohl für
Einsteiger in die VBA-Programmierung als auch für Profis bestimmt1.
Sie finden hier ausgesprochene »Lernrezepte« die das Ziel verfolgen, den Newcomer mit den Besonderheiten der VBA-Entwicklungsumgebung und mit fundamentalen Visual Basic-Sprachelementen vertraut zu
machen. Es verzichtet zugunsten überschaubarer knapper Lösungen auf lange durchgehende Komplexbeispiele, die beim Lernenden oft nur Frust und Ermüdung aufkommen lassen.
Andererseits findet der Access-Profi hier Antworten auf Fragen, nach deren Lösung er in anderen Quellen
bislang vergeblich gesucht hat. Er findet eine Vielzahl von Rezepten, die die Grenzen von VBA überschreiten und direkt auf die Windows-API zugreifen. Auch der Arbeit mit ActiveX-Steuerelementen, dem
Microsoft SQL-Server (wobei Access die Rolle eines Front-Ends übernimmt) sowie dem Zugriff auf WebDatenbanken wird die gebührende Aufmerksamkeit zuteil.
Zu den meisten Rezepten gibt es ein Beispielformular als Benutzerschnittstelle, sodass man sofort eigene
Experimente durchführen kann, um zum Beispiel eine VBA-Funktion an die eigene Problemstellung anzupassen, oder um die Auswirkungen von Parameteränderungen zu testen.
1
Dem Access-Einsteiger empfehlen wir das im gleichen Verlag erschienene Buch von L. Hölscher »Microsoft Access 2010 – Das Handbuch«, um vor dem VBA-Einstieg zunächst die grundlegenden Arbeitsschritte beim Erstellen einfacher Access-Anwendungen
kennenzulernen.
18
Einführung
Codebeispiele
Zu jedem der 13 Kapitel gibt es separate Datenbanken, in welchen – mit Ausnahme weniger winziger Codeschnipsel – die Quelltexte der einzelnen Rezepte gespeichert sind und in der Regel über Testformulare ausprobiert werden können.
Die einzelnen Kapitel-Datenbanken können Sie auf folgende Weise aus dem Internet herunterladen:
■ Starten Sie Ihren Browser und öffnen Sie die Seite
www.microsoftpress.de/support.asp
■ Geben Sie die Titelnummer der ISBN zu diesem Buch in das untere Textfeld ein, dessen davor stehende
Ziffernfolge mit der Zahl 5 endet. Die Titelnummer lautet 098.
■ Klicken Sie auf Suchen. Nach kurzer Wartezeit erscheint das Suchergebnis.
■ Klicken Sie im Suchergebnis auf den angezeigten Link.
■ Klicken Sie auf den Link neben Downloads und speichern Sie die Datei auf Ihrem Computer. Wählen
Sie dabei direkt das Verzeichnis, in das Sie die jeweilige Beispieldatenbank installieren möchten.
Beim Testen der Beispiele – insbesondere derjenigen, die ActiveX-Komponenten benutzen – achten Sie auf
eventuell beigefügte Readme-Dateien, die auf Besonderheiten eingehen.
HINWEIS
Beachten Sie, dass eine größere Anzahl von Rezepten nur unter Access 2010 lauffähig ist (neue Features, wie
zum Beispiel Datenmakros, werden von den älteren Access-Versionen nicht unterstützt)!
Achtung – wichtige Hinweise!
Bereits seit Access 2007 wird VBA-Code standardmäßig als »unsicherer Code« eingestuft.
HINWEIS
Aufgrund der sehr restriktiven Sicherheitsanforderungen von Access 2010 und Windows 7/Vista wird es Ihnen
nicht gelingen, ohne entsprechende Anpassungen der Access 2010-Entwicklungsumgebung die Codebeispiele zum Laufen zu
bringen!
Falls ein Formular den VBA-Code nicht ausführt und stattdessen eine Sicherheitswarnung unterhalb des
Menübands erscheint, klicken Sie auf die Inhalt aktivieren-Schaltfläche.
Um die lästigen Sicherheitswarnungen generell zu verhindern, sollten Sie im Sicherheitscenter Ihr Datenbankverzeichnis als Vertrauenswürdigen Speicherort hinzufügen.
Zu den Autoren
Hinweise zum Buch und Leseranfragen können Sie über
www.doko-buch.de
direkt an die Autoren richten.
Dort finden Sie auch eventuelle Fehlerberichtigungen und ergänzende Beispiele.
Einführung
Danksagung
Danken möchten wir vor allem Frau Sandra Michel von Microsoft Press für die tatkräftige Unterstützung
beim Zustandekommen des Werkes.
Wir hoffen, Ihnen mit unserem »Kochbuch« ein brauchbares Hilfsmittel für das Erlernen von VBA und für
die Entwicklung anspruchsvoller Access-Datenbankapplikationen an die Hand gegeben zu haben, das es
verdient, seinen ständigen Platz nicht im Regal, sondern griffbereit neben dem Computer einzunehmen.
Walter Doberenz und Thomas Gewinnus
&ALLS3IEDIESES"UCHALSE"OOKERWORBENHABENKšNNEN3IEDIE"EGLEITDATEIENUNTER
www.microsoft-press.de/support.asp?s110=098ODERmsp.oreilly.de/support/9783866450981/610HERUNTERLADEN
1
VBA-/Makro-Programmierung
Kapitel 1
VBA-/Makro-Programmierung
In diesem Kapitel:
Makros versus Visual Basic
Allgemeine Sprachelemente
Zeichenkettenfunktionen
Datum und Zeit
Kaufmännische Berechnungen
Mathematische Anwendungen
Nutzerdefinierte Klassen
Objekte und Auflistungen
Datenmakros
21
22
Kapitel 1:
VBA-/Makro-Programmierung
R1.1 Makros konventionell programmieren
Aufgabe
Sie möchten ein Makro auf konventionelle Weise erstellen, also ohne VBA-Kenntnisse.
Lösung
Jeder, der bereits unter Microsoft Access individuelle Formulare entwickelt hat, kennt die drei Etappen des
Entwurfsprozesses:
■ Visuelle Gestaltung der Bedienoberfläche
■ Zuweisen der Steuerelemente-Eigenschaften
■ Verknüpfen der Steuerelemente mit Ereignissen
Die dritte Etappe kann mittels Programmierung von Makros bewältigt werden, wozu der Makro-Generator
benutzt wird.
Im folgenden Beispiel werden wir ein Eingabeformular für die Tabelle Personal unserer Beispieldatenbank
erstellen, wobei in der dritten Etappe zwei Makros zum Einsatz kommen.
Vorbereitungen
Öffnen Sie die Datenbank BuchDB und fügen Sie zur Tabelle Personal die beiden Felder Geburtstag (Datum/
Uhrzeit) und Monatsgehalt (Währung) hinzu.
Erste Etappe: Visuelle Formulargestaltung
Als Bedienoberfläche benötigen wir ein Formular mit sechs Textfeldern, mehreren Bezeichnungsfeldern und
einer Befehlsschaltfläche. Zwar verfügt Access 2010 auch über die Möglichkeit, für eine gegebene Tabelle
automatisch eine komplette Eingabemaske generieren zu lassen, da wir aber nur die Felder Nachname, Vorname, Geburtstag und Monatsgehalt benötigen und zusätzlich zwei berechnete Felder (Alter und Jahresgehalt) dem Formular hinzufügen wollen, verzichten wir auf diesen Komfort und gestalten unsere Formularoberfläche in »Handarbeit«.
Abbildung 1.1 Entwurfsansicht des Formulars
23
R1.1 Makros konventionell programmieren
Der Access-Kundige wird keinerlei Mühe mit dem »Zusammenschieben« des Formulars entsprechend der
abgebildeten Entwurfsansicht haben.
Die einzelnen Steuerelemente werden der Befehlsgruppe Steuerelemente (Hauptregisterkarte Entwurf) entnommen, mit der Maus an der gewünschten Stelle im Detailbereich des Formulars platziert und gegebenenfalls in ihrer Größe verändert.
Abbildung 1.2 Hier wählen Sie die benötigten Steuerelemente aus
Zweite Etappe: Objekteigenschaften zuweisen
Im Eigenschaftenblatt (F4-Taste oder Symbol Eigenschaftenblatt auf der Hauptregisterkarte Entwurf) stellen
Sie die folgenden (von den Standardeinstellungen abweichenden) Werte für das Formular, die Textfelder
und die Befehlsschaltfläche ein:
Steuerelement-Name
Eigenschaft
Wert
Formular1
Datensatzquelle
Beschriftung
Bildlaufleisten
Datensatzmarkierer
Trennlinien
Personal
Makros konventionell programmieren
Nein
Nein
Nein
Text0
Text1
Text2
Steuerelementinhalt
Steuerelementinhalt
Steuerelementinhalt
Format
Steuerelementinhalt
Format
Nachname
Vorname
Geburtstag
Datum, lang
Monatsgehalt
Währung
Text4
Steuerelementinhalt
=Jahr(Datum()) - Jahr([Geburtstag])
Text5
Steuerelementinhalt
Format
=12*[Monatsgehalt]
Währung
Befehl0
Beschriftung
Beenden
Text3
Tabelle 1.1 Eigenschaften der Steuerelemente
HINWEIS
Normalerweise wird die Name-Eigenschaft der Steuerelemente automatisch beim Entwurf vergeben, wobei
allerdings die Reihenfolge der Nummerierung unregelmäßig ist. Wir haben deshalb wegen besserer Übersichtlichkeit
nachträglich die Name-Eigenschaft der Textfelder und der Befehlsschaltfläche entsprechend obiger Tabelle umbenannt.
24
Kapitel 1:
VBA-/Makro-Programmierung
Dritte Etappe: Ereignisse besetzen (Makros programmieren)
Es soll in unserem Beispiel dann eine Warnung ausgegeben werden, wenn für Personen das Jahresgehalt
mehr als 50.000 Euro beträgt:
■ Klicken Sie mit der rechten Maustaste auf das Textfeld Monatsgehalt
■ Im Kontextmenü wählen Sie den Eintrag Eigenschaften
■ Im Eigenschaftenfenster wählen Sie die Registerkarte Ereignis
■ Klicken Sie auf die Zeile des Ereignisses Vor Aktualisierung und anschließend auf die Schaltfläche mit
den drei Pünktchen
Abbildung 1.3 Auswahl des Ereignisses
■ Das sich jetzt öffnende Dialogfeld Generator auswählen ist charakteristisch für die »Wegegabelung«, an
der jeder Access-Programmierer Farbe bekennen muss: »Will ich weiter wie bisher mit konventionellen
Makros und Ausdrücken arbeiten, oder will ich mit VBA in die höher gelegenen Regionen der CodeProgrammierung vorstoßen?«. Wir entscheiden uns für die Option Makro-Generator.
Abbildung 1.4 Wählen Sie in diesem Dialogfeld den Makro-Generator aus
■ Nun müssen Sie zunächst im Aktionskatalog des sich öffnenden Makro-Entwurfsfensters unter dem
Knoten Programmablauf die Wenn-Bedingung auswählen und spezifizieren (siehe Abbildung 1.5).
25
R1.1 Makros konventionell programmieren
Abbildung 1.5 Tragen Sie die Wenn-Bedingung im Makroentwurfsfenster ein
■ Dann öffnen Sie das darunter liegende Kombinationsfeld Neue Aktion hinzufügen, wählen die Aktion
Meldungsfeld aus und tragen den Meldungstext ein (siehe Abbildung 1.6).
Abbildung 1.6 Tragen Sie hier den Meldungstext ein
■ Schließen Sie die Makro-Entwurfsansicht und speichern Sie dabei alle vorgenommenen Änderungen ab.
■ Eine »Kleinigkeit« fehlt noch: Nach dem Klick auf die Beenden-Befehlsschaltfläche soll das Formular ge-
schlossen werden. Wir erstellen dazu ein weiteres Makro, welches dem Ereignis Beim Klicken der
Befehlsschaltfläche die Aktion FensterSchließen zuordnet.
Test
Öffnen Sie das Formular (mittels Doppelklick auf das Objekt Formular1 im Navigationsbereich) und blättern Sie durch die Datensätze.
26
Kapitel 1:
VBA-/Makro-Programmierung
Abbildung 1.7 Laufzeitansicht
HINWEIS
Die Warnung »Gehalt überprüfen« erscheint nicht beim normalen Durchblättern (da werden die Datensätze
nur angezeigt und nicht aktualisiert), sondern nur unmittelbar nachdem Sie eine neue Person mit zu hohem Gehalt eingefügt
haben bzw. das Gehalt einer vorhandenen Person so verändert haben, dass das vorgegebene Jahreslimit überschritten wurde.
Bemerkungen
■ Um das Eigenschaftenblatt für ein bestimmtes Objekt (Formular, Textfeld etc.) zu öffnen, müssen Sie
das Objekt erst aktivieren (mit der Maus anklicken). Ansonsten hilft das mit der rechten Maustaste zu
öffnende Kontextmenü Eigenschaften.
■ Die linken vier Textfelder des Formulars wurden direkt an die entsprechenden Felder der Personen-
Tabelle »angebunden«, während die beiden rechten Textfelder die Resultate von Berechnungen beinhalten. Die dazu notwendigen Formeln können direkt oder über den Ausdrucks-Editor eingegeben
werden.
■ Das Alter einer Person wird in unserem Beispiel nur vereinfacht berechnet (Differenz aus aktuellem Jahr
und Geburtsjahr) und ist nur dann exakt, wenn die Person am aktuellen Datum bereits Geburtstag hatte
(ansonsten wird ein Jahr zu viel ermittelt). Eine exakte Berechnungsmethode zeigt R1.22.
■ Da die klassischen Makros an die Benutzerschnittstelle (UI bzw. User Interface) gekoppelt sind, werden
sie (im Unterschied zu den erst ab Access 2010 eingeführten Datenmakros) auch als »UI-Makros« bezeichnet.
R1.2 Ein erstes VBA-Programm schreiben
Aufgabe
Sie möchten die Eigenschaften der Steuerelemente nicht im Eigenschaftenfenster zuweisen, sondern erst zur
Laufzeit festlegen. Die Steuerelemente-Ereignisse wollen Sie nicht durch konventionell programmierte
UI-Makros, sondern durch VBA-Code behandeln.
27
R1.2 Ein erstes VBA-Programm schreiben
Lösung
Weisen Sie die Eigenschaften der Steuerelemente im Load-Ereignis des Formulars zu. Verwenden Sie dafür
die englischen Bezeichner, die nun den Platz der lokalisierten deutschen Schlüsselwörter einnehmen.
Benutzen Sie statt des Makro-Generators den Code-Generator und behandeln Sie das gewünschte Ereignis
durch VBA-Anweisungen.
Die konkrete Vorgehensweise demonstrieren wir, indem wir mit VBA-Code das gleiche Problem wie im
Rezept R1.1 lösen.
Erste Etappe: Visueller Entwurf der Benutzeroberfläche
Den Formularentwurf nehmen Sie bitte genauso wie im Rezept R1.1 vor, kümmern sich aber im Folgenden
nicht weiter um das Eigenschaftenblatt und um das »Anbinden« der Textfelder an die Tabelle, denn all dies
wollen wir nun mit VBA erledigen. Haben Sie den Detailbereich mit allen notwendigen Steuerelementen
bestückt, sollten Sie im Eigenschaftenblatt lediglich die Name-Zuweisungen (Text0, Text1 etc.) kontrollieren und gegebenenfalls ändern.
Zweite Etappe: Zuweisen der Steuerelemente-Eigenschaften
Öffnen Sie den VBA-Editor mittels F7-Taste oder durch Klick auf das Symbol Code anzeigen
in der Befehlsgruppe Tools der Hauptregisterkarte Entwurf).
(ganz rechts
HINWEIS
Anstatt über die Hauptregisterkarte Entwurf können Sie den VBA-Editor auch über die Befehlsgruppe Makro
der Hauptregisterkarte Datenbanktools erreichen (Alt+F11).
Abbildung 1.8 Die Befehlsgruppe Makro
Abbildung 1.9 Der (noch leere) VBA-Editor
Bereits vorhanden sollten die beiden folgenden Anweisungen zu Beginn jedes Codemoduls sein. Ihre
Bedeutung soll kurz erklärt werden:
Option Compare Database
Der Zeichenkettenvergleich wird durch die Gebietskennung der Datenbank
bestimmt
Option Explicit
Alle Variablen müssen vor ihrer Verwendung deklariert werden
28
Kapitel 1:
VBA-/Makro-Programmierung
HINWEIS
Falls Option Explicit fehlt, ergänzen Sie diese Anweisung zunächst per Hand. Damit das später automatisch
passiert, öffnen Sie (bei geöffnetem Codefenster) über das Menü Extras/Optionen die Registerkarte Editor und setzen das
Häkchen bei Variablendeklaration erforderlich.
Abbildung 1.10 Einstellung für Option Explicit
Öffnen Sie nun das linke obere Listenfeld im VBA-Editor. Sie entdecken eine Auflistung aller Objekte bzw.
Steuerelemente, die für die Programmierung des Formulars zur Verfügung stehen.
Abbildung 1.11 VBA-Editor bei aufgeklapptem
Objektselektor
Wählen Sie nun das Objekt Form aus. Automatisch erscheint der Rahmencode der Standard-Ereignisbehandlungsroutine für das Load-Event (entspricht dem Ereignis Beim Laden).
HINWEIS
Der Load-Event-Handler wird meist dazu verwendet, um beliebige Anfangswertzuweisungen (Initialisierungen)
durchzuführen, da das Load-Ereignis in der Regel nur einmal (und zwar beim Öffnen des Formulars) ausgelöst wird.
29
R1.2 Ein erstes VBA-Programm schreiben
Abbildung 1.12 Der (noch) leere Event-Handler
Tippen Sie folgenden Code ein, die durch Apostroph (') eingeleiteten Textpassagen sind Kommentare, sie
haben für die Programmausführung keinerlei Bedeutung und dienen lediglich dem Programmierer zur
Erläuterung:
Private Sub Form_Load()
' wird beim Laden des Formulars ausgeführt
Me.Caption = "Einführungsbeispiel in VBA" ' Beschriftung
Me.RecordSource = "Personen"
' Datensatzquelle
Me.ScrollBars = 0
' keine Bildlaufleisten
Me.RecordSelectors = False
' kein Datensatzmarkierer
Me.DividingLines = False
' keine Trennlinien
Text0.ControlSource = "Nachname"
' Steuerelementinhalt
Text1.ControlSource = "Vorname"
' dto.
Text2.ControlSource = "Geburtstag"
' dto.
Text2.Format = "dd/mmm/yyyy"
' Format-Eigenschaft für Datumsanzeige
Text3.ControlSource = "Monatsgehalt"
' Steuerelementinhalt
Text3.Format = "Currency"
' Format-Eigenschaft für Währungsanzeige
Text4.ControlSource = "=Year(Date())-Year([Geburtstag])"
' berechneter Steuerelementinhalt
Text5.ControlSource = "=12*[Monatsgehalt]"
' berechneter Steuerelementinhalt
Text5.Format = "Currency"
' Format-Eigenschaft für Währungsanzeige
End Sub
Wie Sie erkennen können, haben wir soeben alle Eigenschaften, die bei der herkömmlichen Makro-Programmiermethode noch direkt im Eigenschaftenblatt gesetzt wurden, mittels VBA-Code zugewiesen. Dabei
dient der Punkt (.) als Separator zwischen Objekt und Eigenschaft. Wie Sie sehen, sind hier nur noch die
englischen Bezeichner erlaubt.
HINWEIS
Der Objektbezeichner Me steht stellvertretend für das aktuelle Form-Objekt.
Dritte Etappe: Besetzen der Ereignisse
Wenn der konventionelle Access-Programmierer von der »Zuweisung von Ereigniseigenschaften« spricht
(bekanntlich sind diese im Eigenschaftenblatt aufgeführt), redet der VBA-Kundige stattdessen vom »Programmieren einer Ereignisbehandlungsroutine« bzw. der »Besetzung eines Event-Handlers«.
Bereits in der zweiten Etappe haben wir die Starteigenschaften im Load-Event-Handler zugewiesen. Ähnlich
ist die Vorgehensweise bei den folgenden zwei Event-Handlern (Reihenfolge ohne Bedeutung):
Um Monatsgehälter vor ihrer Übernahme in die Datenbank zu überprüfen, werten Sie das BeforeUpdateEvent aus (entspricht Vor Aktualisierung-Ereignis). Dazu wählen Sie zuerst im Objektselektor (Klappbox
oben links) das Steuerelement Text3 aus und anschließend in dem rechts daneben befindlichen EreignisseSelektor das BeforeUpdate-Ereignis.
Herunterladen