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"OOKERWORBENHABENKNNEN3IEDIE"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.