E-Book, Deutsch, 803 Seiten
Reihe: Rheinwerk Computing
Held VBA mit Access
4. Auflage 2023
ISBN: 978-3-8362-9303-7
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das umfassende Handbuch
E-Book, Deutsch, 803 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-8362-9303-7
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Access-Datenbanken mit VBA gezielt auf Ihre Anforderungen hin optimieren – das ist das Ziel dieses Buches von Erfolgsautor Bernd Held, einem der bekanntesten deutschsprachigen VBA-Spezialisten. Nach einer grundlegenden Einführung in die Programmierung mit VBA lernen Sie die zentralen Objekte wie Tabellen und Abfragen intensiv kennen und erfahren, wie Sie aus Access auf Excel oder Word zugreifen. Außerdem profitieren Sie von der umfassenden Behandlung aller relevanten Sicherheitstechniken , mit denen Sie Datenbanken und Daten schützen. Damit Ihre Datenbanken intuitiv benutzbar sind und als eigenständige Datenbankanwendungen funktionieren, widmet sich ein eigener Teil der Programmierung von Benutzeroberflächen. Ein Troubleshooting-Kapitel und über 600 geprüfte Makros zum Download runden das Angebot ab. Geeignet für Access 2021, Access in Microsoft 365 sowie alle Vorgängerversionen bis Access 2010 .
- Grundlagen und fortgeschrittene VBA-Programmierung
- Tabellen, Fragen und Formulare; mit SQL-Integration
- Sofort einsetzbare Makro-Lösungen und Praxisbeispiele
»Ein gelungener Mix aus Nachschlagewerk und Praxis-Beispielen. Sehr gut!« – dotnetpro zur Vorauflage
Aus dem Inhalt:
- Grundsätzliches zur Programmierung
- Variablen, Konstanten und Datentypen
- Die wichtigsten Sprachelemente in Access
- Ein Streifzug in die Welt der Objekte
- Tabellen programmieren
- Abfragen programmieren
- Programmierung von Dialogen, Steuerelementen und Formularen
- Berichte erstellen und programmieren
- Ereignisse in Access programmieren
- Access im Zusammenspiel mit Office
- API-Funktionen einsetzen
- Datenbanken und Quellcode schützen
- VBE-Programmierung in Access
- Anwendungen optimieren und reparieren
- Access und das Internet
- Access 2016/2019/2021-Ribbons programmieren
- FAQ für Access-Entwickler
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 21
1. Grundsätzliches zur Programmierung ... 25
1.1 ... Wie gehe ich von Anfang an richtig vor? ... 26
1.2 ... Die Entwicklungsumgebung von Access ... 28
1.3 ... Hilfsmittel für die Programmierung ... 33
1.4 ... Die Fenster und die Testumgebung ... 42
1.5 ... Weitere Einstellungen ... 49
2. Variablen, Konstanten und Datentypen ... 53
2.1 ... Regeln für die Syntax von Variablen ... 54
2.2 ... Variablen am Beginn der Prozedur deklarieren ... 54
2.3 ... Die verschiedenen Variablentypen ... 55
2.4 ... Variablendeklarationen erzwingen ... 57
2.5 ... Die wichtigsten Variablentypen ... 58
2.6 ... Noch kürzere Deklaration von Variablen ... 60
2.7 ... Die Reddick-Namenskonvention ... 60
2.8 ... Variablendeklaration mit »DefType« ... 62
2.9 ... Aufzählungstypen (»Enum«-Anweisung) ... 63
2.10 ... Konstanten verwenden ... 64
2.11 ... Systemkonstanten einsetzen ... 65
3. Die wichtigsten Sprachelemente in Access ... 85
3.1 ... Prozeduren ... 85
3.2 ... Verzweigungen/Bedingungen ... 96
3.3 ... Die Anweisung »Select Case« für mehr Übersicht ... 103
3.4 ... Schleifen in Access einsetzen ... 106
3.5 ... »With«-Anweisungen ... 119
3.6 ... VBA-Funktionen einsetzen ... 120
3.7 ... Umwandlungsfunktionen ... 153
3.8 ... Die »Is«-Funktionen in VBA ... 160
3.9 ... Operatoren ... 178
3.10 ... Eigene Funktionen schreiben ... 182
4. Ein Streifzug in die Welt der Objekte ... 201
4.1 ... Das »Application«-Objekt ... 201
4.2 ... Das Objekt »AccessObject« ... 209
4.3 ... Das Objekt »CodeData« ... 213
4.4 ... Das Objekt »DoCmd« ... 214
4.5 ... Integrierte Dialoge einsetzen ... 221
4.6 ... Das Objekt »FileSystemObject« ... 228
5. Tabellen programmieren ... 243
5.1 ... Tabellen bearbeiten mit »DoCmd« ... 244
5.2 ... Tabellen mit ADO programmieren ... 253
5.3 ... SQL-Anweisungen ... 257
5.4 ... Tabellenstrukturen mit ADOX ermitteln ... 289
5.5 ... Datenbanken suchen und dokumentieren ... 299
6. Abfragen programmieren ... 303
6.1 ... Abfragetypen ... 303
6.2 ... Abfragen durchführen ... 305
6.3 ... Abfragen mit SQL generieren ... 307
6.4 ... Aktualisierungsabfrage -- Artikelnamen ändern ... 307
6.5 ... Anfügeabfrage -- Mitarbeiter hinzufügen ... 310
6.6 ... Löschabfrage ausführen ... 312
6.7 ... Tabellenerstellungsabfrage durchführen ... 316
6.8 ... Datendefinitionsabfragen durchführen ... 318
6.9 ... Daten zusammenführen ... 327
6.10 ... Abfragen mit ADO programmieren ... 330
7. Programmierung von Dialogen, Steuerelementen und Formularen ... 341
7.1 ... Das Meldungsfeld »MsgBox« ... 342
7.2 ... Die Eingabemaske »InputBox« ... 346
7.3 ... Formulare erstellen ... 349
8. Berichte erstellen und programmieren ... 441
8.1 ... Berichtsarten in Access ... 441
8.2 ... Der Berichtsaufbau ... 442
8.3 ... Berichte entwerfen ... 443
8.4 ... Berichte bearbeiten mit »DoCmd« ... 444
8.5 ... Berichte formatieren ... 451
8.6 ... Berichte identifizieren ... 457
8.7 ... Berichte erstellen ... 464
9. Ereignisse in Access programmieren ... 483
9.1 ... Das Ereignis »Form_Open« ... 484
9.2 ... Das Ereignis »Form_Close« ... 487
9.3 ... Das Ereignis »Form_Load« ... 490
9.4 ... Das Ereignis »Form_Current« ... 492
9.5 ... Das Ereignis »Form_AfterInsert« ... 496
9.6 ... Das Ereignis »Form_BeforeInsert« ... 499
9.7 ... Das Ereignis »Form_BeforeUpdate« ... 502
9.8 ... Das Ereignis »Form_AfterUpdate« ... 508
9.9 ... Das Ereignis »Form_Delete« ... 508
9.10 ... Das Ereignis »Form_Dirty« ... 511
9.11 ... Das Ereignis »BeforeDelConfirm« ... 512
9.12 ... Das Ereignis »Form_AfterDelConfirm« ... 513
9.13 ... Das Ereignis »Form_Activate« ... 514
9.14 ... Das Ereignis »Form_Deactivate« ... 517
9.15 ... Das Ereignis »Form_Resize« ... 517
9.16 ... Das Ereignis »Form_DblClick« ... 519
9.17 ... Das Ereignis »Click« ... 523
9.18 ... Die Ereignisse »MouseDown« und »MouseUp« ... 524
9.19 ... Das Ereignis »MouseMove« ... 530
9.20 ... Das Ereignis »Schaltfläche_Click« ... 532
9.21 ... Die Ereignisse »GotFocus« und »LostFocus« ... 532
9.22 ... Die »Key«-Ereignisse ... 533
9.23 ... Das Ereignis »Steuerelement_BeforeUpdate« ... 537
9.24 ... Das Ereignis »Steuerelement_Enter« ... 543
9.25 ... Das Ereignis »Steuerelement_Exit« ... 545
9.26 ... Die Reihenfolge der Ereignisse ... 546
10. Access im Zusammenspiel mit Office ... 549
10.1 ... Textdateien im Zugriff von Access ... 550
10.2 ... Access im Zusammenspiel mit Word ... 564
10.3 ... Outlook und Access ... 574
10.4 ... Access im Duett mit Excel ... 596
11. API-Funktionen einsetzen ... 627
11.1 ... Das CD-ROM-Laufwerk ermitteln ... 628
11.2 ... Den Namen des Anwenders ermitteln ... 631
11.3 ... Das CD-ROM-Laufwerk bedienen ... 632
11.4 ... Die Bildschirmauflösung ermitteln (nur 32 Bit) ... 632
11.5 ... Ist ein externes Programm gestartet? ... 633
11.6 ... Ein externes Programm aufrufen ... 634
11.7 ... Wie lange läuft ein externes Programm (nur 32 Bit)? ... 634
11.8 ... Access schlafen schicken (32/64 Bit) ... 636
11.9 ... Verzeichnisse erstellen ... 637
11.10 ... Verzeichnis löschen ... 638
11.11 ... Verzeichnisbaum anzeigen und auswerten (nur 32 Bit) ... 638
11.12 ... Die Windows-Version ermitteln ... 639
11.13 ... Windows-Verzeichnis ermitteln (nur 32 Bit) ... 641
11.14 ... Windows-Systemverzeichnis ermitteln (nur 32 Bit) ... 641
11.15 ... Das temporäre Verzeichnis ermitteln (nur 32 Bit) ... 642
11.16 ... Das aktuelle Verzeichnis ermitteln (nur 32 Bit) ... 643
11.17 ... Windows-Infobildschirm anzeigen ... 643
11.18 ... Access-Verzeichnis ermitteln ... 644
11.19 ... Standardverzeichnis festlegen (nur 32 Bit) ... 644
11.20 ... Dateityp und Anwendung ermitteln ... 645
11.21 ... Kurze Pfadnamen ermitteln (nur 32 Bit) ... 646
11.22 ... Den Computernamen ermitteln ... 647
11.23 ... Texte mit API-Funktionen konvertieren ... 647
11.24 ... Die Zwischenablage löschen ... 648
11.25 ... Soundkarte checken ... 649
11.26 ... Sounds per API-Funktion ausgeben (nur 32 Bit) ... 649
11.27 ... PC piepsen lassen ... 649
11.28 ... Tasten abfangen (nur 32 Bit) ... 650
11.29 ... Dateien suchen ... 651
11.30 ... Dateiinformationen auslesen ... 652
11.31 ... Ist die Internetverbindung aktiv? ... 654
11.32 ... Cursorposition in Pixeln angeben (nur 32 Bit) ... 655
12. Datenbanken und Quellcode schützen und pflegen ... 661
12.1 ... Ihre Access-Lösung mithilfe von Startparametern absichern ... 661
12.2 ... Eine ACCDE-Datenbank erstellen ... 663
12.3 ... Eine Datenbank über ein Kennwort schützen ... 663
12.4 ... Quellcode schützen ... 670
12.5 ... Eine Datenbank komprimieren und reparieren ... 671
13. VBE-Programmierung in Access ... 675
13.1 ... Die VBE-Bibliothek einbinden ... 676
13.2 ... Weitere Bibliotheken einbinden oder entfernen ... 678
13.3 ... Fehlerhafte Verweise ermitteln ... 680
13.4 ... In den VBE springen ... 681
13.5 ... Objektbibliotheken auslesen ... 681
13.6 ... Neue Module einfügen ... 682
13.7 ... Modul(e) löschen ... 683
13.8 ... Prozedur(en) löschen ... 684
13.9 ... Einzelne Texte oder Befehle im Quellcode finden ... 686
13.10 ... Module mit Quellcode versorgen (Import) ... 689
13.11 ... Prozeduren sichern (Export) ... 692
13.12 ... Module drucken ... 693
13.13 ... »Lines Of Code« ermitteln ... 695
13.14 ... Identifikation von VB-Komponenten ... 696
13.15 ... Prozeduren auflisten ... 697
13.16 ... Eine eigene VBA-Datenbank anlegen ... 701
14. Anwendungen optimieren ... 707
14.1 ... Die automatische Leistungsanalyse ... 707
14.2 ... Datenbanken und Quellcode dokumentieren ... 709
14.3 ... Tabellen optimal anlegen ... 711
14.4 ... Die richtigen Befehle ... 712
15. Access und das Internet ... 717
15.1 ... E-Mail verschicken ... 717
15.2 ... Tabellen in Internetformate transferieren ... 738
16. Ribbons programmieren ... 741
16.1 ... Programmierung über ein XML-Markup ... 742
16.2 ... Weitere wichtige Quellen und Hilfen ... 748
17. FAQ für Access-Entwickler ... 751
17.1 ... Wie hänge ich einer Tabelle ein Feld an? ... 752
17.2 ... Wie verhindere ich, dass ein Formular geschlossen wird? ... 753
17.3 ... Wie frage ich alle Tabellen einer geschlossenen Datenbank ab? ... 754
17.4 ... Wie lege ich in einem bestimmten Verzeichnis eine neue Datenbank automatisch an? ... 756
17.5 ... Wie verlinke ich eine Tabelle aus einer anderen Datenbank? ... 758
17.6 ... Wie normiere ich Telefonnummern in Tabellen? ... 759
17.7 ... Wie dokumentiere ich eine komplette Datenbank? ... 761
17.8 ... Wie prüfe ich, ob eine bestimmte Tabelle existiert? ... 762
17.9 ... Wie prüfe ich, ob ein bestimmtes Feld in einer Tabelle angelegt ist? ... 764
17.10 ... Wie führe ich eine SQL-Abfrage auf eine andere Datenbank aus? ... 765
17.11 ... Wie ermittle ich alle verfügbaren Drucker? ... 766
17.12 ... Wie schreibe ich bestimmte Feldinhalte einer Tabelle in eine Textdatei? ... 767
17.13 ... Wie transferiere ich eine Access-Tabelle nach Word? ... 769
17.14 ... Wie lege ich eine Parameterabfrage automatisch an? ... 772
17.15 ... Wie greife ich auf Tabelleneigenschaften einer Datenbank zu? ... 773
17.16 ... Wie frage ich die beiden Extremwerte einer Spalte in einer Tabelle ab? ... 774
17.17 ... Wie führe ich eine Durchschnittsberechnung durch? ... 776
17.18 ... Wie erstelle ich eine Unikatliste? ... 777
17.19 ... Wie ermittle ich die Gesamtsumme für ein Tabellenfeld? ... 779
17.20 ... Wie führe ich eine bedingte Summierung durch? ... 780
17.21 ... Wie lese ich über eine ID den dazugehörigen Lieferanten aus? ... 781
Index ... 783
1.2 Die Entwicklungsumgebung von Access
Wie bereits erwähnt, gelangen Sie über die Tastenkombination (Alt)+(F11) in die Entwicklungsumgebung von Access. Dort finden Sie das Fenster aus Abbildung 1.2.
Abbildung 1.2 Die Entwicklungsumgebung von Access
Zunächst steht Ihnen noch keine Möglichkeit zur Verfügung, direkt Code einzufügen. Sie müssen erst ein neues, noch leeres Modul anlegen. Dazu haben Sie zwei Möglichkeiten:
-
Klicken Sie im Projekt-Manager mit der rechten Maustaste auf die dort angezeigte Datenbank, und wählen Sie aus dem Kontextmenü den Befehl Einfügen • Modul.
-
Eine alternative Vorgehensweise, bei der Sie vorher nicht über die Tastenkombination (Alt)+(F11) in die Entwicklungsumgebung gehen müssen, besteht darin, in Access 2007/2010/2013/2016/2019/2021 und Access 365 auf der Registerkarte Erstellen das Element Modul anzuklicken.
Bei beiden Varianten wird ein neues Modul eingefügt, das auch gleich im Projekt-Explorer angezeigt wird.
Auf den ersten Blick erkennen Sie, dass sich oberhalb des Codebereichs zwei Dropdown-Felder befinden:
-
Im ersten Dropdown-Feld, Allgemein, werden alle Objekte aufgelistet, die sich in der Entwicklungsumgebung befinden. Das können beispielsweise Tabellen, Formulare und Berichte sein.
-
Im zweiten Dropdown-Feld, Deklarationen, sehen Sie alle Prozeduren und Ereignisse, die auf das im ersten Dropdown-Feld eingestellte Objekt angewandt werden können.
Abbildung 1.3 Das erste Modul
1.2.1 Das Eigenschaftenfenster
Standardmäßig ist ein weiteres Fenster, das Eigenschaftenfenster, in der Entwicklungsumgebung von Access nicht eingeblendet. Dieses Fenster lassen Sie anzeigen, indem Sie aus dem Menü Ansicht den Befehl Eigenschaftenfenster wählen oder alternativ die Taste (F4) drücken. Das Eigenschaftenfenster können Sie dazu benutzen, beispielsweise in einem Modul den Namen festzulegen, ohne eine einzige Zeile programmieren zu müssen.
Abbildung 1.4 Das Modul wurde über das Eigenschaftenfenster umbenannt.
Nun aber wieder zurück zu den Prozeduren und zum Codebereich: Wenn Sie ein neues Modul einfügen, haben Sie auf der rechten Seite eine Eingabemöglichkeit. Dort geben Sie Ihre VBA-Prozeduren ein.
Tippen Sie nun Ihre erste Prozedur im Codefenster ein. Diese Prozedur soll die aktuelle Uhrzeit am Bildschirm anzeigen. Es genügt dabei, wenn Sie lediglich die erste Zeile erfassen und mit (¢) bestätigen. Access ergänzt automatisch die »Ende«-Anweisung der Prozedur. Jede Prozedur in Access beginnt mit dem Schlüsselwort Sub. Danach geben Sie einen Leerschritt ein und geben der Prozedur einen Namen. Schließen Sie die erste Zeile ab, indem Sie zwei Klammern setzen und die Taste (¢) drücken. Die so eingefügte Prozedur wird nun automatisch mit einer End Sub-Anweisung komplettiert. Alle Befehle, die Sie nun zwischen der Sub- und der End Sub-Anweisung eingeben, werden bei Aufruf der Prozedur abgearbeitet.
Mit der Funktion MsgBox zeigen Sie ein Meldungsfenster auf dem Bildschirm an. Das Meldungsfenster können Sie füllen, indem Sie Texte in Anführungszeichen sowie die Funktion Time erfassen. Achten Sie dabei darauf, dass zwischen dem fest vorzugebenden Text und der Funktion das Zeichen & steht. Über die Funktion Time ermitteln Sie die aktuelle Uhrzeit. Dabei holt sich Access diese Information aus der Systemsteuerung von Windows. Wird eine falsche Uhrzeit angezeigt, dann müssen Sie die Uhr in der Systemsteuerung von Windows korrigieren.
Abbildung 1.5 Diese Prozedur zeigt die aktuelle Uhrzeit an.
Alle Befehle klein eingeben
Bei der Eingabe des Quellcodes brauchen Sie nicht auf Groß- und Kleinschreibung zu achten. Besser ist es aber, wenn Sie sich angewöhnen, alle Befehle in Kleinbuchstaben einzugeben. Haben Sie die Syntax der Befehle richtig eingegeben, werden jeweils der erste Buchstabe sowie Teile des Befehls automatisch in Großbuchstaben umgewandelt. So wird automatisch aus der Eingabe msgbox der von Access richtig erkannte Befehl MsgBox, sobald Sie die Taste (¢) am Ende der Zeile drücken. Diese automatische Syntaxprüfung erlaubt Ihnen, schon vorab zu erkennen, ob Sie die Syntax eines Befehls falsch geschrieben haben. In diesem Fall bleibt der eingegebene Befehl unverändert.
Auf Leerzeichen verzichten
Eine weitere automatische Anpassung erkennen Sie, wenn Sie z. B. die folgende Zeile eingeben:
Hier werden zwischen den Operatoren automatisch Leerzeichen eingefügt:
Dieser Automatismus hat jedoch keine funktionale Bedeutung. Er dient lediglich der übersichtlicheren Darstellung der einzelnen Befehle.
Grobe syntaktische Fehler bemerkt Access, sobald Sie die Taste (¢) am Ende einer Zeile drücken. Die entsprechende Zeile wird dann in roter Schriftfarbe dargestellt, und auf dem Bildschirm erscheint eine Meldung, die Sie auf die Fehlerursache hinweist.
Lange Zeilen vermeiden
Wenn Sie möchten, können Sie auch mehrere kurze Anweisungen in einer einzigen Zeile darstellen. Dazu verwenden Sie den Doppelpunkt als Trennzeichen zwischen den einzelnen Anweisungen. Dies hat aber zur Folge, dass der Quellcode schwer lesbar wird, da Sie irgendwann so weit nach rechts scrollen müssen, dass Sie den Anfang der Zeile nicht mehr sehen.
Sie sollten stattdessen längere Zeilen auftrennen. Hier empfiehlt es sich, über ein Trennzeichen dem Editor mitzuteilen, dass die Anweisung in der nächsten Zeile weitergehen soll. Auch hier leistet die automatische Syntaxprüfung in Access hervorragend Hilfe, denn nicht jede Anweisung lässt sich an einer beliebigen Stelle trennen.
Um eine Anweisung in der nächsten Zeile fortzusetzen, drücken Sie am Ende der Zeile zunächst die Leertaste und geben anschließend das Zeichen _ (den Unterstrich) ein. Damit weiß der Editor, dass die Anweisung in der nächsten Zeile fortgesetzt werden muss.
Erweitern Sie nun Ihre Prozedur, indem Sie sie kopieren und darunter einfügen. Danach ändern Sie den Namen der Prozedur, da jede Prozedur in VBA einen eindeutigen Namen haben muss. Geben Sie zusätzlich das aktuelle Datum aus. Das Datum soll jedoch im selben Meldungsfenster wie die Uhrzeit ausgegeben werden. Um diese Aufgabe umzusetzen, setzen Sie den Mauszeiger an das Ende der MsgBox-Zeile und tippen ein Leerzeichen sowie einen Unterstrich (_) ein. Bestätigen Sie danach Ihre Aktion, indem Sie (¢) drücken. Nun kann die Anweisung in der nächsten Zeile fortgesetzt werden. Geben Sie jetzt den Code aus Listing 1.1 ein. Die Konstante vbLf bewirkt, dass im Meldungsfenster ein Zeilenumbruch durchgeführt wird.
MsgBox "Jetzt ist es " & Time & " Uhr" _
& vbLf & "und heute ist der " & Date
End Sub
Listing 1.1 Das Datum sowie die Uhrzeit am Bildschirm ausgeben
Bevor Sie die Prozedur ausführen, sollten Sie das Modul sicherheitshalber speichern. Klicken Sie dazu in der Entwicklungsumgebung in der Symbolleiste Voreinstellung auf das Symbol Datenbank speichern.
1.2.2 Prozeduren ausführen
Um eine Prozedur auszuführen, stehen Ihnen mehrere Möglichkeiten zur Verfügung:
-
Gehen Sie in der Entwicklungsumgebung auf die Symbolleiste Voreinstellung, und klicken Sie auf das Symbol Sub/Userform ausführen.
-
Wenn Sie sich in der Entwicklungsumgebung schon im Codefenster befinden, setzen Sie den Mauszeiger direkt auf die erste Zeile der Prozedur und drücken die Taste (F5).
Abbildung 1.6 Das Ergebnis der Prozedur wird am Bildschirm angezeigt.
1.2.3 Wie erfahre ich mehr über die einzelnen Befehle?
Der zweite Schritt bei der Programmierung sollte sein, mehr über die verwendeten Befehle zu erfahren. Dazu können Sie die eingebaute Onlinehilfe verwenden.
Setzen Sie...




