Sandini Bib
Das Access-VBA Codebook
Sandini Bib
Sandini Bib
Bernd Held
Das Access-VBA Codebook
An imprint of Pearson Education
Mnchen Boston San Francisco Harlow, England
Don Mills, Ontario Sydney Mexico City
Madrid Amsterdam
Sandini Bib
Bibliografische Information Der Deutschen Bibliothek
Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;
detaillierte bibliografische Daten sind im Internet ber <[Link] abrufbar.
Die Informationen in diesem Produkt werden ohne Rcksicht auf einen eventuellen Patentschutz verffentlicht. Warennamen
werden ohne Gewhrleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen
wurde mit grter Sorgfalt vorgegangen. Trotzdem knnen Fehler nicht vollstndig ausgeschlossen werden. Verlag, Heraus-
geber und Autoren knnen fr fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine
Haftung bernehmen.
Fr Verbesserungsvorschlge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar.
Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien.
Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulssig.
Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwhnt werden, sind gleichzeitig auch eingetragene
Warenzeichen oder sollten als solche betrachtet werden.
Umwelthinweis:
Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt.
Die Einschrumpffolie zum Schutz vor Verschmutzung ist aus umweltvertrglichem und recyclingfhigem PE-Material.
10 9 8 7 6 5 4 3 2 1
07 06 05
ISBN 3-8273-2177-8
2005 by Addison-Wesley Verlag,
ein Imprint der Pearson Education Deutschland GmbH
Martin-Kollar-Strae 1012, D-81829 Mnchen/Germany
Alle Rechte vorbehalten
Korrektorat: G & U Technische Dokumentation GmbH, Flensburg
Lektorat: Frank Eller, feller@[Link]
Herstellung: Monika Weiher, mweiher@[Link]
Satz: reemers publishing services gmbh, Krefeld gesetzt aus der Minion
Umschlaggestaltung: Marco Lindenbeck, webwo GmbH (mlindenbeck@[Link])
Druck und Verarbeitung: Ksel, Krugzell ([Link])
Printed in Germany
Sandini Bib
Inhaltsverzeichnis
Vorwort 17
Rezepte 21
Allgemeine VBA-Funktionen 23
1 Zeichenfolge in gltiges Datum umwandeln 23
2 Systemdatum abrufen 24
3 Endtermine errechnen 25
4 Kalenderwoche ermitteln 26
5 Datumsdifferenzen errechnen 29
6 Einen Kalender erstellen 30
7 Datumswerte erkennen und umsetzen 31
8 Zeitwerte erkennen und umsetzen 32
9 Datum zerlegen 33
10 Die richtige Datumstabelle ffnen 35
11 Erstellungsdatum einer Datenbank ermitteln 35
12 Datumsangaben formatiert ausgeben 38
13 Eine Pause einlegen ... 40
14 Monatsnamen ermitteln 41
15 Wochentag ermitteln 42
16 Buchstaben aus Zeichenfolgen entfernen 44
17 Zahlen aus Zeichenfolgen entfernen 46
18 Zahlungsart definieren 47
19 Aus Zahlen Buchstaben machen 47
20 Zeichenfolgen vergleichen 49
21 Den Pfad- und Dateinamen einer Datenbank zerlegen 51
22 Zeichenfolgen splitten und zusammenfhren 54
23 In Gro- und Kleinschreibung umwandeln 56
24 Access-Version feststellen 58
25 Text Zeichen fr Zeichen zerlegen 59
26 Dateiendung prfen 60
27 Zeichen ersetzen 62
28 Zeichenfolge mit Leerzeichen auffllen 63
29 Zahlen in Texte umwandeln 64
30 Zeichenfolgen miteinander vergleichen 65
31 Zeichenfolgen spiegeln 67
32 Texte vervollstndigen 67
33 Zuordnungen treffen 68
34 Fhrende Leerzeichen entfernen 69
35 Standardverzeichnis neu setzen 71
Sandini Bib
6 Inhaltsverzeichnis
36 Laufwerkswechsel durchfhren 72
37 Aktuelles Verzeichnis auslesen 72
38 Dateien und Verzeichnisse auslesen 73
39 Verzeichnis anlegen 75
40 Verzeichnis entfernen 76
41 Datei lschen 77
42 Datei kopieren 77
43 Datei umbenennen 81
44 Dateiexistenz prfen 82
45 Betriebssystem-Umgebungsvariablen auslesen 83
46 Textdatei lesen 85
47 Erste Zeile aus Textdatei lesen 87
48 Nur wenige Zeichen aus Textdatei lesen 87
49 Textdatei Zeile fr Zeile auslesen 88
50 Textdatei schreiben 89
51 Textdateien im Batch erstellen 92
52 Zugriffsmodus einer Datei feststellen und setzen 93
53 Externes Programm starten 95
54 Absolutwert ausgeben 99
55 Vorzeichen auslesen 100
56 Abschreibung errechnen (degressiv) 101
57 Abschreibung errechnen (linear) 102
58 Ganzzahligen Wert ermitteln 103
59 Zahlen runden 104
60 Zinssatz errechnen 106
61 Ansparungsbetrag errechnen 107
62 Zufallszahlen erzeugen 109
63 Eingabe prfen 111
64 Datenfeldcheck 112
65 Tabellencheck vornehmen 113
66 Punkte entfernen 114
67 Datumswerte umwandeln 115
68 Nachkommastellen entfernen 116
69 Zahl aus Zeichenfolge extrahieren 117
70 Zahlen in Texte umwandeln 117
Weitere Funktionen 119
71 Ermittlung des CD-ROM-Laufwerks 119
72 Namen des Anwenders ermitteln 122
73 Computernamen ermitteln 123
74 Bedienung des CD-ROM-Laufwerks 124
75 Die Bildschirmauflsung ermitteln 124
76 Ist ein externes Programm gestartet? 125
77 Externes Programm aufrufen 126
78 Wie lange luft ein externes Programm? 127
Sandini Bib
Inhaltsverzeichnis 7
79 Access schlafen schicken 129
80 Verzeichnisse erstellen 129
81 Verzeichnis lschen 130
82 Verzeichnisbaum anzeigen und auswerten 131
83 Windows-Version ermitteln 133
84 Windows-Verzeichnis ermitteln 134
85 Windows-Systemverzeichnis ermitteln 135
86 Das temporre Verzeichnis ermitteln 136
87 Das aktuelle Verzeichnis ermitteln 137
88 Windows-Infobildschirm anzeigen 138
89 Access-Verzeichnis ermitteln 138
90 Standardverzeichnis festlegen 139
91 Dateityp und Anwendung ermitteln 140
92 Kurze Pfadnamen ermitteln 141
93 Texte mit API-Funktionen konvertieren 142
94 Zwischenablage lschen 143
95 Soundkarte checken 144
96 Sounds per API-Funktion ausgeben 144
97 PC piepsen lassen 145
98 Tasten abfangen 145
99 Dateien suchen 146
100 Dateiinformationen auslesen 147
101 Internetverbindung aktiv? 149
102 Cursorposition in Pixel angeben 150
103 Stckzahl pro Stunde errechnen 151
104 Stunden in Minuten umrechnen 152
105 Minuten in Stunden umrechnen 152
106 Normalzeit in Industriezeit umrechnen 153
107 Industriezeit in Normalzeit umwandeln 153
108 Schaltjahr oder nicht? 154
109 Stundengeschwindigkeit errechnen 154
110 Durchschnittlichen Benzinverbrauch ermitteln 155
111 Das Idealgewicht bestimmen 156
112 Fahrleistung pro Tag errechnen 157
113 Berechnung des Bremswegs 158
114 Verzeichnis berprfen 158
115 Datenbank berprfen 160
116 Datenbankstatus berprfen 161
117 Objektstatus erkennen 162
118 Dateien zhlen 163
119 Initialen erstellen 164
120 Position der ersten Zahl erkennen 165
121 Position des ersten Buchstabens erkennen 166
122 Sonderzeichen entfernen 167
123 Numerische Ziffern in Zeichenfolge zhlen 168
Sandini Bib
8 Inhaltsverzeichnis
124 Buchstaben in Zeichenfolge zhlen 169
125 Rmische Zahlen umwandeln 170
126 Arabische Zahlen umwandeln 172
127 Auf Dokumenteigenschaften zugreifen 173
128 Den letzten Tag im Monat ermitteln 174
Die Access-Objekte 177
129 Das Objekt AccessObject 177
130 Alle Module auflisten 177
131 Alle Tabellen auflisten 178
132 Alle Abfragen auflisten 180
133 Die Application-Objekte 180
134 Name der aktuellen Datenbank abfragen 180
135 Pfad der aktuellen Datenbank abfragen 181
136 Pfad der Anwendung abfragen 182
137 Access-Version feststellen 183
138 Aktuellen Anwendernamen abfragen 184
139 Aktuelle Datenbank schlieen 184
140 Applikation beenden 184
141 Drucker auflisten 185
142 Access-Version abfragen 186
143 Das Control-Objekt 186
144 Das DoCmd-Objekt 187
145 Filter in Tabellen setzen 187
146 Objekte umbenennen 189
147 Objekte kopieren 190
148 Objekte lschen 192
149 Objekte exportieren 192
150 Objekte drucken 194
151 Objekte versenden 196
152 Feld aktivieren im Formular 199
153 Datensatz in Tabelle aktivieren 200
154 Menbefehle ausfhren 201
155 Symbolleisten ein- und ausblenden 203
156 SQL-Anweisungen absetzen 204
157 Fenstergre festlegen 205
158 Datenbankinhalte transferieren 206
159 Tabellen transferieren 208
160 Texte exportieren und importieren 210
161 Das Reference-Objekt 213
162 Bibliotheken auslesen 213
163 Office-Assistenten einsetzen 215
164 Datei kopieren 220
165 Datei verschieben 221
166 Datei lschen 223
Sandini Bib
Inhaltsverzeichnis 9
167 Dateiexistenz prfen 224
168 Dateiinfo abfragen 225
169 Verzeichnis anlegen 226
170 Verzeichnis lschen 226
171 Ordnerexistenz prfen 227
172 Ordnergre ermitteln 228
173 Ordner listen 229
174 Dateien auflisten 230
175 Laufwerke auslesen 231
176 Weitere Laufwerkseigenschaften 233
177 Textdatei einlesen 235
178 Textdatei schreiben 236
179 Das FileSearch-Objekt 237
180 Das CommandBar-Objekt 239
181 Leisten identifizieren 239
182 Symbolleiste ein- und ausblenden 241
183 Alle Symbolleisten ein- und ausblenden 242
184 Symbolleisten-IDs ermitteln 243
185 Leisten und Befehle ermitteln 245
186 Symbolschaltflchen (de)aktivieren 246
187 Neue Symbolleiste erstellen 247
188 Symbolleiste lschen 247
189 Symbolschaltflchen-FaceIDs ermitteln 248
190 Symbolschaltflchen-IDs ermitteln 249
191 Symbolschaltflchen einfgen 251
192 Symbolleisten schtzen 252
193 Symbolschaltflchen (de)aktivieren 254
194 Adaptive Mens ausschalten 255
195 Neues Men einfgen 256
196 Menleiste zurcksetzen 258
197 Men lschen 259
198 Menbefehle einfgen 259
199 Menbefehle gruppieren 261
200 Men auslesen 261
201 Menbefehle auslesen 262
202 Mens (de)aktivieren 263
203 Menbefehle (de)aktivieren 265
Tabellen programmieren 267
204 Tabellen ffnen 267
205 Datensatz finden 268
206 Datensatz aktivieren 269
207 Tabellen verknpfen 271
208 Tabellen im HTML/XML-Format speichern 273
209 Komplexere Aufgaben mit ADO/DAO und SQL 275
Sandini Bib
10 Inhaltsverzeichnis
210 Datenbank ffnen und schlieen (ADO) 275
211 Tabelle ffnen und Dump ziehen (ADO) 276
212 Eine bestimmte Anzahl von Stzen extrahieren 278
213 Nur bestimmte Felder einer Tabelle ausgeben (ADO) 279
214 Tabelle ffnen und Daten ausgeben (DAO) 280
215 Datenstze in Datenfeld einlesen (ADO) 282
216 Datenstze in Datenfeld einlesen (DAO) 284
217 SQL-Statements absetzen (ADO) 285
218 Unikatsliste aus Tabelle erstellen (ADO) 286
219 Unikatsliste aus Tabelle erstellen (DAO) 289
220 Datenstze sortieren (ADO) 290
221 Datenstze sortieren (DAO) 293
222 Tabellen zusammenfassen (ADO) 295
223 Verknpfte Tabellen abfragen (ADO) 296
224 Verknpfte Tabellen abfragen (DAO) 298
225 Minimal- und Maximalwerte ermitteln (ADO) 300
226 Minimal- und Maximalwerte ermitteln (DAO) 307
227 Daten gruppieren (ADO) 308
228 Datenstze in einer Tabelle finden (ADO) 310
229 Datenstze in einer Tabelle finden (DAO) 314
230 Datenstze verndern (ADO) 318
231 Datenstze verndern (DAO) 320
232 Whrungsumrechnungen vornehmen (ADO) 321
233 Whrungsumrechnung vornehmen (DAO) 323
234 Datenstze filtern (ADO) 324
235 Datenstze filtern (DAO) 327
236 Datenstze zhlen (ADO) 328
237 Datenstze zhlen (DAO) 332
238 Datenstze summieren 334
239 Datenstze klonen (ADO) 334
240 Datenstze klonen (DAO) 336
241 Lesezeichen setzen (ADO) 337
242 Datenstze lschen (ADO) 338
243 Datenstze lschen (DAO) 340
244 Datenstze hinzufgen (ADO) 342
245 Datenstze hinzufgen (DAO) 346
246 Der Einsatz von ADOX und DAO 347
247 Tabellennamen ermitteln 347
248 Tabelleneigenschaften auslesen 349
249 Tabellenstrukturen auslesen 350
250 Tabelleneigenschaften abfragen 352
251 Tabellen erstellen 354
252 Tabellen verknpfen 357
253 Tabellen lschen 359
254 Tabellenfeld anhngen (DAO) 359
Sandini Bib
Inhaltsverzeichnis 11
255 Verlinken und Verknpfen (DAO) 361
256 Verknpfte Tabellen aktualisieren 362
257 Verknpfungsadresse anpassen 363
Abfragen programmieren 365
258 Abfragen starten mit OpenQuery 366
259 Abfragen erstellen mit RunSQL 368
260 UPDATE (Aktualisierungsabfrage) 368
261 INSERT INTO (Anfgeabfrage) 370
262 DELETE (Lschabfrage) 372
263 SELECT INTO (Tabellenerstellungsabfrage) 375
264 INNER JOIN (Vergleichsabfrage) 376
265 UNION (Auswahlabfrage) 380
266 Abfragen mit Berechnungen ausfhren 382
267 ALTER (Tabellennderungsabfrage) 386
268 CREATE TABLE (Tabelle erstellen) 388
269 CREATE INDEX (Index definieren) 390
270 DROP INDEX (Index entfernen) 391
271 DROP TABLE (Tabelle entfernen) 391
272 Abfrage erstellen und speichern (ADO) 392
273 Abfrage erstellen und speichern (DAO) 393
274 Abfragen ber das Katalog-Objekt realisieren 395
275 Normale Abfragen erstellen 395
276 Parameterabfragen erstellen (ADOX) 399
277 Parameterabfragen erstellen (DAO) 402
Steuerelemente, Dialoge und Formulare 407
278 Das Meldungsfenster MsgBox 407
279 Der Eingabedialog Inputbox 410
280 Die FileDialog-Standarddialoge 411
281 Sonstige Dialoge 414
282 Formulare 415
283 Die Steuerelemente fr Formulare 418
284 Formulare auslesen 419
285 Formulare ffnen und schlieen 423
286 Aktivierreihenfolge anpassen 426
287 Formularhintergrund einstellen 427
288 Formular ohne Navigationsschaltflchen aufrufen 428
289 Hintergrund und Schriftfarbe von Textfeldern anpassen 430
290 Startposition des Cursors festhalten 432
291 Auswahl aufheben 432
292 Alte Werte festhalten 433
293 QuickInfo hinzufgen 435
294 Textfelder sperren 435
295 Textfelder ein- und ausblenden 437
296 Textfelder begrenzen 438
Sandini Bib
12 Inhaltsverzeichnis
297 Textfelder berwachen 439
298 Textfelder initialisieren 441
299 Textfelder prfen 442
300 Listenfelder 442
301 Listenfeld fllen 442
302 Listenfeldauswahl verarbeiten 445
303 Listenfeldeintrge zhlen 446
304 Aktuellen Listenfeldeintrag lschen 446
305 Alle markierten Listenfeldeintrge lschen 447
306 Alle Listenfeldeintrge (de)markieren 449
307 Mehrspaltiges Listenfeld fllen 450
308 Auf einzelne Spalten zugreifen 451
309 Kombinationsfeld fllen Variante 1 452
310 Kombinationsfeld fllen Variante 2 456
311 Editieren zulassen 457
312 Kontrollkstchen 460
313 Kontrollkstchen auswerten 460
314 Kontrollkstchen initialisieren 462
315 Optionsfelder 462
316 Schaltflchen 464
317 Eine blinkende Schaltflche erstellen 468
318 Kalendersteuerelement 470
319 Der Fortschrittsbalken 474
320 Der Webbrowser 475
321 Zugriff auf Outlook-Postfach 476
322 Das TreeView-Steuerelement 477
323 Das Media-Player-Steuerelement 479
324 Das Office-Chart-Steuerelement 481
325 Das SpreadSheet-Steuerelement 484
326 Das Slider-Steuerelement 486
327 Das Spinbutton-Steuerelement 488
Berichte und Datenzugriffsseiten 491
328 Berichtstypen 491
329 Der Aufbau eines Berichts 492
330 Berichte ffnen 492
331 Berichtsfilter setzen 494
332 Bericht schlieen 494
333 Berichte drucken 495
334 Berichte kopieren 497
335 Berichte umbenennen 499
336 Berichte exportieren 500
337 Berichte formatieren 502
338 Berichte auflisten 505
339 Berichtselemente identifizieren 506
Sandini Bib
Inhaltsverzeichnis 13
340 Berichtsteil ein- und ausblenden 510
341 Eigene Berichte erstellen 511
342 Berichtselemente einfgen 513
343 Datenzugriffsseiten 516
344 Datenzugriffsseiten auslesen 520
345 Speicherort der Datenzugriffsseiten ermitteln 520
346 Datenzugriffsseiten anzeigen 521
347 Datenzugriffsseite anpassen 522
Die Ereignisprogrammierung 525
348 Zugangsverwaltung in Access (Formular) 525
349 Zugangsverwaltung in Access (Bericht) 527
350 Bestimmtes Feld fokussieren 528
351 Sicherheitscheck durchfhren 529
352 Alle beteiligten Elemente schlieen 530
353 Nach fnf Sekunden automatisch schlieen 531
354 Zugriff dokumentieren 532
355 Listenfeld beim Laden des Formulars fllen 533
356 Schlieen verhindern 534
357 Rechnungsflligkeiten berwachen 536
358 Information beim letzten Satz 538
359 Dynamisches Ein- und Ausblenden von Feldern 538
360 Variablen Titel im Formular einstellen 539
361 QuickInfos definieren 540
362 Eingaben limitieren 541
363 Neue Mitarbeiter dokumentieren 543
364 Felder automatisch vorbelegen 544
365 Rckfrage vor dem Speichern einholen 547
366 Eingabeprfung vornehmen 547
367 Muss-Felder definieren 549
368 nderungen in Textdatei festhalten 550
369 Neuanlage von Datenstzen verhindern 551
370 berhaupt keine nderungen zulassen 552
371 Letzte nderung festhalten 552
372 Lschen von Datenstzen verhindern 554
373 Eine eigene Lschabfrage einsetzen 555
374 Den letzten Datensatz einstellen 556
375 Den zuletzt genderten Satz einstellen 556
376 Variable Feldanpassung vornehmen 558
377 Mit Doppelklick Felder ein- und ausblenden 559
378 Lagerbestand per Mausklick erhhen 560
379 Welche Taste wurde gedrckt? 561
380 Schaltflche beim Klicken verndern 562
381 Kontextmen deaktivieren 563
382 Spezialeffekte einsetzen 563
Sandini Bib
14 Inhaltsverzeichnis
383 Ins Internet verzweigen 565
384 Textfelder optisch hervorheben 568
385 Tasten erkennen 569
386 Tastenkombinationen einrichten 570
387 Aktuellen Datensatz ans Ende kopieren 571
388 Doppelte Eingaben verhindern 573
389 Eingaben vorwegnehmen 574
390 Lschen von Feldern verhindern 575
391 QuickInfos anzeigen 576
392 Reihenfolge beim ffnen und Schlieen eines Formulars 577
393 Aktivierreihenfolge bei Steuerelementen 578
394 Reihenfolge der Aktualisierungsereignisse 578
395 Eine komplette Kette von Ereignissen 579
VBE und Security 581
396 Kennwort fr die Anzeige des Quellcodes anlegen 581
397 Datenbank ohne Quellcode speichern 582
398 Datenbanken verschlsseln 583
399 Access-Lsung mithilfe von Startparametern absichern 583
400 Schtzen einer Datenbank ber ein Kennwort 584
401 Datenbankkennwort ndern 589
402 Arbeitsgruppe anlegen 590
403 Arbeitsgruppe entfernen (DAO) 592
404 Benutzer anlegen 593
405 Benutzer entfernen 595
406 Benutzer auslesen 596
407 Berechtigungen zuweisen 596
408 Der Zugriff auf die VBE 599
409 Die VBE-Bibliothek einbinden 601
410 Verweise auslesen 607
411 Auf der Suche nach fehlerhaften Verweisen 609
412 VB-Komponenten identifizieren 609
413 Die VBE aufrufen 610
414 Neue Module einfgen 611
415 Modul lschen 612
416 Alle Module lschen 614
417 Modulcheck durchfhren 614
418 Module drucken 615
419 Makro lschen 616
420 Makrocheck durchfhren 618
421 Formularereignisse lschen 619
422 Einzelne Texte/Befehle im Quellcode finden 621
423 Texte ersetzen 623
424 Makros eines Moduls auflisten 626
425 Makros einfgen 628
Sandini Bib
Inhaltsverzeichnis 15
426 Formularcode importieren 631
427 Formularereignis einstellen 632
428 Makros exportieren 634
429 Formularcodes sichern 635
Access und ... 639
430 Early-Binding und Late-Binding 639
431 Outlook bereits gestartet? 640
432 E-Mails verschicken 642
433 E-Mail mit Anhang versenden 646
434 Mail-Adressen aus Outlook herauslesen (Early-Binding) 646
435 Mail-Adressen aus Outlook herauslesen (Late-Binding) 648
436 Kontaktdaten nach Outlook bertragen 649
437 Kontaktdaten von Outlook importieren 653
438 Termine aus dem Outlook-Kalender abfragen 657
439 Aufgaben abfragen 659
440 E-Mails in Access-Tabelle schreiben 661
441 Sammel-Mails versenden 665
442 E-Mail-Anhnge speichern 666
443 Eine Diashow im Internet Explorer programmieren 668
444 URLs auslesen 669
445 Ist Word bereits gestartet? 671
446 Access-Tabelle bertragen 672
447 Access-Tabellen transferieren 675
448 Word-Makro starten 678
449 Datenbankzugriff von Word durchfhren 679
450 Excel bereits gestartet? 684
451 Access-Tabelle in eine Excel-Tabelle umwandeln 687
452 Excel-Daten in eine Access-Tabelle transferieren 688
453 Access als Datenlieferant fr Excel 690
454 Excel-Makro starten 707
455 Auf Excel-Funktionen zugreifen 707
456 Ist PowerPoint bereits gestartet? 708
457 PowerPoint-Dateien suchen und ffnen 710
458 Textdateien speichern 712
459 Weitere Methoden zum Speichern von Textdateien 714
460 Codes sichern 716
461 Textdatei importieren 718
Sandini Bib
16 Inhaltsverzeichnis
Referenz 723
VBA-Funktionen 725
Datums- und Zeitfunktionen 725
Textfunktionen 726
Dateifunktionen 727
Mathematische Funktionen 729
Prffunktionen 730
Umwandlungsfunktionen 731
Farbfunktionen 732
Suchfunktionen 733
bersicht der Konstanten 735
FileType-Konstanten 735
RGB-Konstanten 736
RunCommand-Konstanten 736
Dir-Konstanten 743
Shell-Konstanten 743
StrConv-Konstanten 744
Var-Type-Konstanten 744
File Input/Output-Konstanten 745
Datumsformat-Konstanten 746
Schaltflchen auswerten 747
Stichwortverzeichnis 749
Sandini Bib
Vorwort
Dieses Access-VBA-Codebook ist in erster Linie fr fortgeschrittene Anwender und Pro-
grammierer gedacht, die noch mehr ber VBA in Access erfahren mchten. Die im Buch vor-
gestellten Quellcodes sind auf der mitausgelieferten CD-ROM in den einzelnen
Demodateien sowie dem Code-Repository abrufbar.
Vorab ein paar Worte, was Sie in den einzelnen Kapiteln erwartet:
Im ersten Kapitel knnen Sie typische Lsungen rund um das Thema Funktionen nachschla-
gen. Dabei gibt es Access-spezifische sowie VBA-Standardfunktionen.
Im zweiten Kapitel finden Sie interessante API-Funktionen und benutzerdefinierte, eigene
Funktionen.
Das dritte Kapitel bildet den Einstieg in die Welt der wichtigsten Access-Objekte. Hier setzen
Sie Objekte von der Applikation selbst ber Men- und Symbolleisten bis hin zu Objekten
fr die Datei- und Verzeichnisverwaltung ein.
Im vierten Kapitel liegen Lsungen zur Tabellenprogrammierung vor. Dabei gibt es in die-
sem Kapitel jeweils Lsungen zu ADO, DAO und ADOX.
Das fnfte Kapitel gibt Antworten auf Fragen, wie Sie Abfragen erstellen, programmieren
und speichern knnen. Unter anderem werden Aktionsabfragen, Aktualisierungsabfragen
und Parameterabfragen in praxisnahen Aufgaben vorgestellt. Auch hier kommen beide
Zugriffsmethoden ADO und DAO zum Einsatz.
Kapitel 6 beschftigt sich mit dem Thema der Berichtsprogrammierung. Sie finden in diesem
Kapitel Lsungen, wie Sie Berichte beispielsweise ansprechen, formatieren und erstellen kn-
nen.
In Kapitel 7 geht es um die Erstellung und Programmierung von Formularen. Dabei werden
Lsungen zu den einzelnen Steuerelementen wie Listboxen, Kombinationsfelder und Text-
boxen prsentiert. Daneben knnen Sie Beispiele zu weiteren Steuerelementen wie bei-
spielsweise den Fortschrittsbalken, das Kalendersteuerelement und das Office-Chart-
Steuerelement vorfinden. Auch Standarddialoge, Meldungsboxen und Eingabeboxen sind
Bestandteil dieses Kapitels.
In Kapitel 8 werden Ereignisse in erster Linie auf Formularbasis vorgestellt. Dabei wird auf-
gezeigt, wie Sie auf bestimmte Ereignisse reagieren knnen. Die Palette reicht hier von Ereig-
nissen auf Formularebene ber Ereignisse auf Steuerelementsebene bis hin zu Tasten- und
Mausereignissen.
Sandini Bib
18 Vorwort
Kapitel 9 geht der Frage nach, wie man Quellcode und Datenbanken schtzen kann. Des
Weiteren knnen Sie in diesem Kapitel nachschlagen, wie Sie Arbeitsgruppen anlegen und
Benutzer einfgen oder lschen. Ein weiterer Bestandteil dieses Kapitels ist die VBE-Pro-
grammierung. Dabei werden beispielsweise Module, Makros und Ereignisse eingefgt bzw.
gelscht, Quellcodes importiert und exportiert und vieles mehr.
Im letzten Kapitel dieses Buchs wird das Zusammenspiel von Access und anderen Office-
Programmen demonstriert. Dabei werden Daten zwischen Access und Outlook, Word,
PowerPoint, dem Internet Explorer und Excel ausgetauscht. Ein weiterer Bestandteil in die-
sem Kapitel ist die Bearbeitung von Textdateien in Access.
Bei Nachfragen und allgemeinem Feedback zu meinem Buch erreichen Sie mich ber meine
Excel-Homepage [Link] oder ber [Link]@[Link]. So erreichen Sie
gleichzeitig auch den Verlag. Auf der Homepage von Markt+Technik finden Sie auch ein
eigenes VBA-Forum [Link] wo Sie Ihre VBA-
Fragen loswerden knnen. Ich moderiere dieses Forum und antworte dort nahezu tglich.
Auch Sie sind natrlich herzlich eingeladen, in diesem VBA-Forum zu antworten.
Vielen Dank an Thomas Tai von SmartTools-Publishing, der mir fr die CD-ROM wertvolle
Access-Tools zur Verfgung gestellt hat.
Ich wnsche Ihnen whrend des Lesens des Buchs und beim spteren Anwenden der Lsun-
gen viel Spa!
Bernd Held
Sandini Bib
Vorwort 19
ber den Autor
Bernd Held ist gelernter Informatiker und programmierte drei Jahre lang bei einer Firma der
Automobilbranche Warenwirtschafts- und Suchsysteme fr den Kfz-Bereich. Danach arbei-
tete er sechs Jahre beim debis Systemhaus im Controlling. Dort war er verantwortlich fr das
Berichtswesen, die Leistungsverrechnung, das Erstellen von betrieblichen Auswertungen und
Wirtschaftlichkeitsrechnungen sowie fr die Entwicklung neuer Controlling-Tools auf der
Basis von Microsoft Office. Seit dem 1. Januar 2002 ist Herr Held selbststndig. Er schreibt
Fachartikel in renommierten Zeitschriften, verfasst Computerbcher, fhrt Software-Schu-
lungen durch und programmiert im Auftrag von Kunden. Sein Spezialgebiet ist Microsoft
Office. Dort hat er sich auf den Bereich Excel und die Office-VBA-Programmierung speziali-
siert. Aber auch ber Microsoft Works, FrontPage, Windows und diverse andere Themen hat
er schon viele Bcher geschrieben. Auch zu Access verffentlichte er bereits zahlreiche Artikel
in Fachzeitschriften.
Vor fnf Jahren wurde Bernd Held als MVP (Most Valuable Professional) von der Firma
Microsoft ausgezeichnet. Dieser Titel wird fr besondere fachliche Kompetenz, berdurch-
schnittlichen Einsatz in den Diskussionsforen und fr auergewhnliches Kommunikations-
talent verliehen.
Bernd Held, MVP fr Microsoft Excel
Sandini Bib
Sandini Bib
Rezepte
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Allgemeine VBA-Funktionen
In VBA gibt es Hunderte von Funktionen. Die meisten davon knnen im kompletten Office-
Paket eingesetzt werden, andere sind Access-spezifisch. Funktionen lassen sich in verschie-
dene Gruppen einteilen. So gibt es beispielsweise Text-, Datums- und Zeitfunktionen,
mathematische Funktionen und vieles mehr. Die folgenden Funktionen werden in diesem
Kapitel vorgestellt:
Datums- und Zeitfunktionen
Textfunktionen
Dateifunktionen und -anweisungen
Mathematische Funktionen
Prffunktionen
Umwandlungsfunktionen
1 Zeichenfolge in gltiges Datum umwandeln
Mithilfe der Funktion CDate knnen Zeichenfolgen in einen gltigen Datumswert konvertiert
werden. Im folgenden Beispiel aus Listing 1 wird eine Zeichenfolge in ein Datumsformat
umgewandelt.
Das Datum liegt in einer Variablen vom Typ String vor. bergeben Sie diesen String der
Funktion CDate, die daraus ein verwertbares Datum macht. Die Funktion CDate erkennt
sowohl Datumsliterale und Zeitliterale als auch bestimmte Zahlen, die im zulssigen Bereich
fr ein Datum liegen. Beim Umwandeln einer Zahl in ein Datumsformat wird der ganzzah-
lige Teil fr das Datum verwendet. Nachkommastellen der Zahl werden in eine Zeitangabe
(beginnend bei 0:00) umgewandelt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub DatumWandeln()
Dim strDatum As String
strDatum = "17. Mai 2004"
strDatum = CDate(strDatum)
End Sub
Listing 1: Mit der Funktion CDate Zeichenfolgen in gltige Datumswerte umwandeln
Sandini Bib
24 Allgemeine VBA-Funktionen
Selbstverstndlich funktioniert dasselbe auch mit Zeitwerten:
2 Systemdatum abrufen
Zugriff auf das Systemdatum, welches in Windows hinterlegt ist, erhalten Sie ber die Funk-
tion Date. Die Funktion Time gibt die aktuelle Systemzeit aus.
Ein typisches Beispiel fr den Gebrauch dieser Funktionen ist das Anzeigen des aktuellen
Tagesdatums sowie der Uhrzeit auf dem Bildschirm.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub ZeitWandeln()
Dim strZeit As String
strZeit = "18:45:00"
strZeit = CDate(strZeit)
End Sub
Listing 2: Mit der Funktion CDate Zeichenfolgen in gltige Zeitwerte umwandeln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub SystemdatumAbrufen()
MsgBox "Heute ist der " & Date & vbLf & "um " & Time & " Uhr"
End Sub
Listing 3: Das aktuelle Tagesdatum anzeigen
Abbildung 1: Das aktuelle Datum sowie die Uhrzeit ermitteln
H
i
n
w
e
i
s
Sollten das Datum bzw. die Uhrzeit nicht stimmen, dann kontrollieren Sie diese Ein-
stellungen in der Systemsteuerung von Windows.
Sandini Bib
Endtermine errechnen 25
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
3 Endtermine errechnen
Die Funktion DateAdd liefert einen Wert vom Typ Variant (Date) zurck, der ein Datum ent-
hlt, zu dem ein bestimmtes Zeitintervall addiert wurde. Die Syntax dieser Funktion lautet:
DateAdd(interval, number, date)
Die Syntax fr die DateAdd-Funktion besteht aus den folgenden benannten Argumenten:
Im folgenden Makro aus Listing 4 wird ausgehend von einem Bestelldatum der Liefertermin
errechnet und im Direktfenster der Entwicklungsumgebung ausgegeben.
ber die Variable strIntervall geben Sie bekannt, in welcher Einheit Sie rechnen mchten.
Die dafr in Frage kommenden Einheiten knnen Sie der Tabelle 2 entnehmen.
Teil Beschreibung
interval
Zeichenfolgenausdruck, der das zu addierende Zeitintervall ergibt.
Number
Numerischer Ausdruck, der die Anzahl der zu addierenden Intervalle ergibt.
Er kann positiv (fr ein zuknftiges Datum) oder negativ (fr ein vergangenes
Datum) sein.
date
Ein Wert vom Typ Variant (Date) oder ein als Literal dargestelltes Datum, zu
dem das Intervall hinzuaddiert wird.
Tabelle 1: Die Argumente der Funktion DateAdd
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub EndTerminErrechnen()
Dim DateBestellung As Date
Dim strIntervall As String
Dim intZahl As Integer
DateBestellung = "20.07.2004"
[Link] "Bestelldatum: " & DateBestellung
strIntervall = "m"
intZahl = 3
[Link] "Lieferdatum: " & _
DateAdd(strIntervall, intZahl, DateBestellung)
End Sub
Listing 4: Das Enddatum mit der Funktion DateAdd ausrechnen
Sandini Bib
26 Allgemeine VBA-Funktionen
ber die Variable intZahl geben Sie den Datumsversatz bekannt, der entweder aus einer
positiven (Zukunft) oder einer negativen Zahl (Vergangenheit) bestehen kann.
Als letzte Variable bergeben Sie der Funktion das Ausgangsdatum, von dem Sie die Berech-
nung starten mchten.
Das Ergebnis wird ber die Anweisung [Link] im Direktfenster der Entwicklungsumge-
bung ausgegeben.
4 Kalenderwoche ermitteln
Mithilfe der Funktion DatePart knnen Sie einen bestimmten Teil des Datums extrahieren,
indem Sie auf die Konstanten dieser Funktion zurckgreifen. Unter anderem knnen Sie
dabei auch die Kalenderwoche zu einem Datum ermitteln.
Die Syntax der Funktion DatePart lautet:
DatePart(interval,date[,firstdayofweek[, firstweekofyear]])
Im Argument Interval knnen Sie angeben, welchen Teil des Datums Sie extrahieren mch-
ten. Sehen Sie sich dazu die Tabelle 2 an.
Im Argument Date geben Sie den Wert an, den Sie berechnen mchten.
Einheit Beschreibung
yyyy Jahr
q Quartal
m Monat
y Tag des Jahres
d Tag
w Wochentag
ww Woche
h Stunde
n Minute
s Sekunde
Tabelle 2: Die verfgbaren Intervalle fr das Argument Interval
Abbildung 2: Ein Lieferdatum in der Zukunft errechnen
Sandini Bib
Kalenderwoche ermitteln 27
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Argument firstdayofweek mssen Sie den ersten Tag der Woche angeben. Denken Sie bei-
spielsweise daran, dass der jdische Kalender mit dem Sonntag als ersten Tag der Woche
beginnt. Fr unseren europischen Bereich mssen Sie daher den Wert 2 bzw. die Konstante
vbMonday einsetzen. Wenn Sie die ganze Sache etwas variabler halten mchten, dann setzen
Sie die Konstante vbUseSystem ein. Damit wird die Einstellung des ersten Tags der Woche
direkt aus den Einstellungen Ihrer Windows-Systemsteuerung herausgelesen. Sehen Sie die
einzelnen Belegungen der Konstanten in Tabelle 4.
Im letzten Argument firstweekofyear legen Sie die erste Woche eines Jahres fest. Danach
richtet sich auch jeweils die Nummerierung der Kalenderwoche. Dabei knnen Sie folgende
Einstellungen treffen:
Im nchsten Beispiel aus Listing 5 soll anhand des aktuellen Tagesdatums die dazugehrige
Wochennummer ermittelt und im Direktfenster der Entwicklungsumgebung ausgegeben
werden.
Konstante Wert Beschreibung
VbUseSystem 0
Die NLS API-Einstellung wird verwendet.
VbSunday 1
Sonntag (Voreinstellung)
VbMonday 2
Montag
vbTuesday 3
Dienstag
vbWednesday 4
Mittwoch
vbThursday 5
Donnerstag
vbFriday 6
Freitag
vbSaturday 7
Samstag
Tabelle 3: Die FirstDayOfWeek-Konstanten der Funktion DatePart
Konstante Wer
t
Beschreibung
VbUseSystem 0
Die NLS API-Einstellung aus der Systemsteuerung von
Windows wird verwendet.
vbFirstJan1 1
Anfang in der Woche mit dem 1. Januar (Voreinstellung)
vbFirstFourDays 2
Anfang in der ersten Woche, die mindestens vier Tage im
neuen Jahr enthlt.
VbFirstFullWeek 3
Anfang in der ersten vollen Woche des Jahres.
Tabelle 4: Die FirstWeekOfYear-Konstanten der Funktion DatePart
Sandini Bib
28 Allgemeine VBA-Funktionen
Mchten Sie diese Lsung ber eine Funktion aufrufen, dann sehen Sie sich einmal das
Listing 6 an.
bergeben Sie der Funktion DINKw das aktuelle Datum, welches Sie ber die Funktion Date
abrufen. In der Funktion DINKw wird die Funktion DatePart eingesetzt, die das bergebene
Datum untersucht. Den Rckgabewert geben Sie ber die Methode Msgbox am Bildschirm aus.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub KalenderwocheErmitteln()
[Link] "Heute ist der " & Date
[Link] "Wir befinden uns in der Kalenderwoche " & _
DatePart("ww", Date)
End Sub
Listing 5: Die Kalenderwoche ermitteln
Abbildung 3: Aus einem Datum die dazugehrige KW errechnen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Function DINKw(Datum)
DINKw = DatePart("ww", Datum, vbMonday, vbFirstFourDays)
End Function
Sub KW()
MsgBox "Wir gefinden uns in der KW " & DINKw(Date)
End Sub
Listing 6: Die Kalenderwoche ber eine Funktion abrufen
Sandini Bib
Datumsdifferenzen errechnen 29
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
5 Datumsdifferenzen errechnen
Mithilfe der Funktion DateDiff knnen Sie die Anzahl der Zeitintervalle angeben, die zwi-
schen zwei bestimmten Terminen liegen. Die Syntax fr diese Funktion lautet:
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
Da die Argumente der Funktion DateDiff fast gleich sind wie bei der Funktion DatePart,
lesen Sie weiter oben im Kapitel nach.
Im folgenden Makro aus Listing 7 werden die Tage bis zum Jahreswechsel errechnet und im
Direktfenster ausgegeben.
Deklarieren Sie zu Beginn des Makros zwei Variablen vom Typ Date. Danach fllen Sie die
Variable DateStart mit dem aktuellen Systemdatum. Die Variable DateEnde fllen Sie mit dem
letzten Tag des Jahres 2004. ber die Funktion DateDiff ermitteln Sie den Zeitraum, der zwi-
schen diesen beiden Zeitpunkten liegt. Damit die Funktion wei, in welcher Einheit es die
Berechnung durchfhren soll, bergeben Sie als erstes Argument das Krzel d, das fr die
Einheit Tage steht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub TageBisZumJahreswechsel()
Dim DateStart As Date
Dim DateEnde As Date
DateStart = Date
DateEnde = "31.12.2004"
[Link] "Anzahl Tage von heute " & _
DateStart & vbLf & " bis zum Jahresende: " & _
DateDiff("d", DateStart, DateEnde)
End Sub
Listing 7: Verbleibende Tage bis zum Jahreswechsel ermitteln
Abbildung 4: Es sind noch genau 165 Tage bis zum Jahreswechsel.
Sandini Bib
30 Allgemeine VBA-Funktionen
6 Einen Kalender erstellen
ber den Einsatz der Funktion DateSerial knnen Sie einen Wert zurckliefern, der die
angegebene Jahres-, Monats- und Tageszahl enthlt.
Die Syntax dieser Funktion sieht dabei wie folgt aus:
DateSerial(year, month, day)
Im folgenden Beispiel aus Listing 8 soll fr einen Monat fr jeden Tag genau ein Eintrag im
Direktfenster in umgekehrter Reihenfolge eingefgt werden.
bergeben Sie der Funktion DateSerial einzeln und nacheinander die drei bentigten Argu-
mente Jahr, Monat und Tag. Der Tag wird in diesem Beispiel ber eine dynamische Variable
mit dem Namen intz bergeben. ber den Einsatz der Funktion Format bringen Sie das
Ergebnis noch in das richtige Format. Dabei stehen die Krzel dd fr die zweistellige, nume-
rische Tagesangabe, die Krzel mm fr eine zweistellige, numerische Monatsangabe sowie die
Krzel yy fr eine zweistellige, numerische Jahresangabe.
Fangen Sie bei dieser Lsung beim letzten Tag des Monats Januar an und subtrahieren Sie bei
jedem Schleifendurchlauf den Wert 1. Die Schrittweite mssen Sie bei diesem Makro ber
das Schlsselwort Step und das negative Vorzeichen angeben.
Teil Beschreibung
year
Wert vom Typ Integer. Zahl im Bereich von 100 bis 9999 (einschlielich) oder
ein numerischer Ausdruck.
month
Wert vom Typ Integer. Beliebiger numerischer Ausdruck.
day
Wert vom Typ Integer. Beliebiger numerischer Ausdruck.
Tabelle 5: Die Argumente der Funktion DateSerial
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub TageSchreiben()
Dim intZ As Integer
For intZ = 29 To 1 Step 1
[Link] Format(DateSerial(2004, 2, intZ), "[Link]")
Next intZ
End Sub
Listing 8: Einzelne Tage formatiert in den Direktbereich schreiben
Sandini Bib
Datumswerte erkennen und umsetzen 31
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Sollen die Tage in der Reihenfolge vorwrts geschrieben werden, dann starten Sie das Makro
aus Listing 9.
In einer Schleife durchlaufen Sie alle Tage des Monats Februar. Dabei fangen Sie beim ersten
Februar an und enden beim 29. Februar. Die Schrittweite mssen Sie bei dieser Schleife nicht
angeben, da diese Schleife standardmig in Einerschritten arbeitet.
7 Datumswerte erkennen und umsetzen
Mithilfe der Funktion DateValue knnen Sie eine Zeichenfolge in einen gltigen Datumswert
umwandeln. Die Syntax dieser Funktion lautet:
DateValue(Datum)
Das erforderliche Argument Datum ist normalerweise ein Zeichenfolgenausdruck, der ein
Datum aus dem Bereich vom 1. Januar 100 bis zum 31. Dezember 9999 reprsentiert. Alter-
Abbildung 5: Die Tage eines Monats rckwrts schreiben
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub TageSchreibenVorwrts()
Dim intZ As Integer
For intZ = 1 To 29
[Link] Format(DateSerial(2004, 2, intZ), "[Link]")
Next intZ
End Sub
Listing 9: Die Tage eines Monats vorwrts schreiben
H
i
n
w
e
i
s
In beiden Makros aus Listing 8 und Listing 9 fllt auf, dass der 29. Februar ein konstan-
ter Wert ist, der eben nur fr ein Schaltjahr gilt. Im folgenden Kapitel 2 knnen Sie
Funktionen nachschlagen, die den letzten Tag eines Monats ermitteln sowie ein Jahr auf
Schaltjahr prfen.
Sandini Bib
32 Allgemeine VBA-Funktionen
nativ knnen Sie fr Datum aber auch einen beliebigen Ausdruck angeben, der ein Datum,
eine Zeit oder beides aus diesem Bereich darstellen kann.
Im folgenden Beispiel aus Listing 10 wird ein etwas ungewhnliches Datum in ein gngiges
Datumsformat umgesetzt.
Deklarieren Sie eine Variable vom Typ Date. Danach bergeben Sie der Funktion DateValue
ein Datum, das als Text vorliegt. Die Funktion DateValue macht daraus ein Access-verwert-
bares Datum.
8 Zeitwerte erkennen und umsetzen
Die Funktion TimeValue wandelt eine Zeichenfolge in einen gltigen Zeitwert um. Die Syntax
dieser Funktion lautet:
TimeValue(Uhrzeit)
Das erforderliche Argument Uhrzeit ist normalerweise ein Zeichenfolgenausdruck, der eine
Zeit im Bereich von 0:00:00 bis 23:59:59 darstellt. Uhrzeit kann aber auch ein beliebiger Aus-
druck sein, der eine Zeit aus diesem Bereich angibt.
Im folgenden Beispiel aus Listing 11 wird der Funktion TimeValue ein Zeitwert bergeben,
der als Text vorliegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub EingabeWandeln()
Dim Date1 As Date
Date1 = DateValue("1/1/04")
MsgBox Date1
End Sub
Listing 10: Einen String-Wert in ein verwertbares Datum umwandeln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Listing 11: Eine Uhrzeit erkennen und umwandeln
Sandini Bib
Datum zerlegen 33
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
9 Datum zerlegen
ber die folgenden drei Funktionen knnen Sie ein Datum in seine Einzelteile zerlegen.
Dabei kann aus einem Datum der Tagesteil, der Monatsteil sowie der Jahresteil extrahiert
werden. Dabei gibt es folgende Funktionen:
Mit der Funktion Day knnen Sie den Tag als ganzzahligen Wert (131) aus einem Datums-
wert extrahieren.
Mit der Funktion Month knnen Sie den Monat als ganzzahligen Wert (112) aus einem
Datumswert extrahieren.
Mit der Funktion Year knnen Sie das Jahr als ganzzahligen Wert aus einem Datumswert
extrahieren.
Die Syntax dieser Funktionen lautet:
Day(Datum)
Month (Datum)
Year (Datum)
Das erforderliche Argument Datum ist ein beliebiger Wert vom Typ Variant, ein numerischer
Ausdruck, ein Zeichenfolgenausdruck oder eine beliebige Kombination, die ein Datum dar-
stellen kann.
Im folgenden Beispiel aus Listing 12 wird ein Datum zerlegt und anschlieend wieder in
etwas anderer Form zusammengesetzt:
Sub ZeitenErkennenUndWandeln()
Dim DateZeit As Date
[Link] "Vorher: " & "2:49:59 PM"
DateZeit = TimeValue("2:49:59 PM")
[Link] "Nachher:" & DateZeit
End Sub
Abbildung 6: Die Uhrzeit wurde erkannt und umgesetzt.
Listing 11: Eine Uhrzeit erkennen und umwandeln (Forts.)
Sandini Bib
34 Allgemeine VBA-Funktionen
Deklarieren Sie zu Beginn des Makros vier Variablen. In der ersten Variable DateBeginn vom
Typ Date speichern Sie das aktuelle Systemdatum, das Sie ber die Funktion Date ermitteln.
Danach wird diese Variable in die drei Variablen intTag, intMonat und intJahr, die Sie mit-
hilfe der Funktionen Day, Month und Year fllen, zerlegt.
Geben Sie danach das Datum zuerst unverndert im Direktfenster der Entwicklungsumge-
bung ber die Anweisung [Link] aus. Anschlieend setzen Sie die Einzelteile des
Datums, die nun in den Integer-Variablen vorliegen, in einer anderen Reihenfolge ber den
Einsatz des Verkettungsoperators & zusammen. Dabei geben Sie mithilfe der Funktion Format
an, dass die Tages- und Monatsangeben zweistellig sein mssen, da sonst Access die Nullen
bei einstelligen Tagen sowie Monaten verschlucken wrde. So wird der erste Januar nicht als
1.1.2004, sondern als 01.01.2004 ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub DatumZerlegen()
Dim DateBeginn As Date
Dim intTag As Integer
Dim intMonat As Integer
Dim intJahr As Integer
DateBeginn = Date
intTag = Day(DateBeginn)
intMonat = Month(DateBeginn)
intJahr = Year(DateBeginn)
[Link] "Aus: " & DateBeginn
[Link] "wird: " & Format(intTag, "00") & _
"-" & Format(intMonat, "00") & _
"-" & Format(intJahr, "0000")
End Sub
Listing 12: Datum zerlegen und wieder zusammensetzen
Abbildung 7: Die Funktion Day extrahiert den Tagesanteil aus einem Datum.
Sandini Bib
Die richtige Datumstabelle ffnen 35
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
10 Die richtige Datumstabelle ffnen
Im nchsten Beispiel aus Listing 13 wird das ffnen einer Tabelle abhngig vom Tagesdatum
vorgenommen. Dazu existieren in der Datenbank insgesamt zwlf Tabellen, von denen die
jeweilige Monatstabelle geffnet wird. Jede Monatstabelle wird mit dem Namen Monat
und der angehngten Monatsnummer identifiziert. Die Tabelle fr den Monat Mai heit
somit MONAT5.
Extrahieren Sie zunchst den Monatsanteil direkt aus der Funktion Now, die sowohl das aktu-
elle Tagesdatum als auch die aktuelle Uhrzeit zurckgibt. Danach wenden Sie die Methode
OpenTable an, um die entsprechende Tabelle zu ffnen. Sollte die Tabelle nicht gefunden wer-
den knnen, dann verhindert die Anweisung On Error GoTo Fehler einen Makroabsturz.
11 Erstellungsdatum einer Datenbank ermitteln
Die Funktion FileDatTime liefert das Erstellungsdatum einer Datei, ohne dass die Datei geff-
net sein muss. Die Syntax dieser Funktion lautet:
FileDateTime(Pfadname)
Das erforderliche Argument Pfadname ist ein Zeichenfolgenausdruck, der einen Dateinamen
angibt. Pfadname kann ein Verzeichnis oder einen Ordner sowie ein Laufwerk enthalten.
Im folgenden Beispiel aus Listing 14 wird das Erstellungsdatum der aktiven Datenbank
ermittelt und am Bildschirm ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub MonatsTabelleStarten()
Dim intMonat As Integer
On Error GoTo Fehler
intMonat = Month(Now())
[Link] "Monat" & intMonat
Exit Sub
Fehler:
MsgBox "Tabelle konnte nicht gefunden werden!", vbCritical
End Sub
Listing 13: Die entsprechende Monatstabelle ffnen
Sandini Bib
36 Allgemeine VBA-Funktionen
ber die Eigenschaft Name knnen Sie den kompletten Pfadnamen der Datenbank ermitteln
und an die Funktion FileDateTime bergeben. Die Methode CurrentDb gibt eine Objektvaria-
ble des Typs Database zurck, die der Datenbank entspricht, die momentan im Microsoft
Access-Fenster geffnet ist.
Im folgenden Beispiel aus Listing 15 wird auf eine andere, nicht geffnete Datenbank zuge-
griffen und das Erstellungsdatum der Datei ermittelt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub ErstellungsdatumAbfragen()
MsgBox "Datei erstellt am " & vbLf & _
FileDateTime([Link]), vbInformation
End Sub
Listing 14: Das Erstellungsdatum einer Datenbank ermitteln und ausgeben
Abbildung 8: Das Erstellungsdatum der aktuellen Datenbank abfragen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub ErstellungsdatumAbfragenAndereDB()
On Error GoTo fehler
MsgBox "Datei erstellt am " & vbLf & _
FileDateTime("C:\Eigene Dateien\[Link]"), vbInformation
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 15: Das Erstellungsdatum einer nicht geffneten Datenbank ermitteln
Sandini Bib
Erstellungsdatum einer Datenbank ermitteln 37
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Methode FileDateTime den vollen Pfad der Datenbank, deren Erstellungs-
datum Sie abfragen mchten. Die On Error-Anweisung tritt hier in Kraft, falls die Datenbank
bzw. das Verzeichnis nicht gefunden werden knnen. In diesem Fall wird in den Paragraphen
fehler verzweigt und ber das Objekt Err die eindeutige Fehlernummer sowie die Fehler-
beschreibung ausgegeben.
Im folgenden Beispiel aus Listing 16 wird ein komplettes Verzeichnis mit allen Dateien aus-
gelesen, gezhlt und das Erstellungsdatum einer jeden Datei in das Direktfenster der Ent-
wicklungsumgebung geschrieben.
Deklarieren Sie zu Beginn des Makros aus Listing 16 einige Variablen. In der Variablen str-
Ordner geben Sie das Verzeichnis an, aus dem Sie die Dateien auslesen mchten.
Diese starre Angabe knnen Sie beispielsweise auch dynamisch gestalten ber den Einsatz
einer API-Funktion, die einen Verzeichnisbaum in einem Dialogfenster anzeigt, aus dem Sie
dann das gewnschte Verzeichnis zur Laufzeit des Makros elegant auswhlen knnen. Dazu
aber mehr im nchsten Kapitel.
H
i
n
w
e
i
s
Das Erstellungsdatum ber die Methode FileDateTime knnen Sie nicht nur fr Daten-
bankdateien, sondern auch fr alle anderen Dateien anwenden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub ErstellungsdatumAlleDateienErmitteln()
Dim strOrdner As String
Dim intDatei As Integer
Dim strDatei As String
strOrdner = "C:\Eigene Dateien\"
strDatei = Dir(strOrdner & "*.*")
intDatei = 1
Do Until strDatei = ""
[Link] "Datei-Nr " & intDatei
[Link] "Dateiname: " & strDatei
[Link] "Erstellt am: " & FileDateTime(strOrdner & strDatei) & vbLf
strDatei = Dir
intDatei = intDatei + 1
Loop
End Sub
Listing 16: Das Erstellungsdatum aller Dateien eines Ordners ermitteln und ausgeben
Sandini Bib
38 Allgemeine VBA-Funktionen
In der Variabeln strDatei speichern Sie die erste Datei, die ber die Funktion Dir gefunden
wird. bergeben Sie der Funktion dabei den Ordner sowie einen Dateifilter. Das Krzel *,*
bedeutet, dass alle Dateien in diesem Verzeichnis gesucht werden sollen.
In einer Do until-Schleife suchen Sie nun so lange nach Dateien, bis keine mehr zu finden
sind. Innerhalb der Schleife geben Sie die jeweilige Nummer der Datei ber die Variable int-
Datei aus, die Sie bei jedem Schleifendurchlauf um den Wert 1 erhhen. Auch den Namen
jeder gefundenen Datei geben Sie im Direktfenster aus, dabei steht der Name jeweils in der
Variablen StrDatei, die bei jedem Schleifendurchlauf ebenfalls aktualisiert wird.
Bei der Ermittlung des Erstellungsdatums ber die Funktion FileDateTime mssen Sie darauf
achten, dass Sie den kompletten Pfad der gefundenen Datei an die Funktion bergeben.
ber den erneuten Einsatz der Funktion Dir innerhalb der Schleife fllen Sie die Variable
StrDatei mit dem Namen der nchsten gefundenen Datei.
12 Datumsangaben formatiert ausgeben
Fr das Anzeigen von Datums- und Zeitangaben stehen Ihnen fertige Systemkonstanten zur
Verfgung, die die Formatierung des Datums bzw. des Zeitwerts fr Sie bernehmen.
Diese Datums-/Zeitkonstanten werden im Zusammenspiel mit der Funktion FormatDateTime
verwendet. Die Syntax dieser Funktion lautet:
FormatDateTime(Datum[,BenanntesFormat])
Im Argument Datum bergeben Sie der Funktion einen Datumswert.
Abbildung 9: Die Namen und das Erstellungsdatum der Dateien wurde dokumentiert.
Sandini Bib
Datumsangaben formatiert ausgeben 39
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Argument BenanntesFormat whlen Sie eine der in der Tabelle folgenden Datums-/Zeit-
konstanten.
Im folgenden Beispiel aus Listing 17 wird ein Datum auf unterschiedlichste Art und Weise
im Direktfenster der Entwicklungsumgebung ausgegeben.
Konstante Wert Beschreibung
vbGeneralDate 0
Zeigt ein Datum und/oder eine Uhrzeit an. Wenn
es ein Datum gibt, wird es in Kurzform angezeigt.
Wenn es eine Uhrzeit gibt, wird sie im langen For-
mat angezeigt. Falls vorhanden, werden beide Teile
angezeigt.
vbLongDate 1
Zeigt ein Datum im langen Datumsformat an, das
in den Lndereinstellungen des Computers festge-
legt ist.
VbShortDate 2
Zeigt ein Datum im kurzen Datumsformat an, das
in den Lndereinstellungen des Computers festge-
legt ist.
vbLongTime 3
Zeigt eine Uhrzeit in dem Zeitformat an, das in
den Lndereinstellungen des Computers festgelegt
ist.
vbShortTime 4
Zeigt eine Uhrzeit im 24-Stunden-Format
(hh:mm) an.
Tabelle 6: Die Datumskonstanten
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub DatumFormatiertAusgeben()
Dim DateBeginn As Date
DateBeginn = Now
[Link] FormatDateTime(DateBeginn, vbGeneralDate)
[Link] FormatDateTime(DateBeginn, vbLongDate)
[Link] FormatDateTime(DateBeginn, vbShortDate)
[Link] FormatDateTime(DateBeginn, vbLongTime)
[Link] FormatDateTime(DateBeginn, vbShortTime)
End Sub
Listing 17: Tagesdatum verschiedenartig formatieren
Sandini Bib
40 Allgemeine VBA-Funktionen
Je nach Einsatz der Konstanten, die Sie bei der Funktion anwenden, sieht das Ergebnis anders
aus. Sehen Sie sich dazu die Ergebnisse in Abbildung 10 an.
13 Eine Pause einlegen ...
Neben den Datumsfunktionen Year, Month und Day gibt es auch Funktionen, um einen Zeit-
wert in seine Einzelteile zu zerlegen. Dabei gibt es folgende Zeitfunktionen:
Die Funktion Hour liefert die Stunde aus einem Datums-/Zeitwert als ganzzahligen Wert
(023).
Die Funktion Minute liefert die Minute aus einem Datums-/Zeitwert als ganzzahligen Wert
(059).
Die Funktion Second liefert die Sekunde aus einem Datums-/Zeitwert als ganzzahligen Wert
(059).
Die Syntax dieser Funktionen lautet:
Hour(Uhrzeit)
Minute(Uhrzeit)
Second(Uhrzeit)
Das erforderliche Argument Uhrzeit ist ein beliebiger Wert vom Typ Variant, ein numeri-
scher Ausdruck, ein Zeichenfolgenausdruck oder eine beliebige Kombination, die eine Uhr-
zeit darstellen kann.
Im folgenden Beispiel aus Listing 18 wird eine Zeitverzgerung in Access eingebaut. Dabei
soll die Verarbeitung fr genau 10 Sekunden unterbrochen werden.
Abbildung 10: Verschiedene Mglichkeiten, ein Datum auszugeben
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Listing 18: Die Anwendung fr 10 Sekunden anhalten
Sandini Bib
Monatsnamen ermitteln 41
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Speichern Sie zunchst die einzelnen Zeitwerte, indem Sie die Funktionen Hour, Minute und
Second einsetzen. Addieren Sie zur letzten Zeitansage den Wert 10, um die Makroverarbei-
tung um 10 Sekunden zu unterbrechen, und definieren Sie somit die Pausenzeit mithilfe der
Funktion TimeSerial. bergeben Sie diese Pausenzeit der Methode Wait.
14 Monatsnamen ermitteln
Anhand eines Datums knnen Sie recht leicht den Monatsnamen ermitteln. Wenn diese Auf-
gabe automatisiert erledigt werden soll, dann gibt es hierfr in VBA eine Funktion.
Die Funktion MonthName gibt eine Zeichenfolge zurck, die den festgelegten Monat angibt.
Die Syntax dieser Funktion lautet:
MonthName(Monat[, abkrzen])
Die Syntax der MonthName-Funktion besteht aus folgenden Teilen:
Im folgenden Beispiel aus Listing 19 wird der Monatsname aus dem aktuellen Tagesdatum
ermittelt und im Direktbereich der Entwicklungsumgebung ausgegeben.
Sub PauseEinlegen()
Dim dateStunde As Date
Dim dateMinute As Date
Dim dateSekunde As Date
Dim datePause As Date
MsgBox "Bitte OK klicken, dann 10 Sekunden warten!"
dateStunde = Hour(Now())
dateMinute = Minute(Now())
dateSekunde = Second(Now()) + 10
datePause = TimeSerial(dateStunde, dateMinute, dateSekunde)
[Link] datePause
MsgBox "Die 10 Sekunden sind abgelaufen", vbInformation
End Sub
Teil Beschreibung
Monat
Die numerische Bezeichnung des Monats, z. B. 1 fr Januar, 2 fr Februar
usw.
Abkrzen Optionales Argument. Boolescher Wert, der angibt, ob der Monatsname
abgekrzt wird. Wird er ausgelassen, ist die Standardeinstellung False, d.h.,
der Monatsname wird nicht abgekrzt.
Tabelle 7: Die Argumente der Funktion MonthName
Listing 18: Die Anwendung fr 10 Sekunden anhalten (Forts.)
Sandini Bib
42 Allgemeine VBA-Funktionen
Die Funktionsweise der Zeilen knnen Sie im Prinzip von rechts nach links lesen. Zuerst
wird der Monatsteil ber die Funktion Month aus dem aktuellen Tagesdatum ermittelt.
Danach wird diese Nummer, die zwischen 1 und 12 liegt, an die Funktion MonthName berge-
ben. Die Funktion MonthName macht daraus automatisch den dazugehrigen Monatsnamen.
In gekrzter Form lauten diese Namen Jan bis Dez und in normaler Form Januar bis Dezem-
ber.
15 Wochentag ermitteln
Auf den ersten Blick etwas schwieriger ist es, aus einem Datum, das in der Zukunft oder der
Vergangenheit liegt, den exakten Tagesnamen zu ermitteln, sofern kein Kalender zur Hand
ist. Mithilfe von VBA ist diese Aufgabe ein Kinderspiel. Dabei wird die Aufgabe im Zusam-
menspiel zweier Funktionen gelst: WeekDay und WeekDayName.
Soll aus einem Tagesdatum der dazugehrige Wochentag ermittelt werden, dann knnen Sie
die Funktion Weekday einsetzen. Diese Funktion gibt den Wochentag aus einem Datumswert
zurck (17). Die Syntax lautet:
Weekday(date, [firstdayofweek])
Die Syntax fr die Weekday-Funktion besteht aus folgenden benannten Argumenten:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Sub MonatsnameErmitteln()
[Link] "Heute ist der " & Date
[Link] "verkrzt: " & MonthName(Month(Date), True)
[Link] "normal: " & MonthName(Month(Date), False)
End Sub
Listing 19: Den Monatsnamen ermitteln
Abbildung 11: Den Monatsnamen aus einem Datum extrahieren
Sandini Bib
Wochentag ermitteln 43
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Das Argument firstdayofweek hat folgende Einstellungen:
Die Funktion WeekDayName gibt eine Zeichenfolge zurck, die den festgelegten Wochentag
angibt. So erwartet diese Funktion einen Wert zwischen 1 und 7, um daraus einen lesbaren
Wochentag in der Form Montag bis Sonntag zu machen. Die Syntax dieser Funktion lautet:
WeekdayName(Wochentag, abkrzen, ErsterWochentag)
Die Syntax der WeekdayName-Funktion besteht aus folgenden Teilen:
Teil Beschreibung
Date Erforderlich. Wert vom Typ Variant, numerischer Ausdruck, Zei-
chenfolgenausdruck oder eine beliebige Kombination, die ein Datum
darstellen kann. Wenn Date den Wert Null enthlt, wird Null zurck-
gegeben.
Firstdayofweek Optional. Eine Konstante, die den ersten Wochentag angibt. Wird die
Konstante nicht angegeben, so wird vbSunday angenommen.
Tabelle 8: Die Argumente der Funktion Weekday
Konstante Wert Beschreibung
vbUseSystem 0 NLS API-Einstellung wird verwendet.
VbSunday 1 Sonntag (Voreinstellung)
vbMonday 2 Montag
vbTuesday 3 Dienstag
vbWednesday 4 Mittwoch
vbThursday 5 Donnerstag
vbFriday 6 Freitag
vbSaturday 7 Samstag
Tabelle 9: Die Argumente von Firstdayofweek
Teil Beschreibung
Wochentag
Erforderlich. Die numerische Bezeichnung des Wochentags. Der
numerische Wert der einzelnen Tage hngt von der Einstellung
fr ErsterWochentag ab.
Abkrzen
Optional. Boolescher Wert, der angibt, ob der Name des Wochen-
tags abgekrzt wird. Wird er ausgelassen, ist die Standardeinstel-
lung False, d.h., der Name des Wochentags wird nicht abgekrzt.
ErsterWochentag
Optional. Numerischer Wert, der den ersten Tag der Woche
angibt.
Tabelle 10: Die Argumente der Funktion WeekdayName
Sandini Bib
44 Allgemeine VBA-Funktionen
Im folgenden Listing 20 werden ausgehend von einem vorgegebenen Datum der dazugeh-
rige Wochentag sowie das Quartal ermittelt.
Die Funktion Weekday gibt einen Wert zwischen 1 und 7 zurck. Diesen Wert bergeben Sie
an die Funktion WeekDayName, die dann in ausgeschriebener Form den Tagesnamen liefert.
Das Quartal eines Datums knnen Sie ber die Funktion DatePart ermitteln. Whlen Sie
dabei als erstes Argument das Krzel q, damit die Funktion wei, dass das Quartal des ber-
gebenen Datums ermittelt werden soll.
16 Buchstaben aus Zeichenfolgen entfernen
Um festzustellen, ob es sich bei einem Zeichen um ein alphanumerisches oder ein numeri-
sches Zeichen handelt, knnen Sie die Funktion ASC einsetzen. Diese Funktion gibt einen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlDate
'=====================================================
Function Quartal(DatAngabe)
Quartal = DatePart("q", DatAngabe)
End Function
Function Wochentag(DatAngabe)
Wochentag = WeekdayName(Weekday(DatAngabe, vbUseSystemDayOfWeek), False)
End Function
Sub WochenTagUndQuartal()
[Link] " Dieses Datum liegt im " & Quartal("20.07.2004") & " .Quartal!"
[Link] " Der Wochentag ist ein " & Wochentag("20.07.2004")
End Sub
Listing 20: Quartal- und Wochentagnamen ermitteln
Abbildung 12: Der Wochentag sowie das Quartal wurden ausgelesen.
Sandini Bib
Buchstaben aus Zeichenfolgen entfernen 45
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Wert vom Typ Integer zurck, der den Zeichencode entsprechend dem ersten Buchstaben in
einer Zeichenfolge darstellt. Die Syntax dieser Funktion lautet:
Asc(Zeichenfolge)
Das erforderliche Argument Zeichenfolge ist ein beliebiger gltiger Zeichenfolgenausdruck.
Wenn Zeichenfolge keine Zeichen enthlt, tritt ein Laufzeitfehler auf.
Im folgenden Beispiel aus Listing 21 werden ber eine benutzerdefinierte Funktion alle
Buchstaben aus einem Text entfernt, so dass nur noch Zahlenwerte zurckbleiben.
bergeben Sie der Funktion BuchstRaus einen Text, der sowohl Buchstaben als auch Zahlen-
werte beinhaltet.
Setzen Sie in der Funktion eine Schleife auf, die Zeichen fr Zeichen abarbeitet. Prfen Sie
mithilfe der Funktion Asc das jeweils aktuelle Zeichen des bergebenen Textes aus dem
Makro BuchstabenUndZahlen, indem Sie dieses in einen Integer-Wert umwandeln. Mit der
Funktion Mid extrahieren Sie dabei jeweils das nchste Zeichen aus dem bergebenen Text.
Dabei entsprechen die Werte 65 bis 90 Kleinbuchstaben, die Werte 97 bis 122 den Grobuch-
staben und die restlichen Werte den Sonderzeichen.
Als Rckgabe der Funktion werden nur noch numerische Zeichen an das aufrufende Makro
zurckgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Function BuchstRaus(s As String) As String
Dim intZ As Integer
For intZ = 1 To Len(s)
Select Case Asc(Mid(s, intZ, 1))
Case 0 To 64, 123 To 197
BuchstRaus = BuchstRaus & Mid(s, intZ, 1)
End Select
Next intZ
End Function
Sub BuchstabenUndZahlen()
MsgBox "Aus 'Wert0815' " & vbLf & "bleibt brig" & _
vbLf & BuchstRaus("Wert0815"), vbInformation
End Sub
Listing 21: Buchstaben aus Zeichenfolgen entfernen
Sandini Bib
46 Allgemeine VBA-Funktionen
17 Zahlen aus Zeichenfolgen entfernen
Analog zur Lsung aus Listing 21 knnen Sie ebenso numerische Werte aus einer Zeichen-
folge entfernen, indem Sie das Makro aus Listing 22 starten.
Als Erweiterung zum Makro aus Listing 21 wurde im Makro aus Listing 22 ein Case Else-
Zweig eingefgt, in dem die Zerstckelung durchgefhrt wird.
Abbildung 13: Alle Buchstaben in der Zeichenfolge wurden entfernt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Function ZahlenRaus(s As String) As String
Dim intZ As Integer
For intZ = 1 To Len(s)
Select Case Asc(Mid(s, intZ, 1))
Case 0 To 64, 123 To 197
Case Else
ZahlenRaus = ZahlenRaus & Mid(s, intZ, 1)
End Select
Next intZ
End Function
Sub ZahlenUndBuchstaben()
MsgBox "Aus 'Wert0815' " & vbLf & "bleibt brig" & _
vbLf & ZahlenRaus("Wert0815"), vbInformation
End Sub
Listing 22: Zahlen aus Zeichenfolge entfernen
Abbildung 14: Alle Zahlen wurden aus der Zeichenfolge entfernt.
Sandini Bib
Zahlungsart definieren 47
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
18 Zahlungsart definieren
Um Schreibarbeit zu sparen, knnen Sie beispielsweise eine Zahlungsart ber eine Nummer
definieren und ansprechen, dann knnen Sie die Funktion Choose einsetzen. Diese Funktion
whlt einen Wert aus einer Liste von Argumenten aus und gibt ihn zurck. Die Syntax fr
diese Funktion lautet:
Choose(Index, Auswahl-1[, Auswahl-2, ... [, Auswahl-n]])
Im folgenden Beispiel aus Listing 23 wird ber eine Funktion die Zahlungsart ermittelt.
Das erste Wort in der Argumentfolge ist das Wort Bar. Es kann ber die Nummer 1 angespro-
chen werden. Auf diese Art und Weise knnen beispielsweise auch ganze Stze ber kurze
Nummern angesprochen werden.
19 Aus Zahlen Buchstaben machen
Die Funktion Chr gibt einen Wert vom Typ String zurck, der das Zeichen enthlt, das dem
angegebenen Zeichencode zugeordnet ist. Die Syntax dieser Funktion lautet:
Chr(Zeichencode)
Das erforderliche Argument Zeichencode ist ein Wert vom Typ Long, der ein Zeichen festlegt.
Teil Beschreibung
Index
Erforderlich. Numerischer Ausdruck oder Feld, der bzw. das einen Wert von
1 bis zur Anzahl der mglichen Auswahlwerte ergibt.
Auswahl
Erforderlich. Ein Variant-Ausdruck, der einen der mglichen Auswahlwerte
enthlt.
Tabelle 11: Die Argumente der Funktion Choose
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Function Auswahl(intz As Integer)
Auswahl = Choose(intz, "Bar", "EC", "Rechnung")
End Function
Sub AutoTexte()
[Link] Auswahl(1)
[Link] Auswahl(2)
[Link] Auswahl(3)
End Sub
Listing 23: Die Zahlungsart ber eine Nummer auswhlen
Sandini Bib
48 Allgemeine VBA-Funktionen
Im folgenden Beispiel aus Listing 24 werden mithilfe der Funktion Chr aus einzelnen Zahlen
Buchstaben gewonnen und in den Direktbereich geschrieben.
bergeben Sie der Funktion Chr einen Wert zwischen 65 und 90. Damit knnen Grobuch-
staben erzeugt werden.
Abbildung 15: Autotexte wie z.B. die Zahlungsart ber eine Nummer ansprechen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub AusZahlenBuchstabenErzeugen()
Dim intz As Integer
For intz = 65 To 90
[Link] Chr(intz)
Next intz
End Sub
Listing 24: Die Zahlen 65 bis 90 stehen fr die Grobuchstaben.
Abbildung 16: Zahlen wurden in Buchstaben umgewandelt.
Sandini Bib
Zeichenfolgen vergleichen 49
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
20 Zeichenfolgen vergleichen
Um zwei Zeichenfolgen miteinander zu vergleichen bzw. um festzustellen, ob eine Zeichen-
folge in einer anderen Zeichenfolge auftaucht, setzen Sie die Funktion InStr ein. ber diese
Funktion knnen Sie einen Wert vom Typ Variant (Long) zurckgeben, der die Position des
ersten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichenfolge angibt.
InStr([Start, ]Zeichenfolge1, Zeichenfolge2[, Vergleich])
Die Syntax der InStr-Funktion verwendet die folgenden Argumente:
Als Rckgabewerte der Funktion InStr gelten folgende Argumente.
Teil Beschreibung
Start
Optional. Numerischer Ausdruck, der die Startposition fr die Suche
festlegt. Wird Start nicht angegeben, so beginnt die Suche mit dem
ersten Zeichen in der Zeichenfolge. Wenn Start den Wert Null ent-
hlt, tritt ein Fehler auf. Bei Angabe von Vergleich muss auch das
Argument Start angegeben werden.
Zeichenfolge1
Erforderlich. Durchsuchter Zeichenfolgenausdruck.
Zeichenfolge2
Erforderlich. Gesuchter Zeichenfolgenausdruck.
Vergleich
Optional. Legt die Art des Zeichenfolgenvergleichs fest.
Der Wert Null fr Vergleich fhrt zu einem Fehler.
Tabelle 12: Die Argumente der Funktion InStr
Konstante Wert Beschreibung
vbUseCompareOption -1
Fhrt einen Vergleich mithilfe der Option
Compare-Anweisung durch.
vbBinaryCompare 0
Fhrt einen binren Vergleich durch.
vbTextCompare 1
Fhrt einen textbasierten Vergleich durch.
vbDatabaseCompare 2
Nur Microsoft Access. Fhrt einen Vergleich
durch, der auf Informationen in Ihrer Daten-
bank basiert.
Tabelle 13: Die Vergleichstypen der Funktion InStr
Fall Rckgabewerte von InStr
Zeichenfolge1 hat die Lnge Null.
0
Zeichenfolge1 ist Null.
Null
Zeichenfolge2 hat die Lnge Null.
start
Zeichenfolge2 ist Null.
Null
Tabelle 14: Die Rckgabewerte der Funktion InSt
Sandini Bib
50 Allgemeine VBA-Funktionen
Im folgenden Beispiel aus Listing 25 wird geprft, ob es sich um eine gltige E-Mail-Adresse
handelt. Dabei wird von der Prmisse ausgegangen, dass eine E-Mail-Adresse dann gltig ist,
wenn das Zeichen @ in der Mail-Adresse vorkommt.
Wird die Zeichenfolge @ in der Variablen s gefunden, dann meldet die Funktion einen Rck-
gabewert grer 1 zurck. Dabei wird die genaue Position des gesuchten Zeichens zurckge-
geben. Fngt die E-Mail-Adresse mit der Zeichenfolge @ an, so handelt es sich um eine nicht
gltige E-Mail-Adresse.
Wollen Sie den E-Mail-Adressencheck ein wenig erweitern und beispielsweise sicherstellen,
dass keine Umlaute wie , und eingesetzt werden, dann starten Sie das Makro aus Listing
26.
Zeichenfolge2 ist nicht vorhanden
0
Zeichenfolge2 ist in Zeichenfolge1 enthalten. Position, an der die bereinstimmung beginnt
Start > Zeichenfolge2
0
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub EMailCheck()
Dim strUrl As String
strUrl = "Held-office@[Link]"
If InStr(strUrl, "@") > 1 Then
MsgBox "E-Mail gltig!"
Else
MsgBox "E-Mail ungltig!"
End If
End Sub
Listing 25: ber die Funktion Instr nach dem Zeichen @ suchen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Listing 26: Die erweiterte E-Mail-Adressenprfung
Fall Rckgabewerte von InStr
Tabelle 14: Die Rckgabewerte der Funktion InSt (Forts.)
Sandini Bib
Den Pfad- und Dateinamen einer Datenbank zerlegen 51
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Bei der Lsung aus Listing 26 wird neben der Existenz des Zeichens @ noch nach Umlauten
geprft. Wenn Umlaute in der E-Mail-Adresse enthalten sind, dann meldet die Funktion
InStr einen Wert ungleich 0.
21 Den Pfad- und Dateinamen einer Datenbank
zerlegen
Im vorherigen Beispiel haben Sie das Zeichen @ in einer Zeichenfolge gesucht. Dabei suchte
diese Funktion beginnend vom linken Rand der Zeichenfolge.
Muss nun vom rechten Rand einer Zeichenfolge gesucht werden, dann setzen Sie die Funk-
tion InStrRev ein. Bei dieser Funktion wird die Suche beginnend vom rechten Rand einer
Zeichenfolge gestartet.
InstrRev(stringcheck, stringmatch [, start[, compare]])
Die Syntax der InstrRev-Funktion besteht aus folgenden benannten Argumenten:
Sub EMailCheckErW()
Dim strUrl As String
strUrl = "Held-ffice@[Link]"
If InStr(strUrl, "@") > 1 Then
If InStr(strUrl, "") > 0 Or InStr(strUrl, "") > 0 _
Or InStr(strUrl, "") > 0 Then
MsgBox "E-Mail ungltig! Enthlt Umlaute!"
Else
MsgBox "E-Mail gltig!"
End If
Else
MsgBox "E-Mail ungltig! das Zeichen @ fehlt"
End If
End Sub
Teil Beschreibung
Stringcheck
Erforderlich. Der zu durchsuchende Zeichenfolgenausdruck.
Stringmatch
Erforderlich. Zeichenfolgenausdruck, nach dem gesucht wird.
Start
Optional. Numerischer Ausdruck, der die Anfangsposition fr
jede Suche festlegt. Wird er ausgelassen, wird 1 verwendet, d.h.,
die Suche beginnt an der letzten Zeichenposition.
Tabelle 15: Die Argumente der Funktion InStrRev
Listing 26: Die erweiterte E-Mail-Adressenprfung (Forts.)
Sandini Bib
52 Allgemeine VBA-Funktionen
Im folgenden Beispiel aus Listing 27 wird der komplette Pfad sowie der Pfad und der Datei-
namen der aktiven Datenbank ermittelt.
Aus der Eigenschaft Name, in der der Name der Datei sowie der komplette Speicherpfad ver-
zeichnet sind, werden die einzelnen Informationen herausgezogen. Dabei wird ber die
Funktion InStrRev nach dem Zeichen \ gesucht, und zwar von der rechten Seite des kom-
pletten Namens aus. Die Position wird hierbei in der Variablen intPos zwischengespeichert.
So bekommen Sie den Pfad, indem Sie vom linken Rand so viele Zeichen bertragen, wie in
der Variablen intPos gespeichert wurden.
Soll nur der Name der Datenbank extrahiert werden, dann wenden Sie die Funktion Mid an,
um in der Mitte des kompletten Namenstextes aufzusetzen. Dabei soll das Zeichen \ nicht
mehr mit bertragen werden. Daher addieren Sie zur Variablen intPos noch den Wert 1.
Anwender der Version Access 97 haben beim Makro aus Listing 27 Pech. Leider gibt es diese
Funktion erst ab Access 2000. Fr Access 97-Anwender muss daher folgende Syntax aus
Listing 28 gelten.
Compare
Optional. Numerischer Wert, der die Art des Vergleichs angibt, der
beim Beurteilen von untergeordneten Zeichenfolgen verwendet
werden soll. Wird er ausgelassen, wird ein binrer Vergleich aus-
gefhrt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub PfadUndDateiNamen()
Dim intPos As Integer
Dim strPfad As String
Dim strName As String
intPos = InStrRev([Link], "\")
strPfad = Left([Link], intPos)
strName = Mid([Link], intPos + 1)
MsgBox "Komplett: " & [Link] & _
vbLf & "Pfad: " & strPfad & vbLf & "Datei: " & strName
End Sub
Listing 27: Den Pfad- und Dateinamen separieren (ab Access 2000)
Teil Beschreibung
Tabelle 15: Die Argumente der Funktion InStrRev (Forts.)
Sandini Bib
Den Pfad- und Dateinamen einer Datenbank zerlegen 53
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
In einer Do until-Schleife arbeiten Sie den kompletten Datei- und Pfadamen ab, indem Sie
jeweils ber die Funktion Instr vom linken Rand aus nach dem Zeichen \ suchen, bis Sie
am rechten Rand angekommen sind.
Den Pfad knnen Sie danach ber den Einsatz der Funktion Left ermitteln, indem Sie vom
linken Textrand so viele Zeichen bertragen, wie in der Variablen AltPos verzeichnet sind.
Den Namen der Datei bekommen Sie, indem Sie ausgehend von der letzten Fundstelle des
Zeichens \, welche in der Variablen AltPos verzeichnet ist, den Wert 1 hinzuaddieren und
danach genau von dieser Stelle beginnen, mithilfe der Funktion Mid die restlichen Zeichen zu
bertragen.
Abbildung 17: Alle Informationen wurden aus einer Angabe separiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub PfadUndDateiAccess97()
Dim intPos As Integer
Dim AltPos As Integer
Dim strPfad As String
Dim strName As String
intPos = 1
Do Until intPos = 0
AltPos = intPos
intPos = InStr(intPos + 1, [Link], "\")
Loop
strPfad = Left([Link], AltPos)
strName = Mid([Link], AltPos + 1)
MsgBox "Komplett: " & [Link] & _
vbLf & "Pfad: " & strPfad & vbLf & "Datei: " & strName
End Sub
Listing 28: Pfad- und Dateinamen separieren (Access 97)
Sandini Bib
54 Allgemeine VBA-Funktionen
22 Zeichenfolgen splitten und zusammenfhren
Die Funktion Join gibt eine Zeichenfolge zurck, die sich aus der Kombination einer Reihe
von untergeordneten Zeichenfolgen ergibt, die in einem Datenfeld enthalten sind. Die Syn-
tax dieser Funktion lautet:
Join(sourcearray [, delimiter])
Die Syntax der Join-Funktion besteht aus folgenden benannten Argumenten:
Die Funktion Split gibt ein nullbasiertes, eindimensionales Datenfeld zurck, das eine fest-
gelegte Anzahl an untergeordneten Zeichenfolgen enthlt.
Split(expression[, delimiter[, limit[, compare]]])
Im folgenden Beispiel aus Listing 29 wird ein Text ber die Funktion Split zerlegt, aufberei-
tet und anschlieend mithilfe der Funktion Join wieder zusammengebastelt.
Teil Beschreibung
Sourcearray
Erforderlich. Eindimensionales Datenfeld, das die zu kombinierenden,
untergeordneten Zeichenfolgen enthlt.
Delimiter
Optional. Zeichen einer Zeichenfolge, mit dem die untergeordneten Zei-
chenfolgen in der zurckgegebenen Zeichenfolge getrennt werden. Wird es
ausgelassen, wird das Leerstellenzeichen (" ") verwendet. Wenn delimiter
eine Zeichenfolge der Lnge Null ("") ist, werden alle Elemente in der Liste
ohne Trennzeichen verkettet.
Tabelle 16: Die Argumente der Funktion Join
Teil Beschreibung
Expression
Erforderlich. Zeichenfolgenausdruck, der untergeordnete Zeichenfolgen und
Trennzeichen enthlt. Wenn expression eine Zeichenfolge der Lnge Null ("")
ist, gibt Split ein leeres Datenfeld zurck, d. h. ein Datenfeld ohne Elemente
und ohne Daten.
Delimiter
Optional. Zeichen einer Zeichenfolge, mit der die Grenzen von untergeord-
neten Zeichenfolgen identifiziert werden. Wird es ausgelassen, wird das Leer-
stellenzeichen (" ") als Trennzeichen verwendet. Wenn delimiter eine
Zeichenfolge der Lnge Null ist, wird ein aus einem Element bestehendes
Datenfeld, das die gesamte Zeichenfolge von expression enthlt, zurck-
gegeben.
Limit
Optional. Anzahl der zurckzugebenden, untergeordneten Zeichenfolgen;
1 gibt an, dass alle untergeordneten Zeichenfolgen zurckgegeben werden.
Compare
Optional. Numerischer Wert, der die Art des Vergleichs angibt, der beim
Beurteilen von untergeordneten Zeichenketten verwendet werden soll.
Tabelle 17: Die Argumente der Funktion Split
Sandini Bib
Zeichenfolgen splitten und zusammenfhren 55
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Funktion Split zerlegen Sie zuerst einmal den Inhalt der Variablen strText anhand
des Trennzeichens Semikolon in seine Einzelbestandteile. Dabei schichten Sie die einzelnen
Inhalte in ein Datenfeld um. ber die Funktion UBound knnen Sie die Gre des Datenfelds
ermitteln. Diese Funktion liefert den letzten Wert im Datenfeld und gibt diesen als Zhl-
variable zurck. Danach setzen Sie eine Schleife auf, die beginnend vom ersten Eintrag im
Datenfeld (=0) bis zum letzten Eintrag im Datenfeld luft und ber die Funktion UCase den
Text in Grobuchstaben umwandelt. Im Anschluss an die Schleife wenden Sie die Funktion
Join an, um das Datenfeld wieder in ein Gesamt-Feld auszulesen. Geben Sie dabei bei-
spielsweise ein anderes Trennzeichen an.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub JoinSlpitt()
Dim strText As String
Dim Varray As Variant
Dim intZ As Integer
Dim intGesamt As Integer
strText = "Vorname;Nachame;Strae;PLZ;Ort"
[Link] "Vor Konvertierung: " & strText
Varray = Split(strText, ";")
intGesamt = UBound(Varray)
For intz = 0 To iGesamt
Varray(intz) = UCase(Varray(intz))
Next intz
Varray = Join(Varray, "-")
[Link] "Nach Konvertierung: " & Varray
End Sub
Listing 29: Texte zerlegen, aufbereiten und wieder zusammensetzen
Abbildung 18: Text wurde zerlegt, aufbereitet und wieder zusammengesetzt.
Sandini Bib
56 Allgemeine VBA-Funktionen
23 In Gro- und Kleinschreibung umwandeln
Fr die Konvertierung von Texten in die Gro- bzw. Kleinschreibung stehen Ihnen die fol-
genden beiden Funktionen zur Verfgung.
Die Funktion LCase wandelt Grobuchstaben in Kleinbuchstaben um. Die Syntax dieser
Funktion lautet:
LCase(Zeichenfolge)
Die Funktion UCase wandelt Kleinbuchstaben in Grobuchstaben um. Die Syntax dieser
Funktion lautet:
UCase(Zeichenfolge)
Das erforderliche Argument Zeichenfolge ist ein beliebiger gltiger Zeichenfolgenausdruck.
Im folgenden Beispiel aus Listing 30 wird ein Text in Kleinbuchstaben konvertiert.
Eine weitere Mglichkeit, Texte in Gro- bzw. Kleinbuchstaben umzuwandeln, bietet die
Funktion StrConv. Diese Funktion gibt einen Wert vom Typ Variant (String) zurck, der wie
angegeben umgewandelt wurde. Die Syntax der Funktion sieht wie folgt aus:
StrConv(string, conversion, LCID)
Die Syntax der StrConv-Funktion besteht aus folgenden benannten Argumenten:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub TextKleinMachen()
Dim strText As String
strText = "TEST"
MsgBox LCase(strText)
End Sub
Listing 30: Text in Kleinbuchstaben umwandeln
Teil Beschreibung
String
Erforderlich. Zeichenfolgenausdruck, der umgewandelt werden soll.
Conversion
Erforderlich. Wert vom Typ Integer. Die Summe der Werte, die den Typ
der auszufhrenden Umwandlung angibt.
LCID
Optional. Die Gebietsschema-ID, wenn diese sich von der des Systems
unterscheidet. (Die Gebietsschema-ID des Systems ist die Voreinstel-
lung.)
Tabelle 18: Die Argumente der Funktion StrConv
Sandini Bib
In Gro- und Kleinschreibung umwandeln 57
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 31 wird jeweils der erste Buchstaben eines jeden neuen
Wortes in Grobuchstaben umgewandelt.
bergeben Sie der Funktion StrConv den String aus der Variablen StrText und geben Sie als
Argument die Konstante vbProperCase an, um jeweils den ersten Buchstaben eines Wortes
gro auszugeben.
Konstante Wert Beschreibung
vbUpperCase 1
Wandelt die Zeichenfolge in Grobuchstaben um.
VbLowerCase 2
Wandelt die Zeichenfolge in Kleinbuchstaben um.
VbProperCase 3
Wandelt den ersten Buchstaben jedes Wortes innerhalb
der Zeichenfolge in einen Grobuchstaben um.
vbWide* 4
Wandelt schmale (Einzel-Byte) Zeichen innerhalb der
Zeichenfolge in breite (Doppel-Byte) Zeichen um.
vbNarrow 8
Wandelt breite (Doppel-Byte) Zeichen innerhalb der
Zeichenfolge in schmale (Einzel-Byte) Zeichen um.
vbKatakana 16
Wandelt Hiragana-Zeichen innerhalb der Zeichenfolge in
Katakana-Zeichen um.
vbHiragana 32
Wandelt Katakana-Zeichen innerhalb der Zeichenfolge in
Hiragana-Zeichen um.
vbUnicode 64
Wandelt die Zeichenfolge in Unicode um und verwendet
dabei die Voreinstellungen aus der Zeichenumsetzungs-
tabelle des Systems (nicht verfgbar auf dem Macintosh).
VbFromUnicode 128
Wandelt die Zeichenfolge von Unicode in die Voreinstel-
lungen aus der Zeichenumsetzungstabelle des Systems
um (nicht verfgbar auf dem Macintosh).
Tabelle 19: Einstellungen fr das Argument conversion
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub KonvertierungText()
Dim strText As String
strText = "access codebook"
MsgBox StrConv(strText, vbProperCase)
End Sub
Listing 31: Texte schnell konvertieren ber die Funktion StrConv
Sandini Bib
58 Allgemeine VBA-Funktionen
24 Access-Version feststellen
Um die im Einsatz befindliche Access-Version festzustellen, knnen Sie die Eigenschaft
Version des Objekts Application abfragen. Diese Eigenschaft liefert die Versionsnummer, die
Sie auswerten knnen. So liefert die Funktion beispielsweise folgende Werte:
Access-95: 7
Access-97: 8
Access 2000: 9
Access 2002: 10.0
Access 2003: 11.0
ber die Funktion Left knnen Sie jetzt die erste Ziffer der Versionsnummer prfen. Wenn
diese beispielsweise den Wert 1 zurckliefert, dann haben Sie eine neuere Version im Einsatz.
Die Funktion Left gibt einen Wert vom Typ Variant (String) zurck, der eine bestimmte
Anzahl von Zeichen ab dem ersten (linken) Zeichen einer Zeichenfolge enthlt. Die Syntax
dieser Funktion lautet:
Left(string, length)
Die Left-Funktion verwendet die folgenden benannten Argumente:
Im folgenden Beispiel aus Listing 32 wird eine Versionsprfung in Access durchgefhrt.
Manchmal bereiten gerade ltere Access-Versionen bei der Programmierung Kummer, weil
bestimmte VBA-Befehle noch nicht im Befehlswortschatz sind und daher Makroabstrze
verursachen.
Teil Beschreibung
String
Erforderlich. Zeichenfolgenausdruck, aus dem die ersten (linken) Zeichen
zurckgegeben werden. Wenn string den Wert Null enthlt, wird Null zurck-
gegeben.
Length
Erforderlich; Wert vom Typ Variant (Long). Numerischer Ausdruck, der die
Anzahl der zurckzugebenden Zeichen angibt. Der Wert 0 fhrt zur Rckgabe
einer Null-Zeichenfolge (""). Ist length grer oder gleich der Zeichenanzahl in
string, so wird die gesamte Zeichenfolge zurckgegeben.
Tabelle 20: Die Argumente der Funktion Left
Sandini Bib
Text Zeichen fr Zeichen zerlegen 59
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
In einer Select Case-Anweisung werten Sie die Eigenschaft Version aus. Diese Eigenschaft
gibt eine Nummer zurck, ber die Sie die Access-Version identifizieren knnen. Dabei wird
im Beispiel aus Listing 32 nur die erste Ziffer der Versionsnummer ber die Funktion Left
extrahiert. Access-Versionen ab Access 2002, die die Versionsnummern 10 und 11 haben,
werden dann automatisch ber den Case Else-Zweig bedient.
25 Text Zeichen fr Zeichen zerlegen
Mchten Sie einen Text Zeichen fr Zeichen zerlegen, dann knnen Sie fr diese Aufgabe die
Funktion Mid einsetzen. Diese Funktion gibt einen Wert vom Typ Variant (String) zurck,
der eine bestimmte Anzahl von Zeichen aus einer Zeichenfolge enthlt. Die Syntax der Funk-
tion lautet:
Mid(string, start[, length])
Die Syntax der Mid-Funktion verwendet die folgenden benannten Argumente:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub AccessVersionErmitteln()
MsgBox [Link]
Select Case Left([Link], 1)
Case "5"
MsgBox "Sie haben Access 5 im Einsatz"
Case "7"
MsgBox "Sie haben Access 95 im Einsatz"
Case "8"
MsgBox "Sie haben Access 97 im Einsatz"
Case "9"
MsgBox "Sie haben Access 2000 im Einsatz"
Case Else
MsgBox "Access 2002 und hher!"
End Select
End Sub
Listing 32: Die Access-Version ermitteln und auswerten
Sandini Bib
60 Allgemeine VBA-Funktionen
Im nchsten Beispiel aus Listing 33 wird der Text Buchstabe fr Buchstabe zerlegt und in ein-
zelnen Zeilen im Direktfenster ausgegeben.
In einer Schleife arbeiten Sie sich zeichenweise durch den Vorgabetext durch. Dabei ermitteln
Sie ber die Funktion Len zuerst einmal die Gesamtlnge des Vorgabetextes in der Variablen
strText. Diese Gesamtlnge wird als Endekriterium fr die Schleife verwendet. Innerhalb der
Schleife zerlegen Sie den Text Zeichen fr Zeichen mithilfe der Funktion Mid und geben die
einzelnen Buchstaben im Direktfenster der Entwicklungsumgebung aus.
26 Dateiendung prfen
Soll die Endung einer Datei berprft werden, dann knnen Sie so vorgehen, dass Sie vom
Gesamtnamen, beispielsweise [Link] die letzten drei Zeichen extrahieren und aus-
werten.
Teil Beschreibung
string
Erforderlich. Zeichenfolgenausdruck, aus dem Zeichen zurckgegeben
werden. Wenn string den Wert Null enthlt, wird Null zurckgegeben.
start
Erforderlich. Wert vom Typ Long. Position in string, an der die zurckzuge-
bende Zeichenfolge beginnt. Ist start grer als die Anzahl der Zeichen in
string, so gibt Mid eine leere Zeichenfolge ("") zurck.
length
Optional. Wert vom Typ Variant (Long). Anzahl der zurckzugebenden Zei-
chen. Wird length nicht angegeben oder befinden sich weniger Zeichen im
Text (das Zeichen an der Stelle start eingeschlossen), als durch length angege-
ben, so werden alle Zeichen ab start bis zum Ende der Zeichenfolge zurck-
gegeben.
Tabelle 21: Die Argumente der Funktion Mid
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub TextZerlegen()
Dim intZ As Integer
Dim StrText As String
StrText = "Access-Codebook"
For intZ = 1 To Len(StrText)
[Link] Mid(StrText, intZ, 1)
Next intZ
End Sub
Listing 33: Einen Text Zeichen fr Zeichen zerlegen und ausgeben
Sandini Bib
Dateiendung prfen 61
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Diese Aufgabe knnen Sie ber die Funktion Right erledigen. Diese Funktion gibt einen Wert
vom Typ Variant (String) zurck, der eine bestimmte Anzahl von Zeichen von der rechten
Seite (dem Ende) einer Zeichenfolge enthlt. Die Syntax der Funktion lautet:
Right(string, length)
Die Syntax der Right-Funktion verwendet die folgenden benannten Argumente:
Im folgenden Beispiel aus Listing 34 soll ein Dateinamen in eine Inputbox eingegeben wer-
den. Danach wird geprft, ob es sich um einen Access-Dateinamen handelt. Diese Informa-
tion knnen Sie an der Dateierweiterung mdb sehen.
Abbildung 19: Text zerlegen und ausgeben
Teil Beschreibung
string
Erforderlich. Zeichenfolgenausdruck, von dem die letzten (rechtsstehenden)
Zeichen zurckgegeben werden. Wenn string den Wert Null enthlt, wird Null
zurckgegeben.
length
Erforderlich. Wert vom Typ Variant (Long). Numerischer Ausdruck, der die
Anzahl der zurckzugebenden Zeichen angibt. Der Wert 0 fhrt zur Rckgabe
einer Null-Zeichenfolge (""). Ist Length grer oder gleich der Zeichenanzahl in
String, so wird die gesamte Zeichenfolge zurckgegeben.
Tabelle 22: Die Argumente der Funktion Right
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Listing 34: Den Dateityp ber die Endung prfen
Sandini Bib
62 Allgemeine VBA-Funktionen
Schneiden Sie am Dateinamen die letzten drei Zeichen ber die Funktion Right ab und wer-
ten Sie diese Information dann aus.
27 Zeichen ersetzen
Sollen einzelne Zeichen bzw. Zeichenfolgen ausgetauscht werden, dann setzen Sie fr diese
Aufgabe die Funktion Replace ein.
Die Funktion Replace gibt eine Zeichenfolge zurck, in der eine festgelegte, untergeordnete
Zeichenfolge mit einer festgelegten Hufigkeit durch eine andere untergeordnete Zeichen-
folge ersetzt wurde. Die Syntax dieser Funktion lautet:
Replace(expression, find, replace[, start[, count[, compare]]])
Die Syntax der Replace-Funktion besteht aus folgenden Teilen:
Sub DateiTypChecken()
Dim strDatei As String
strDatei = InputBox("Bitte Dateinamen eingeben", "Dateinamen:")
If Len(strDatei) <> 0 Then
If UCase(Right(strDatei, 3)) = "MDB" Then
MsgBox "Es handelt sich um eine Access-Datei!"
Else
MsgBox "Keine Access-Datenbank!"
End If
End If
End Sub
Teil Beschreibung
Expression
Erforderlich. Zeichenfolgenausdruck, der die zu ersetzende, untergeord-
nete Zeichenfolge enthlt.
Find
Erforderlich. Die untergeordnete Zeichenfolge, nach der gesucht wird.
Replace
Erforderlich. Die untergeordnete Ersatzzeichenfolge.
Start
Optional. Position in expression, an der die Suche nach der untergeord-
neten Zeichenfolge beginnt. Wird diese Angabe ausgelassen, wird bei
1 begonnen.
Count
Optional. Anzahl der durchzufhrenden Ersetzungen der untergeordne-
ten Zeichenfolge. Wird diese Angabe ausgelassen, ist die Standardeinstel-
lung 1, d.h., alle mglichen Zeichenfolgen werden ersetzt.
Compare
Optional. Numerischer Wert, der die Art des Vergleichs angibt, der beim
Beurteilen von untergeordneten Zeichenketten verwendet werden soll.
Tabelle 23: Die Argumente der Funktion Replace
Listing 34: Den Dateityp ber die Endung prfen (Forts.)
Sandini Bib
Zeichenfolge mit Leerzeichen auffllen 63
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Das Argument compare kann folgende Werte haben:
Im folgenden Beispiel aus Listing 35 wird ein Satz mit Umlauten ausgetauscht. Dabei sollen
folgende Regeln gelten:
Aus wird ae.
Aus wird oe.
Aus wird ue.
bergeben Sie der Funktion nacheinander zuerst den ursprnglichen Text, der in der String-
Variablen StrText steht. Als zweites Argument geben Sie die Zeichenfolge an, die im ersten
Argument gesucht werden soll. Das dritte Argument beinhaltet die Zeichenfolge, die die Zei-
chenfolge aus dem zweiten Argument ersetzen soll.
28 Zeichenfolge mit Leerzeichen auffllen
Um Leerzeichen in eine bestehende Zeichenfolge aufzunehmen, knnen Sie mit der Funk-
tion Space arbeiten.
Konstante Wert Beschreibung
vbUseCompareOption 1
Fhrt einen Vergleich unter Verwendung der Option
Compare-Anweisung durch.
vbBinaryCompare 0
Fhrt einen binren Vergleich durch.
vbTextCompare 1
Fhrt einen Textvergleich durch.
vbDatabaseCompare 2
Nur Microsoft Access. Fhrt einen Vergleich anhand
der Informationen in Ihrer Datenbank durch.
Tabelle 24: Die mglichen Vergleichskonstanten
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub UmlauteErsetzen()
Dim strText As String
strText = "Sie knnen sich darber rgern oder nicht!"
strText = Replace(strText, "", "ue")
strText = Replace(strText, "", "ae")
strText = Replace(strText, "", "oe")
MsgBox strText
End Sub
Listing 35: Umlaute ersetzen
Sandini Bib
64 Allgemeine VBA-Funktionen
Die Funktion Space gibt eine Zeichenfolge vom Typ Variant (String) zurck, die aus einer
angegebenen Anzahl von Leerzeichen besteht. Die Syntax dieser Funktion lautet:
Space(Zahl)
Das erforderliche Argument Zahl entspricht der Anzahl der gewnschten Leerzeichen in der
Zeichenfolge.
Im folgenden Beispiel aus Listing 36 wird ein Text mit Leerzeichenfolgen aufgefllt. Dabei
soll als Ergebnis die Textlnge immer aus zehn Zeichen bestehen. Liegen im Text also bei-
spielsweise nur vier Zeichen vor, dann werden noch sechs Leerzeichen im Text integriert.
Im theoretischen Beispiel aus Listing 36 wird zunchst ein Text in einer Variablen vom Typ
String gespeichert. Danach wird die Funktion Len eingesetzt, um die Lnge des Textes zu
ermitteln. Ergibt die Prfung eine Lnge kleiner als 10, werden ber die Funktion Space die
restlichen Zeichen mit Leerzeichen aufgefllt.
29 Zahlen in Texte umwandeln
Die Funktion Str gibt einen Wert vom Typ Variant (String) zurck, der eine Zahl darstellt.
Die Syntax dieser Funktion lautet:
Str(Zahl)
Abbildung 20: Zeichenfolgen schnell austauschen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub MitLeerzeichenFllen()
Dim strText As String
strText = "0815"
If Len(strText) < 10 Then
strText = strText + Space(10 - Len(strText))
End If
End Sub
Listing 36: Leerzeichen in eine Zeichenfolge pumpen
Sandini Bib
Zeichenfolgen miteinander vergleichen 65
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Das erforderliche Argument Zahl ist ein Wert vom Typ Long, der einen beliebigen numeri-
schen Ausdruck enthlt. Beim Konvertieren von Zahlen in Texte wird ein fhrendes Leer-
zeichen fr das Vorzeichen der Zahl reserviert. Ist die Zahl positiv, so enthlt der
zurckgegebene Text ein fhrendes Leerzeichen.
Im folgenden Beispiel aus Listing 37 wird eine Zahl in einen Textwert umgewandelt.
30 Zeichenfolgen miteinander vergleichen
Sollen Zeichenfolgen miteinander verglichen werden, dann knnen Sie dazu die Funktion
StrComp einsetzen. Die Syntax dieser Funktion lautet:
StrComp(string1, string2[, compare])
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub ZahlInTextWandeln()
Dim lzahl As Long
lzahl = 70469
[Link] Str(lzahl)
End Sub
Listing 37: Zahlenwert in einen Textwert umwandeln
Teil Beschreibung
string1
Erforderlich. Ein beliebiger gltiger Zeichenfolgenausdruck.
string2
Erforderlich. Ein beliebiger gltiger Zeichenfolgenausdruck.
Compare
Optional. Legt die Art des Zeichenfolgenvergleichs fest. Der Wert Null fr
compare fhrt zu einem Fehler. Die mglichen Vergleichstypen knnen Sie aus
der folgenden Tabelle entnehmen.
Tabelle 25: Die Argumente der Funktion StrComp
Konstante Wert Beschreibung
vbUseCompareOption -1
Fhrt einen Vergleich mithilfe der Option
Compare-Anweisung durch.
vbBinaryCompare 0
Fhrt einen binren Vergleich durch.
vbTextCompare 1
Fhrt einen textbasierten Vergleich durch.
Tabelle 26: Die Vergleichstypen der Funktion StrComp
Sandini Bib
66 Allgemeine VBA-Funktionen
Die Funktion StrComp liefert folgende Rckgabewerte.
Im folgenden Beispiel aus Listing 38 werden zwei Zeichenfolgen miteinander verglichen und
berprft, welche der beiden Zeichenfolgen im Alphabet weiter vorne angeordnet ist.
Im Beispiel aus Listing 38 werden zwei Zeichenfolgen in String-Variablen gefllt. ber die
Funktion StrComp wird geprft, welche der beiden Zeichenfolgen im Alphabet weiter vorne
liegt. Der Rckgabewert 1 bedeutet, dass die erste Zeichenfolge m Alphabet weiter vorne
liegt als die zweite Zeichenfolge.
vbDatabaseCompare 2
Nur Microsoft Access. Fhrt einen Vergleich
durch, der auf Informationen in Ihrer Datenbank
basiert.
Fall Rckgabewert
string1 liegt im Alphabet vor string2
-1
string1 entspricht string2
0
string1 liegt im Alphabet hinter string2
1
string1 oder string2 ist Null
Null
Tabelle 27: Die Rckgabewerte der Funktion StrComp
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub ZeichenfolgenVergleichen()
Dim strText1 As String
Dim strText2 As String
strText1 = "RTS"
strText2 = "STS"
If StrComp(strText1, strText2, 1) = -1 Then
MsgBox "Text1 liegt vor Text2!"
Else
MsgBox "Text2 liegt vor Text1"
End If
End Sub
Listing 38: Einen Textvergleich durchfhren
Konstante Wert Beschreibung
Tabelle 26: Die Vergleichstypen der Funktion StrComp (Forts.)
Sandini Bib
Zeichenfolgen spiegeln 67
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
31 Zeichenfolgen spiegeln
ber die Funktion StrReverse knnen Sie eine Zeichenfolge spiegeln. Dabei gibt die Funk-
tion eine Zeichenfolge zurck, in der die Reihenfolge der Zeichen einer bestimmten Zeichen-
folge umgekehrt wurde. Die Syntax der Funktion lautet:
StrReverse(expression)
Das Argument expression ist die Zeichenfolge, deren Zeichen umgekehrt werden sollen.
Wenn es sich bei expression um eine Zeichenfolge der Lnge Null ("") handelt, wird eine
Zeichenfolge der Lnge Null zurckgegeben. Wenn expression Null ist, kommt es zu einem
Fehler.
Im folgenden Beispiel aus Listing 39 wird ein Text gespiegelt.
Vor dem eigentlichen Drehen des Textes durch die Funktion StrReverse wenden Sie die
Funktion LCase an, um die Zeichenfolge zustzlich in Kleinbuchstaben zu konvertieren.
32 Texte vervollstndigen
Soll ein Text mit einem bestimmten Zeichen vervollstndigt werden, dann knnen Sie diese
Aufgabe ber die Funktion String lsen. Diese Funktion gibt eine Zeichenfolge vom Typ
Variant (String) zurck, die ein sich wiederholendes Zeichen der angegebenen Lnge ent-
hlt. Die Syntax der Funktion lautet:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub ZeichenfolgeSpiegeln()
Dim strText As String
strText = "Esel"
[Link] "Vorher: " & strText
[Link] "Nachher: " & LCase(StrReverse(strText))
End Sub
Listing 39: Texte spiegeln mithilfe der Funktion StrReverse
Abbildung 21: Texte drehen ber die Funktion StrReverse.
Sandini Bib
68 Allgemeine VBA-Funktionen
String(number, character)
Die Syntax der String-Funktion besteht aus folgenden benannten Argumenten:
Im folgenden Beispiel aus Listing 40 wird die Lnge eines Textes berprft. Hat der Text eine
Lnge kleiner 10, dann werden die restlichen Zeichen durch einen Stern vervollstndigt.
Fllen Sie zunchst die String-Variable mit einem Text Ihrer Wahl. Danach prfen Sie ber
die Funktion Len die Lnge der Zeichenfolge. Mithilfe der Funktion String fllen Sie dann
die noch fehlenden Zeichen mit dem Zeichen *.
33 Zuordnungen treffen
Eine Art von Abfrage stellt die Funktion Switch dar. Diese Funktion wertet eine Liste von
Ausdrcken aus und gibt einen Wert vom Typ Variant oder einen Ausdruck zurck, der dem
ersten Ausdruck in der Liste zugeordnet ist, der True ergibt. Die Syntax der Funktion lautet:
Switch(Ausdr-1, Wert-1[, Ausdr-2, Wert-2 [, Ausdr-n,Wert-n]])
Die Syntax der Switch-Funktion besteht aus folgenden Teilen:
Teil Beschreibung
Number
Erforderlich. Wert vom Typ Long. Lnge der zurckgegebenen Zeichen-
folge. Wenn number den Wert Null enthlt, wird Null zurckgegeben.
Character
Erforderlich. Wert vom Typ Variant. Ein Zeichencode, der ein Zeichen
oder einen Zeichenfolgenausdruck angibt, dessen erstes Zeichen ver-
wendet wird, um die zurckzugebende Zeichenfolge zu erstellen. Wenn
character den Wert Null enthlt, wird Null zurckgegeben.
Tabelle 28: Die Argumente der Funktion String
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub MitSternAuffuellen()
Dim StrText As String
StrText = "Gesamt"
If Len(StrText) < 10 Then
StrText = _
StrText & String(10 - Len(StrText), "*")
End If
MsgBox StrText
End Sub
Listing 40: Das Stern-Symbol als Fllzeichen verwenden
Sandini Bib
Fhrende Leerzeichen entfernen 69
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 41 soll ber eine Inputbox ein Land eingegeben werden.
ber die Funktion Switch wird dann die dazugehrige Sprache des Landes ermittelt.
Fragen Sie ber die Methode Inputbox ein Land ab. ber die Funktion Len knnen Sie abfra-
gen, ob berhaupt eine Eingabe vorgenommen wurde. Wenn nicht, dann gibt diese Funktion
den Wert 0 zurck. Im anderen Fall weisen Sie mithilfe der Funktion Switch jedem Land die
dazugehrige Sprache zu.
34 Fhrende Leerzeichen entfernen
Oft machen fhrende oder nachgestellte Leerzeichen Probleme bei der Programmierung,
weil man sie unter anderem ja gar nicht sieht.
Teil Beschreibung
Ausdr
Erforderlich. Variant-Ausdruck, der ausgewertet werden soll.
Wert
Erforderlich. Wert oder Ausdruck, der zurckgegeben werden soll, wenn der
entsprechende Ausdruck True ergibt.
Tabelle 29: Die Argumente der Funktion Switch
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub LandUndSprache()
Dim StrLand as String
strLand = InputBox("Bitte ein Land eingeben!")
If Len(strLand) <> 0 Then
On Error GoTo Fehler
strLand = Switch _
(strLand = "Deutschland", "Deutsch", _
strLand = "Frankreich", "Franzsisch", _
strLand = "Italien", "Italienisch", _
strLand = "Spanien", "Spanisch")
MsgBox "Sie sprechen " & strLand
Exit Sub
Fehler:
MsgBox "Das Land ist nicht eingepflegt!"
End If
End Sub
Listing 41: Zuordnung von Land zur Sprache vornehmen
Sandini Bib
70 Allgemeine VBA-Funktionen
Die Funktion Trim gibt einen Wert vom Typ Variant (String) zurck, der eine Kopie einer
bestimmten Zeichenfolge enthlt, die keine fhrenden Leerzeichen (LTrim), keine nachge-
stellten Leerzeichen (RTrim) sowie keine Kombination aus fhrenden und nachgestellten
Leerzeichen (Trim) enthlt. Die Syntax dieser Funktionen lautet:
LTrim(Zeichenfolge)
RTrim(Zeichenfolge)
Trim(Zeichenfolge)
Das erforderliche Argument Zeichenfolge ist ein beliebiger gltiger Zeichenfolgenausdruck.
Wenn Zeichenfolge den Wert Null enthlt, wird Null zurckgegeben.
Im folgenden Beispiel aus Listing 42 werden aus einem Text alle fhrenden sowie nachfol-
genden Leerzeichen entfernt.
Mssen aus einer Zeichenfolge wirklich alle Leerzeichen raus, also auch in der Mitte, dann
schreiben Sie eine Funktion, die beispielsweise wie in Listing 43 aussehen kann.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Sub LeerzeichenEntfernen()
Dim StrText As String
StrText = " Das ist ein Test "
StrText = Trim(StrText)
End Sub
Listing 42: Leerzeichen am linken und rechten Rand entfernen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Function LeereRaus(s As String) As String
Dim intZ As Integer
For intZ = 1 To Len(s)
Select Case Asc(Mid(s, intZ, 1))
Case 32
'hier handelt es sich um das Zeichen Leer
Case Else
LeereRaus = LeereRaus & Mid(s, intZ, 1)
End Select
Next intZ
End Function
Listing 43: Alle Leerzeichen aus einer Zeichenfolge eliminieren
Sandini Bib
Standardverzeichnis neu setzen 71
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
In der Funktion aus Listing 43 wird ber eine For Next-Schleife Zeichen fr Zeichen abgear-
beitet. Dabei ermitteln Sie ber die Funktion Len die Gesamtlnge des bergebenen Textes.
Innerhalb der Schleife wandeln Sie in einer Select Case-Anweisung ber die Funktion ASC
den jeweiligen Buchstaben in einen Zahlenwert um, der dem Zeichencode entspricht. Dabei
wird ein Leerzeichen ber den numerischen Wert 32 dargestellt. Daher wird im ersten Zweig
der Case-Anweisung nichts weiter gemacht. Im Case Else-Zweig werden die brigen Zeichen
wieder zu einem String zusammengesetzt und dem aufrufenden Makro als Rckgabewert
bergeben.
35 Standardverzeichnis neu setzen
Mithilfe der Anweisung ChDir knnen Sie in das aktuelle Verzeichnis wechseln.
ChDir Pfad
Das erforderliche Argument Pfad ist ein Zeichenfolgenausdruck, der angibt, welches Ver-
zeichnis zum neuen Standardverzeichnis wird.
Im folgenden Beispiel aus Listing 44 wird das Standardverzeichnis neu gesetzt.
bergeben Sie der Anweisung ChDir den kompletten Pfad inklusive des Laufwerks.
Sub AlleLeerzeichenEntfernen()
Dim StrText As String
StrText = " Das ist ein Test "
StrText = LeereRaus(StrText)
MsgBox StrText
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub VerzeichnisWechseln()
On Error GoTo Fehler
ChDir "C:\Windows\Temp"
Exit Sub
Fehler:
MsgBox "Dieses Verzeichnis gibt es nicht!"
End Sub
Listing 44: Das Verzeichnis ber ChDir neu einstellen
Listing 43: Alle Leerzeichen aus einer Zeichenfolge eliminieren (Forts.)
Sandini Bib
72 Allgemeine VBA-Funktionen
36 Laufwerkswechsel durchfhren
Mithilfe der Anweisung ChDrive stellen Sie das aktuelle Laufwerk ein. Die Syntax fr diese
Funktion lautet:
ChDrive Laufwerk
Das erforderliche Argument Laufwerk ist ein Zeichenfolgenausdruck, der ein existierendes
Laufwerk angibt.
bergeben Sie der Funktion ChDrive den Laufwerksbuchstaben inklusive des Doppelpunkts.
37 Aktuelles Verzeichnis auslesen
ber die Anweisung CurDir knnen Sie das aktuell eingestellte Verzeichnis ermitteln. Die
Syntax dieser Funktion lautet:
CurDir[(Laufwerk)]
Das optionale Argument Laufwerk ist ein Zeichenfolgenausdruck, der ein existierendes Lauf-
werk angibt. Ist kein Laufwerk angegeben oder enthlt das Laufwerk eine Null-Zeichenfolge
(""), so gibt die CurDir-Funktion den Pfad des aktuellen Laufwerks zurck.
Im folgenden Beispiel aus Listing 46 wird das momentan eingestellte Verzeichnis am Bild-
schirm ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub LaufwerkWechseln()
On Error GoTo Fehler
ChDrive "d:"
Exit Sub
Fehler:
MsgBox "Dieses Laufwerk gibt es nicht!"
End Sub
Listing 45: Laufwerkswechsel ber die Anweisung ChDrive durchfhren
H
i
n
w
e
i
s
In Kapitel 2 dieses Buchs knnen Sie nachschlagen, wie Sie ein Laufwerk bzw. ein Ver-
zeichnis ber den Einsatz einer API-Funktion, die einen Verzeichnisbaum zur Ver-
fgung stellt, einsetzen knnen.
Sandini Bib
Dateien und Verzeichnisse auslesen 73
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Anweisung CurDir wird das aktuell eingestellte Verzeichnis ausgegeben. bergeben
Sie dieser Anweisung als Argument den Laufwerksbuchstaben, in dem das aktuelle Verzeich-
nis ermittelt werden soll.
38 Dateien und Verzeichnisse auslesen
Um die Dateien aus einem Verzeichnis auszulesen, knnen Sie die noch aus DOS-Tagen
bekannte Funktion Dir einsetzen.
Die Funktion Dir gibt eine Zeichenfolge (String) zurck, die den Namen einer Datei, eines
Verzeichnisses oder eines Ordners darstellt, der mit einem bestimmten Suchmuster, einem
Dateiattribut oder mit der angegebenen Datentrger- bzw. Laufwerksbezeichnung berein-
stimmt. Die Syntax der Funktion lautet:
Dir[(Pfadname[, Attribute])]
Die Syntax der Dir-Funktion besteht aus folgenden Teilen:
Das Argument Attribute hat die folgenden Einstellungen:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub AktuellesVerzeichnisAusgeben()
MsgBox "Das aktuelle Verzeichnis lautet: " & CurDir("C")
End Sub
Listing 46: Das aktuelle Verzeichnis abfragen
Teil Beschreibung
Pfadname
Optional. Zeichenfolgenausdruck, der einen Dateinamen angibt. Der Datei-
name kann ein Verzeichnis oder einen Ordner sowie ein Laufwerk enthalten.
Eine Null-Zeichenfolge ("") wird zurckgegeben, wenn der Pfad aus Pfadname
nicht gefunden werden kann
Attribute
Optional. Eine Konstante oder ein numerischer Ausdruck, deren Summe die
Dateiattribute angibt. Wenn das Argument nicht angegeben wird, werden alle
Dateien, die dem Argument Pfadnamen entsprechen, zurckgegeben.
Tabelle 30: Die Argumente der Funktion Dir
Konstante Wert Beschreibung
VbNormal 0
(Voreinstellung) Dateien ohne Attribute.
Tabelle 31: Die mglichen Einstellungen beim Argument Attribute
Sandini Bib
74 Allgemeine VBA-Funktionen
Im folgenden Beispiel aus Listing 47 werden aus einem Verzeichnis alle Dateien ausgelesen
und das Datum der Erstellung einer jeden Datei wird protokolliert.
Stellen Sie zuerst die gewnschten Dateiattribute ber die Konstanten der Dir-Funktion
zusammen und speichern Sie diese in der Variablen StrAttr. Danach geben Sie bekannt, in
welchem Verzeichnis die Suche stattfinden soll. ber die Funktion Dir starten Sie die Suche,
VbReadOnly 1
Schreibgeschtzte Dateien, zustzlich zu Dateien ohne Attri-
bute.
VbHidden 2
Versteckte Dateien, zustzlich zu Dateien ohne Attribute.
VbSystem 4
Systemdatei, zustzlich zu Dateien ohne Attribute.
Beim Macintosh nicht verfgbar.
VbVolume 8
Datentrgerbezeichnung. Falls andere Attribute angegeben
wurden, wird vbVolume ignoriert. Beim Macintosh nicht ver-
fgbar.
VbDirectory 16
Verzeichnis oder Ordner, zustzlich zu Dateien ohne Attri-
bute.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateienDokumentieren()
Dim strAttr As String
Dim strPfad As String
Dim strName As String
Dim intz As Integer
strAttr = vbNormal + vbReadOnly + vbHidden
strPfad = "c:\Eigene Dateien\"
strName = Dir(strPfad, strAttr)
On Error Resume Next
Do While strName <> ""
If strName <> "." And strName <> ".." Then
[Link] strName; vbTab & FileDateTime(strPfad & strName)
intz = intz + 1
End If
strName = Dir
Loop
End Sub
Listing 47: Dateien auflisten und dokumentieren
Konstante Wert Beschreibung
Tabelle 31: Die mglichen Einstellungen beim Argument Attribute (Forts.)
Sandini Bib
Verzeichnis anlegen 75
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
indem Sie die beiden Argumente StrPfad und StrAttr bergeben. Diese Suche wird so lange
in einer Schleife ausgefhrt, bis alle Dateien des angegebenen Verzeichnisses ausgelesen wur-
den. Innerhalb der Schleife wenden Sie die Funktion FileDateTime an, um das Erstellungs-
datum der Datei zu ermitteln.
39 Verzeichnis anlegen
Mithilfe der Anweisung MkDir knnen Sie ein neues Verzeichnis erstellen. Die Syntax dieser
Funktion lautet:
MkDir Pfad
Das erforderliche Argument Pfad ist ein Zeichenfolgenausdruck, der das zu erstellende Ver-
zeichnis angibt. Pfad kann das Laufwerk enthalten. Wenn kein Laufwerk angegeben ist,
erstellt die MkDir-Anweisung ein neues Verzeichnis oder einen neuen Ordner auf Basis des
aktuellen Laufwerks.
Im folgenden Beispiel aus Listing 48 wird ein neues Verzeichnis angelegt. Im Falle, dass dieses
Verzeichnis bereits existiert, fangen Sie den Fehler ber die On Error-Klausel ab.
Abbildung 22: Dateidokumentation im Direktfenster der Entwicklungsumgebung
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Listing 48: Neues Verzeichnis ber MkDir anlegen
Sandini Bib
76 Allgemeine VBA-Funktionen
bergeben Sie der Anweisung MkDir den kompletten Pfad zum Verzeichnis, welches Sie
erstellen mchten. Wenn kein Laufwerk angegeben ist, erstellt die Anweisung ein neues Ver-
zeichnis oder einen neuen Ordner auf dem aktuellen Laufwerk.
40 Verzeichnis entfernen
ber die Anweisung RmDir knnen Sie ein Verzeichnis lschen. Die Syntax dieser Funktion
lautet:
RmDir Pfad
Das erforderliche Argument Pfad ist ein Zeichenfolgenausdruck, der das zu lschende Ver-
zeichnis oder den zu lschenden Ordner angibt. Pfad kann das Laufwerk beinhalten. Wenn
kein Laufwerk angegeben ist, lscht RmDir das Verzeichnis oder den Ordner auf dem aktuel-
len Laufwerk.
bergeben Sie der Anweisung RmDir den kompletten Pfad zum Verzeichnis, welches Sie
lschen mchten.
Sub VerzeichnisAnlegen()
On Error Resume Next
MkDir "C:\Eigene Dateien\Versuch"
End Sub
H
i
n
w
e
i
s
RmDir fhrt zu einem Fehler, wenn Sie die Anweisung fr ein Verzeichnis ausfhren, in
dem Dateien enthalten sind. Lschen Sie zuerst alle Dateien mit der Kill-Anweisung,
bevor Sie ein Verzeichnis oder einen Ordner entfernen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub VerzeichnisEntfernen()
On Error Resume Next
RmDir "C:\Test"
End Sub
Listing 49: Ein Verzeichnis ber die Anweisung RmDir entfernen
Listing 48: Neues Verzeichnis ber MkDir anlegen (Forts.)
Sandini Bib
Datei lschen 77
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
41 Datei lschen
Die Anweisung Kill lscht eine Datei ohne Rckfrage von der Festplatte. Die Syntax dieser
Funktion lautet:
Kill Pfadname
Das erforderliche Argument Pfadname ist ein Zeichenfolgenausdruck, der eine oder mehrere
zu lschende Dateien angibt. Pfadname kann ein Verzeichnis sowie ein Laufwerk enthalten.
Im folgenden Beispiel aus Listing 50 wird eine Datei aus einem bestimmten Verzeichnis ent-
fernt.
bergeben Sie der Anweisung Kill den Namen der Datei inklusive des Pfads, in dem die
Datei gespeichert ist. Sollte die Datei in diesem Verzeichnis nicht enthalten sein, dann sorgt
die On Error-Klausel dafr, dass es zu keiner Fehlermeldung kommt. Die Anweisung wird in
diesem Fall einfach ignoriert.
42 Datei kopieren
Mithilfe der Anweisung FileCopy knnen Sie Dateien kopieren. Die Syntax dieser Funktion
lautet:
FileCopy source, destination
Die Syntax der FileCopy-Anweisung verwendet die folgenden benannten Argumente:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiEntfernen()
On Error Resume Next
Kill "C:\Eigene Dateien\[Link]"
End Sub
Listing 50: Datei lschen ber die Anweisung Kill
Teil Beschreibung
Source
Erforderlich. Zeichenfolgenausdruck, der den Namen der zu kopierenden
Datei angibt. Source kann ein Verzeichnis oder einen Ordner sowie ein
Laufwerk enthalten.
Destination
Erforderlich. Zeichenfolgenausdruck, der den Namen der Zieldatei
angibt. Destination kann ein Verzeichnis oder einen Ordner sowie ein
Laufwerk enthalten.
Tabelle 32: Die Argumente der Anweisung FileCopy
Sandini Bib
78 Allgemeine VBA-Funktionen
Im folgenden Beispiel aus Listing 51 wird eine Textdatei kopiert.
bergeben Sie der Anweisung FileCopy den Namen der Originaldatei sowie den Namen der
neuen Datei, die durch diese Anweisung erstellt wird. Leider knnen mit dieser Anweisung
keine geffneten Dateien kopiert werden.
Bilder neu benennen und nummerieren
Auf vielen PCs gibt es Verzeichnisse, die eine groe Anzahl von Bildern bzw. Fotos enthalten.
Oft werden diese Bilder aus dem Internet herauskopiert oder selbst mit der digitalen Kamera
fotografiert. Die Namen der einzelnen Bilder liegen hufig in unterschiedlicher Form und
nicht geordnet vor. Die folgende Lsung beschreibt, wie Sie Ihre Bilder im Nachhinein
gleichartig benennen und durchnummerieren knnen.
Als Ausgangssituation liegt ein Verzeichnis mit Fotos bzw. Bildern im jpg-Format vor. Diese
Dateien sollen einheitlich benannt und durchnummeriert werden.
Um die Bilder aus Abbildung 23 umzubenennen und zu nummerieren, starten Sie das Makro
aus Listing 52.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub KopierenDatei()
Dim strDat As String
Dim strDat_Kopie As String
strDat = "C:\[Link]"
strDat_Kopie = "[Link]"
On Error GoTo fehler
FileCopy strDat, strDat_Kopie
Exit Sub
fehler:
MsgBox "Fehler beim Kopieren aufgetreten!"
End Sub
Listing 51: Dateien kopieren ber die Anweisung FileCopy
Sandini Bib
Datei kopieren 79
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 23: Diese Dateien sollen umbenannt und durchnummeriert werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub BilderBenennenUndNummerieren()
Dim strDateiname As String
Dim intz As Integer
On Error Goto fehler
intz = 1
ChDir "C:\Eigene Dateien\Kopie\"
strDateiname = Dir$("c:\Eigene Dateien\Kopie\*.jpg")
Do Until strDateiname = ""
FileCopy strDateiname, "Pic" & Format(intz, "000") & ".jpg"
Kill strDateiname
strDateiname = Dir$()
If InStr(strDateiname, "Pic") <> 0 Then Exit Sub
intz = intz + 1
Loop
Exit Sub
fehler:
Msgbox [Link] & " " & [Link]
End Sub
Listing 52: Dateien umbenennen und durchnummerieren
Sandini Bib
80 Allgemeine VBA-Funktionen
Zu Beginn des Makros werden zwei Variablen deklariert. In der Variablen strDateiname wer-
den im weiteren Verlauf des Makros die Namen der einzelnen Bilder zwischengespeichert. In
der Zhlvariablen intz wird die Nummerierung der Bilder festgelegt. Der Variablen intz
wird ein Startwert zugewiesen, bei dem die Nummerierung der Bilder beginnen soll. ber
die Anweisung ChDir wechselt man in das gewnschte Verzeichnis, in dem die Bilder gespei-
chert sind. Danach wird ber die Funktion Dir das erste Bild gesucht und in der Variablen
Dateiname abgelegt. In einer anschlieenden Schleife werden alle Bilder, die im Verzeichnis
stehen, abgearbeitet.
Mithilfe der Anweisung FileCopy wird das jeweils gefundene Bild kopiert und unter einem
neuen Dateinamen gespeichert. Dazu gibt man im ersten Argument der Anweisung File-
Copy den Namen des Bilds an, welches man kopieren mchte. Diese Information steht
direkt in der Variablen Dateinamen zur Verfgung. Im zweiten Argument wird der neue
Name fr das neue Bild angegeben. Dieser neue Name wird durch den Text Pic sowie den
fortlaufenden Dateizhler gebildet. Mithilfe der Funktion Format wird die Art der Numme-
rierung festgelegt. Dabei ist die Nummerierung des Bilds immer dreistellig ([Link],
[Link]).
Innerhalb der Schleife wird die Zhlvariable intz bei jedem Schleifendurchlauf um den Wert
1 erhht. Damit es zu keiner Endlosschleife kommt, muss man ber die Funktion Instr pr-
fen, wann die Funktion Dir auf die erste, neue Kopie eines Bilds stt. Dabei kann man
abfragen, ob in der Variablen Dateiname der Text Pic vorkommt. In diesem Fall wird ein Wert
<> 0 zurckgegeben. Ist dies der Fall, dann wird ber die Anweisung Exit Sub das Makro
sofort beendet. Bevor am Ende der Schleife das jeweils nchste Bild ber die Funktion Dir
gesucht wird, wird mithilfe der Anweisung Kill das alte Bild von der Festplatte, ohne weitere
Rckfrage, entfernt.
Abbildung 24: Die Bilder wurden neu einsortiert.
Sandini Bib
Datei umbenennen 81
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
43 Datei umbenennen
ber die Anweisung Name knnen Sie eine Datei umbenennen. Die Syntax dieser Funktion
lautet:
Name AlterPfadname As NeuerPfadname
Die Syntax der Name-Anweisung besteht aus folgenden Teilen:
Im folgenden Beispiel aus Listing 53 wird eine Textdatei umbenannt.
Teil Beschreibung
AlterPfadname
Erforderlich. Zeichenfolgenausdruck, der einen existierenden Datei-
namen und seinen Pfad angibt. In dem Wert kann ein Verzeichnis oder
Ordner sowie ein Laufwerk enthalten sein.
NeuerPfadname
Erforderlich. Zeichenfolgenausdruck, der einen neuen Dateinamen und
seinen Pfad angibt. In dem Wert kann ein Verzeichnis oder Ordner
sowie ein Laufwerk enthalten sein. Die in NeuerPfadname angegebene
Datei darf noch nicht existieren.
Tabelle 33: Die Argumente der Anweisung Name
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiUmbenennen()
Dim strAlterName As String
Dim strNeuername As String
On Error GotTo fehler
strAlterName = "C:\[Link]"
strNeuername = "c:\[Link]"
Name strAlterName As strNeuername
Exit Sub
fehler:
Msgbox [Link] & " " & [Link]
End Sub
Listing 53: Datei neu benennen ber die Anweisung Name
Sandini Bib
82 Allgemeine VBA-Funktionen
Im Makro aus Listing 53 wird der Name der alten sowie der neue Name der Datei in String-
Variablen zwischengespeichert. Danach wenden Sie die Anweisung Name an, der Sie die bei-
den Strings als Argumente bergeben.
44 Dateiexistenz prfen
Mchten Sie prfen, ob eine Datei berhaupt existiert, dann knnen Sie die Funktion File-
Len einsetzen.
Die Funktion FileLen gibt einen Wert vom Typ Long zurck, der die Lnge einer Datei in Byte
angibt. Die Syntax dieser Funktion lautet:
FileLen(Pfadname)
Das erforderliche Argument Pfadname ist ein Zeichenfolgenausdruck, der eine Datei angibt.
Pfadname kann ein Verzeichnis oder ein Laufwerk enthalten.
Im folgenden Beispiel aus Listing 54 wird die Funktion FileLen eingesetzt, um zu prfen, ob
eine bestimmte Datei berhaupt existiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiExistenz()
Dim intL As Integer
On Error GoTo fehler
intL = FileLen("C:\[Link]")
'Weitere Aktionen
Exit Sub
fehler:
If [Link] = 53 Then
MsgBox "Datei existiert nicht!"
Else
MsgBox [Link] & " " & [Link]
End If
End Sub
Listing 54: Dateiexistenz prfen
Sandini Bib
Betriebssystem-Umgebungsvariablen auslesen 83
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Funktion FileLen den Namen inklusive der Pfadangaben. Als Rckgabe-
wert erhalten Sie einen Fehler, wenn die Datei nicht existiert. ber die Fehlernummer, die Sie
ber das Fehlerobjekt Err auslesen knnen, lsst sich mithilfe der Eigenschaft Number der Feh-
ler nher auswerten. Die Fehlernummer 53 steht dafr, dass eine Datei nicht gefunden wer-
den kann.
45 Betriebssystem-Umgebungsvariablen auslesen
Die Anweisung Environ gibt die mit einer Betriebssystem-Umgebungsvariablen verbundene
Zeichenfolge (String) zurck.
Environ({envstring | number})
Die Syntax der Environ-Funktion verwendet die folgenden benannten Argumente:
Im folgenden Beispiel aus Listing 55 werden alle Umgebungsvariablen des Systems am Bild-
schirm ausgegeben.
Teil Beschreibung
Envstring
Optional. Ein Zeichenfolgenausdruck, der den Namen einer Umgebungs-
variablen enthlt.
Number
Optional. Ein numerischer Ausdruck entsprechend der numerischen Rei-
henfolge der Umgebungszeichenfolge in der Tabelle fr Umgebungszei-
chenfolgen. Das Argument number kann ein beliebiger numerischer
Ausdruck sein, der aber vor der Auswertung auf eine ganze Zahl gerundet
wird.
Tabelle 34: Die Argumente der Anweisung Environ
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub BetriebssystemAuslesen()
Dim intZ As Integer
Dim strText As String
intZ = 1
Do Until Environ(intZ) = ""
strText = strText & vbLf & Environ(intZ)
Listing 55: Die Betriebssystemumgebung auslesen
Sandini Bib
84 Allgemeine VBA-Funktionen
In einer Schleife bergeben Sie der Funktion Environ numerische Werte. Die zurckgegebe-
nen Umgebungsvariablen sammeln Sie in der String-Variablen StrText, die Sie nach dem
Schleifenauftritt am Bildschirm ausgeben.
Sie knnen die einzelnen Betriebssystemumgebungsvariablen auch direkt ansprechen. Im
Makro aus Listing 56 wird der Benutzernamen sowie der Computernamen am Bildschirm
ausgegeben.
intZ = intZ + 1
Loop
MsgBox strText
End Sub
Abbildung 25: Die Betriebssystemumgebung checken
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
Listing 56: Anwendernamen sowie Computernamen auslesen
Listing 55: Die Betriebssystemumgebung auslesen (Forts.)
Sandini Bib
Textdatei lesen 85
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
46 Textdatei lesen
Zum Einlesen von Textdateien stehen Ihnen in VBA diverse Funktionen zur Verfgung. Die
folgenden Beispiele werden anhand der Textdatei [Link] beschrieben, die Sie in Abbil-
dung 26 sehen knnen.
ber die Anweisung Open knnen Sie eine Datei fr die Ein- bzw. Ausgabe ffnen. Die Syntax
lautet:
Open Pfadname For Modus [Access Zugriff] [Sperre] As [#]Dateinummer [Len=Satzlnge]
Die Syntax der Open-Anweisung besteht aus folgenden Teilen:
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub UsernameAuslesen()
MsgBox Environ("Username") & vbLf & Environ("Computername")
End Sub
H
i
n
w
e
i
s
Im zweiten Kapitel diese Buchs knnen Sie nachschlagen, wie Sie den Anwendernamen
sowie den Computernamen ber eine API-Funktion ermitteln knnen.
Abbildung 26: Die Ausgangsdatei
Teil Beschreibung
Pfadname
Erforderlich. Zeichenfolgenausdruck, der einen Dateinamen festlegt
und auch Verzeichnis-, Ordner- sowie Laufwerksangaben enthalten
kann.
Tabelle 35: Die Argumente der Anweisung Open
Listing 56: Anwendernamen sowie Computernamen auslesen (Forts.)
Sandini Bib
86 Allgemeine VBA-Funktionen
Mithilfe der Anweisung Line Input knnen Sie eine einzelne Zeile aus einer geffneten
sequentiellen Datei auslesen. Die Syntax der Funktion lautet:
Line Input #Dateinummer, Variablenname
Die Syntax der Line Input #-Anweisung besteht aus folgenden Teilen:
Im folgenden Beispiel aus Listing 57 wird die erste Zeile einer Textdatei gelesen und im
Direktfenster der Entwicklungsumgebung ausgegeben.
Modus
Erforderlich. Schlsselwort, das den Zugriffsmodus fr die Datei fest-
legt: Append, Binary, Input, Output oder Random. Wenn kein Modus fest-
gelegt ist, wird die Datei im Zugriffsmodus Random geffnet.
Zugriff
Optional. Schlsselwort, das die Operationen festlegt, die auf der geff-
neten Datei ausgefhrt werden knnen: Read, Write oder Read Write.
Sperre
Optional. Schlsselwort, das die Operationen festlegt, die von anderen
Prozessen auf der geffneten Datei ausgefhrt werden knnen: Shared,
Lock Read, Lock Write und Lock Read Write.
Dateinummer
Erforderlich. Eine gltige Dateinummer im Bereich von 1 bis 511 (ein-
schlielich). Mit der FreeFile-Funktion erhalten Sie die nchste verfg-
bare Dateinummer.
Satzlnge
Optional. Zahl kleiner oder gleich 32767 (Byte). Bei Dateien mit wahl-
freiem Zugriff ist dies die Datensatzlnge, bei sequentiellen Dateien die
Anzahl der gepufferten Zeichen.
Teil Beschreibung
Dateinummer
Erforderlich. Eine beliebige gltige Dateinummer.
Variablenname
Erforderlich. Ein gltiger Variablenname vom Typ Variant oder String.
Tabelle 36: Die Argumente der Anweisung Line Input
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub TextdateiLesenErsterSatz()
Dim strTextzeile As String
Listing 57: Erste Zeile einer Textdatei lesen
Teil Beschreibung
Tabelle 35: Die Argumente der Anweisung Open (Forts.)
Sandini Bib
Erste Zeile aus Textdatei lesen 87
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Anweisung Line Input wird die erste Zeile der Textdatei in die Variable StrTextzeile
gelesen. Nach der Ausgabe im Direktfenster wird die Textdatei ber die Anweisung Close
geschlossen.
47 Erste Zeile aus Textdatei lesen
Sollen lediglich einige Zeichen aus der ersten Zeile einer Textdatei gelesen werden, dann
kommt die Funktion Input zum Einsatz.
Die Funktion Input gibt einen Wert vom Typ String zurck, der Zeichen aus einer im Modus
Input oder Binary geffneten Datei enthlt. Die Syntax dieser Funktion sieht wie folgt aus:
Input(Zahl, [#]Dateinummer)
Die Syntax der Input-Funktion besteht aus folgenden Teilen:
48 Nur wenige Zeichen aus Textdatei lesen
Im folgenden Beispiel aus Listing 58 werden die ersten sieben Zeichen der ersten Zeile einer
Textdatei in das Direktfenster der Entwicklungsumgebung gelesen.
Open "c:\[Link]" For Input As #1
Line Input #1, strTextzeile
[Link] strTextzeile
Close #1
End Sub
Teil Beschreibung
Zahl
Erforderlich. Ein beliebiger gltiger numerischer Ausdruck, der die Zahl
der zurckzugebenden Zeichen angibt.
Dateinummer
Erforderlich. Eine beliebige gltige Dateinummer.
Tabelle 37: Die Argumente der Funktion Input
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub EinzelneZeichenLesen()
Dim strZeichen As String
Open "C:\[Link]" For Input As #1
Listing 58: Einzelne Zeichen lesen ber die Funktion Input
Listing 57: Erste Zeile einer Textdatei lesen (Forts.)
Sandini Bib
88 Allgemeine VBA-Funktionen
bergeben Sie der Funktion Input die Anzahl der gewnschten Zeichen sowie die Dateinum-
mer der Datei, die Sie bereits beim ffnen der Datei vergeben haben.
Muss die komplette Textdatei eingelesen werden, dann wird die Funktion EOF eingesetzt, um
den letzten Satz einer Textdatei zu ermitteln und dahingehend die Schleife aufzubauen.
Die Funktion EOF gibt den Wert True zurck, wenn das Ende einer Datei erreicht ist. Die Syn-
tax dieser Funktion lautet:
EOF(Dateinummer)
Das erforderliche Argument Dateinummer ist ein Wert vom Typ Integer, der eine beliebige gl-
tige Dateinummer enthlt.
49 Textdatei Zeile fr Zeile auslesen
Im folgenden Beispiel aus Listing 59 wird eine Textdatei Zeile fr Zeile gelesen und im
Direktfenster der Entwicklungsumgebung ausgegeben.
strZeichen = Input(7, #1)
[Link] strZeichen
Close #1
End Sub
Abbildung 27: Nur wenige Zeichen einer Textdatei werden gelesen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub TextdateiEinlesenKomplett()
Dim strZeile As String
Open "C:\[Link]" For Input As #1
Listing 59: Textdatei komplett einlesen
Listing 58: Einzelne Zeichen lesen ber die Funktion Input (Forts.)
Sandini Bib
Textdatei schreiben 89
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Anweisung Open ffnen Sie die Textdatei im Eingabemodus. In einer Do While-
Schleife arbeiten Sie Zeile fr Zeile der Textdatei ab, indem Sie innerhalb der Schleife die
Anweisung Line Input einsetzen und in der String-Variablen StrZeile zwischenspeichern.
Diese Zeilen geben Sie bei jedem Schleifendurchlauf ber die Anweisung [Link] im
Direktfenster der Entwicklungsumgebung aus.
Die Line Input -Anweisung liest einzelne Zeichen aus einer Datei, bis ein Wagenrcklauf
(Chr(13)) oder eine Folge aus Wagenrcklaufzeichen und Zeilenvorschubzeichen (Chr(13) +
Chr(10)) gelesen wird. Die Folge aus Wagenrcklaufzeichen und Zeilenvorschubzeichen wird
bersprungen und nicht an die gelesene Zeichenfolge angehngt.
50 Textdatei schreiben
Die Anweisung Print schreibt Daten, die fr die Ausgabe formatiert sind, in eine sequentielle
Datei. Die Syntax dieser Funktion lautet:
Print #Dateinummer, [Ausgabeliste]
Die Syntax der Print -Anweisung besteht aus folgenden Teilen:
Do While Not EOF(1)
Line Input #1, strZeile
[Link] strZeile
Loop
Close #1
End Sub
Abbildung 28: Die komplette Textdatei wurde eingelesen.
Teil Beschreibung
Dateinummer
Erforderlich. Eine beliebige gltige Dateinummer.
Ausgabeliste
Optional. Ausdruck oder Liste mit Ausdrcken, die ausgegeben
werden sollen.
Tabelle 38: Die Argumente der Anweisung Print
Listing 59: Textdatei komplett einlesen (Forts.)
Sandini Bib
90 Allgemeine VBA-Funktionen
Im folgenden Beispiel aus Listing 60 wird eine neue Textdatei angelegt, das aktuelle Datum
sowie der Anwendername erfasst. Anschlieend wird die Textdatei wieder geschlossen.
ffnen Sie ber die Anweisung Open die Textdatei im Ausgabemodus. Danach geben Sie ber
die Anweisung Print das aktuelle Datum ber die Funktion Date sowie den Anwendernamen
ber die Eigenschaft CurrentUser in der Textdatei aus. ber die Funktion Tab knnen Sie die
einzelnen Informationen durch eine Tabulatorschrittweite voneinander trennen.
Sollen Daten aus einer Variablen in eine Textdatei geschrieben werden, dann knnen Sie
hierfr die Anweisung Put einsetzen.
Die Anweisung Put schreibt Daten aus einer Variablen in eine Datentrgerdatei. Die Syntax
dieser Funktion lautet:
Put [#]Dateinummer, [Satznummer], Variablennummer
Die Syntax der Put-Anweisung besteht aus folgenden Teilen:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub TextdateiSchreiben()
Open "C:\[Link]" For Output As #1
Print #1, Date; Tab; [Link]
Close #1
End Sub
Listing 60: Eine Textdatei schreiben
Abbildung 29: Die Textdatei wurde geschrieben.
Teil Beschreibung
Dateinummer
Erforderlich. Eine beliebige gltige Dateinummer.
Satznummer
Optional. Wert vom Typ Variant (Long). Datensatznummer (fr
Dateien im Modus Random) oder Byte-Nummer (fr Dateien im Modus
Binary), bei der der Schreibvorgang beginnt.
Tabelle 39: Die Argumente der Anweisung Put
Sandini Bib
Textdatei schreiben 91
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 61 wird eine Datei angelegt und ein Mustersatz hineinge-
schrieben.
ber die Funktion Dir prfen Sie, ob die Textdatei bereits im angegebenen Verzeichnis
existiert. Wenn ja, dann lschen Sie diese ber die Anweisung Kill.
Die Funktion FreeFile gibt einen Wert vom Typ Integer zurck, der die nchste verfgbare
Dateinummer darstellt, die die Open-Anweisung zum ffnen einer Datei verwenden kann.
Die Syntax dieser Funktion lautet:
FreeFile[(Bereichsnummer)]
Variablenname
Erforderlich. Name der Variablen, die die auf den Datentrger zu
schreibenden Daten enthlt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlTXT
'=====================================================
Type MeinDatensatz
NName As String * 30
VName As String * 30
End Type
Sub TextdateiFllen()
Dim Datensatz As MeinDatensatz
Dim intNr As Integer
If Dir("C:\[Link]") <> "" Then
Kill "C:\[Link]"
End If
intNr = FreeFile
Open "C:\[Link]" For _
Random As #intNr Len = Len(Datensatz)
With Datensatz
.NName = "Vorname"
.VName = "Nachname"
End With
Put #intNr, , Datensatz
Close #intNr
End Sub
Listing 61: Daten aus einer Variablen in eine Textdatei schreiben
Teil Beschreibung
Tabelle 39: Die Argumente der Anweisung Put (Forts.)
Sandini Bib
92 Allgemeine VBA-Funktionen
Das optionale Argument Bereichsnummer ist ein Wert vom Typ Variant, der den Bereich fest-
legt, aus dem die nchste Dateinummer zurckgegeben werden wird. Bei 0 (Voreinstellung)
wird eine Dateinummer im Bereich 1 bis 255 (einschlielich) zurckgegeben. Bei 1 wird eine
Dateinummer im Bereich von 256 bis 511 zurckgegeben.
Danach wird die Textdatei neu angelegt und ber die Anweisung Put gefllt. Nach der Fl-
lung der Textdatei schliet die Funktion Close die Datei und speichert diese zugleich.
51 Textdateien im Batch erstellen
Das Schreiben einer Textdatei wird standardmig ber die Anweisung Write realisiert.
Mit der Anweisung Write knnen Sie Daten in eine sequentielle Datei schreiben. Die Syntax
dieser Funktion lautet:
Write #Dateinummer, [Ausgabeliste]
Die Syntax der Write-Anweisung besteht aus folgenden Teilen:
Sollen hintereinander mehrere Textdateien erstellt werden, dann knnen Sie dies ber eine
Schleife erledigen, die Sie in Listing 62 sehen.
Abbildung 30: Variableninhalte in Textdatei schreiben
Teil Beschreibung
Dateinummer
Erforderlich. Eine beliebige gltige Dateinummer.
Ausgabeliste
Optional. Ein oder mehrere (durch Kommas getrennte) numerische Aus-
drcke oder Zeichenfolgenausdrcke, die in eine Datei geschrieben wer-
den sollen.
Tabelle 40: Die Argumente der Anweisung Write
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Listing 62: Mehrere Dateien erstellen und schreiben
Sandini Bib
Zugriffsmodus einer Datei feststellen und setzen 93
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Wechseln Sie zunchst ber die Anweisung ChDir in das gewnschte Verzeichnis, in welches
Sie die Textdateien schreiben mchten. Setzen Sie danach eine Schleife auf, die genau dreimal
durchlaufen wird. Innerhalb der Schleife ffnen Sie die Dateien im Ausgabemodus und
schreiben ber die Anweisung Write jeweils das aktuelle Datum sowie die Uhrzeit, die Sie
ber die Funktion Now ermitteln knnen. Die Anweisung Reset schliet alle Datentrgerda-
teien, die mit der Open-Anweisung geffnet wurden.
52 Zugriffsmodus einer Datei feststellen und setzen
ber die Funktion FileAttr knnen Sie den Zugriffsmodus einer geffneten Datei feststellen.
Die Syntax dieser Funktion lautet:
FileAttr(filenumber, returntype)
Die Syntax der FileAttr-Funktion verwendet die folgenden benannten Argumente:
Die Anweisung GetAttr gibt einen Wert vom Typ Integer zurck, der die Attribute einer
Datei, eines Verzeichnisses darstellt. Die Syntax dieser Funktion lautet:
GetAttr(Pfadname)
Sub TextdateienImBatch()
Dim intDateiNr As Integer
ChDir "C:\Eigene Dateien\"
For intDateiNr = 1 To 3
Open "Datei" & intDateiNr & ".txt" For Output As #iDateiNr
Write #intDateiNr, Now
Next intDateiNr
Reset
End Sub
Teil Beschreibung
Filenumber
Erforderlich; ein Wert vom Typ Integer. Eine beliebige gltige Datei-
nummer.
Returntype
Erforderlich; ein Wert vom Typ Integer. Zahl, die die Art der zurck-
zugebenden Informationen festlegt:
Input = 1
Output = 2
Random = 4
Append = 8
Binary = 32
Tabelle 41: Die Argumente der Funktion FileAttr
Listing 62: Mehrere Dateien erstellen und schreiben (Forts.)
Sandini Bib
94 Allgemeine VBA-Funktionen
Das erforderliche Argument Pfadname ist ein Zeichenfolgenausdruck, der einen Dateinamen
angibt. Pfadname kann ein Verzeichnis oder ein Laufwerk enthalten.
Der von GetAttr zurckgegebene Wert ist die Summe der folgenden Attributwerte:
Im folgenden Beispiel aus Listing 63 wird eine bestimmte Datei aus dem Windows-Verzeich-
nis berprft.
ber die SetAttr-Anweisung knnen Sie Dateiattribute setzen. Die Syntax dieser Funktion
lautet:
SetAttr pathname, attributes
Die Syntax der SetAttr-Anweisung verwendet die folgenden benannten Argumente:
Konstante Wert Beschreibung
vbNormal 0
Normal.
vbReadOnly 1
Schreibgeschtzt.
vbHidden 2
Versteckt.
vbSystem 4
Systemdatei. Beim Macintosh nicht verfgbar.
vbDirectory 16
Verzeichnis oder Ordner.
vbArchive 32
Datei wurde seit dem letzten Sichern gendert.
vbAlias 64
Angegebener Dateiname ist ein Alias. Nur beim Macintosh
verfgbar.
Tabelle 42: Die Argumente der Anweisung GetAttr
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiAttributAuslesen()
Dim attribut As VbFileAttribute
attribut = vbHidden
If attribut And GetAttr _
("C:\Windows\[Link]") Then
MsgBox "Datei ist verborgen"
Else
MsgBox "Datei ist nicht verborgen"
End If
End Sub
Listing 63: Dateiattribut auslesen
Sandini Bib
Externes Programm starten 95
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Das Argument attributes hat die folgenden Einstellungen:
Im folgenden Beispiel aus Listing 64 wird die Datei [Link] mit dem Attribut Versteckt
ausgestattet.
Weisen Sie der Anweisung SetAttr die Konstante vbHidden zu, um die angegebene Datei mit
dem Attribut Versteckt zu belegen.
53 Externes Programm starten
Mithilfe der Funktion Shell knnen Sie ein externes Programm aus Access heraus aufrufen.
Die Syntax dieser Funktion lautet:
Shell(pathname[,windowstyle])
Die Syntax der Shell-Funktion verwendet die folgenden benannten Argumente:
Teil Beschreibung
Pathname
Erforderlich. Zeichenfolgenausdruck, der einen Dateinamen angibt.
Der Dateiname kann ein Verzeichnis oder einen Ordner sowie ein
Laufwerk enthalten.
Attributes
Erforderlich. Konstante oder numerischer Ausdruck, die/der die
Summe der Dateiattribute angibt.
Tabelle 43: Die Argumente der Anweisung SetAttr
Konstante Wert Beschreibung
vbNormal 0
Normal (Voreinstellung).
vbReadOnly 1
Schreibgeschtzt.
vbHidden 2
Versteckt.
vbSystem 4
Systemdatei. Beim Macintosh nicht verfgbar.
vbArchive 32
Datei wurde seit dem letzten Speichern gendert.
Tabelle 44: Die Einstellungen fr das Argument attributes
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiAttributSetzen()
SetAttr "c:\[Link]", vbHidden
End Sub
Listing 64: Dateiattribut setzen
Sandini Bib
96 Allgemeine VBA-Funktionen
Die Werte des benannten Arguments windowstyle lauten:
Notizblock aufrufen
Im folgenden Beispiel aus Listing 65 wird das Programm Notepad gestartet. Danach wird
versucht, eine bestimmte Datei zu laden.
Teil Beschreibung
pathname
Erforderlich; Wert vom Typ Variant (String). Name des auszufhrenden Pro-
gramms sowie alle erforderlichen Argumente oder Befehlszeilenoptionen.
Auch Verzeichnis- oder Laufwerksangaben knnen enthalten sein.
windowstyle
Optional. Wert vom Typ Variant (Integer), der dem Stil des Fensters ent-
spricht, in dem das Programm ausgefhrt werden soll. Wenn windowstyle
nicht angegeben wird, erhlt das Programm den Fokus und wird im mini-
mierten Zustand gestartet.
Tabelle 45: Die Argumente der Funktion Shell
Konstante Wert Beschreibung
vbHide 0
Das Fenster ist ausgeblendet und das ausge-
blendete Fenster erhlt den Fokus.
vbNormalFocus 1
Das Fenster hat den Fokus und die ursprng-
liche Gre und Position werden wiederher-
gestellt.
VbMinimizedFocus 2
Das Fenster wird als Symbol mit Fokus
angezeigt.
vbMaximizedFocus 3
Das Fenster wird maximiert mit Fokus
angezeigt.
vbNormalNoFocus 4
Die zuletzt verwendete Gre und Position
des Fensters wird wiederhergestellt. Das
momentan aktive Fenster bleibt aktiv.
vbMinimizedNoFocus 6
Das Fenster wird als Symbol angezeigt. Das
momentan aktive Fenster bleibt aktiv.
Tabelle 46: Die Einstellungen fr das Argument windowstyle
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub ExternesProgrammAufrufen()
Dim varA As Variant
Listing 65: Ein externes Programm aufrufen
Sandini Bib
Externes Programm starten 97
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Funktion Shell den Pfad sowie den Namen der Anwendung, die Sie star-
ten mchten. Soll zustzlich eine Datei geffnet werden, dann geben Sie diese inklusive des
Pfads an. ber das letzte Argument legen Sie fest, in welchem Fensterstil die Anwendung
angezeigt werden soll. Dabei steht die Nummer 3 fr die maximierte Fensteransicht.
Windows Explorer mit eingestelltem Verzeichnis aufrufen
Im folgenden Beispiel aus Listing 66 wird der Windows-Explorer ber die Funktion Shell
aufgerufen und ein bestimmtes Verzeichnis schon ausgewhlt.
Noch schneller knnen Sie den Windows-Explorer aufrufen, indem Sie den Pfad zu dieser
Anwendung weglassen, wie es im Makro aus Listing 67 gezeigt wird. Die Windows-Standard-
programme werden in der Regel automatisch gefunden.
varA = Shell("C:\Windows\[Link] C:\[Link]", 3)
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub WindowsExlorerAufrufen()
On Error GoTo fehler
Shell "C:\WINDOWS\[Link] c:\Eigene Dateien", 1
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 66: Den Windows Explorer aufrufen und Verzeichnis vorab einstellen Variante 1
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub WindowsExlorerAufrufenKurzform()
On Error GoTo fehler
Shell "[Link] c:\Eigene Dateien", 1
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 67: Den Windows-Explorer aufrufen und Verzeichnis einstellen Variante 2
Listing 65: Ein externes Programm aufrufen (Forts.)
Sandini Bib
98 Allgemeine VBA-Funktionen
In beiden Makros stellen Sie das gewnschte Verzeichnis, das im Windows-Explorer ange-
zeigt werden soll, gleich im Anschluss an die ausfhrbare Datei (exe) ein.
Internet Explorer aufrufen und Bild laden
Im folgenden Beispiel aus Listing 68 wird der Internet Explorer aufgerufen und ein bestimm-
tes Bild aus einem Verzeichnis direkt geffnet.
Abbildung 31: Der Explorer wurde im angegebenen Verzeichnis geffnet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub InternetExplorerAufrufen()
On Error GoTo fehler
Shell "c:\Programme\Internet explorer\[Link] " & _
"c:\Eigene Dateien\128-2803_IMG.JPG", 2
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 68: Internet Explorer aufrufen und Bild laden
Sandini Bib
Absolutwert ausgeben 99
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Funktion Shell den kompletten Pfad des Internet Explorers und im
Anschluss den Pfad zur Bilddatei, die angezeigt werden soll.
54 Absolutwert ausgeben
Spielt das Vorzeichen einer Zahl keine Rolle, dann spricht man von einem Absolutwert einer
Zahl. Diesen Absolutwert bekommen Sie, indem Sie die Funktion ABS einsetzen. Die Syntax
dieser Funktion lautet:
Abs(Zahl)
Das erforderliche Argument Zahl kann ein beliebiger zulssiger numerischer Ausdruck sein.
Wenn Zahl den Wert Null enthlt, wird Null zurckgegeben. Wenn die Variable nicht initiali-
siert ist, wird der Wert Null zurckgegeben.
Abbildung 32: Frh bt sich
Sandini Bib
100 Allgemeine VBA-Funktionen
55 Vorzeichen auslesen
Die Funktion Sgn gibt das Vorzeichen eines Werts als Faktor (10 oder 1) zurck. Die Syntax
der Funktion lautet:
Sgn(Zahl)
Das erforderliche Argument Zahl kann ein beliebiger numerischer Ausdruck sein.
Im folgenden Beispiel aus Listing 69 werden einige Zahlen dem Vorzeichen nach ausgewer-
tet. Dabei wird eine Funktion erstellt, der die Zahl bergeben wird. Als Rckgabewert meldet
die Funktion einen Text, den Sie aus der ersten Spalte der Tabelle 47 entnehmen knnen.
Wert von Zahl Rckgabewert von Sgn
Grer als Null 1
Gleich Null 0
Kleiner als Null 1
Tabelle 47: Die Rckgabewerte der Funktion Sgn
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Function VorzeichenErmitteln(sngZahl As Single) As String
Select Case Sgn(sngZahl)
Case 1
VorzeichenErmitteln = "Grer Null"
Case 0
VorzeichenErmitteln = "Null"
Case 1
VorzeichenErmitteln = "Kleiner Null"
End Select
End Function
Sub Vorzeichen()
MsgBox VorzeichenErmitteln(-65)
End Sub
Listing 69: Vorzeichen prfen ber die Funktion Sgn
Sandini Bib
Abschreibung errechnen (degressiv) 101
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
56 Abschreibung errechnen (degressiv)
Soll die Abschreibung eines Guts nach der degressiven Methode errechnet werden, dann
wird fr diese Aufgabe die Funktion DDB eingesetzt. Diese Funktion errechnet den Abschrei-
bungswert bei geometrisch degressiver Abschreibung. Die Syntax dieser Funktion lautet:
DDB(cost, salvage, life, period[, factor])
Die DDB-Funktion hat die folgenden benannten Argumente:
Im folgenden Beispiel aus Listing 70 wird eine Maschine nach der geometrisch degressiven
Abschreibungsmethode abgeschrieben.
Teil Beschreibung
Cost
Erforderlich. Ein Wert vom Typ Double, der die Anschaffungskosten des
Vermgenswerts angibt.
Salvage
Erforderlich. Ein Wert vom Typ Double, der den Wert des Vermgens-
werts am Ende seiner Nutzungsdauer angibt.
Life
Erforderlich. Ein Wert vom Typ Double, der die Lnge der Nutzungsdauer
des Vermgenswerts angibt.
Period
Erforderlich. Ein Wert vom Typ Double, der den Zeitraum angibt, fr den
die Abschreibung des Vermgenswerts berechnet wird.
Factor
Optional. Ein Wert vom Typ Variant, der den Faktor angibt, um den der
Wert vermindert wird. Wird der Wert nicht angegeben, so wird 2 (geo-
metrisch degressive Methode) angenommen.
Tabelle 48: Die Argumente der Funktion DDB
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Sub AbschreibungDegressiv()
Dim curWert As Currency
Dim curEndwert As Currency
Dim intDauer As Integer
Dim intPeriode As Integer
intDauer = 5
curWert = 2500
Endwert = 1
For intPeriode = 1 To intDauer
[Link] "Jahr " & intPeriode & ": " & _
DDB(curWert, curEndwert, intDauer, intPeriode)
Listing 70: Die degressive Abschreibung berechnen
Sandini Bib
102 Allgemeine VBA-Funktionen
Deklarieren Sie zunchst einige Variablen und fllen Sie diese mit den Parametern, die fr
die Abschreibung gefordert werden. In einer For Next-Schleife ermitteln Sie mithilfe der
Funktion DDB die jeweiligen Abschreibungsbetrge im Direktfenster der Entwicklungsumge-
bung.
57 Abschreibung errechnen (linear)
Soll die Abschreibung eines Guts nach der linearen Methode errechnet werden, dann wird
fr diese Aufgabe die Funktion SLN eingesetzt. Diese Funktion errechnet den periodischen
Abschreibungswert bei linearer Abschreibung ber einen bestimmten Zeitraum. Die Syntax
der Funktion lautet:
SLN(cost, salvage, life)
Die SLN-Funktion hat folgende benannte Argumente:
Im folgenden Beispiel aus Listing 71 wird eine Maschine nach der linearen Abschreibungs-
methode abgeschrieben.
Next intPeriode
End Sub
Abbildung 33: Die degressive Abschreibung wurde errechnet.
Teil Beschreibung
Cost
Erforderlich. Ein Wert vom Typ Double, der die Anschaffungskosten des
Vermgenswerts angibt.
Salvage
Erforderlich. Ein Wert vom Typ Double, der den Vermgenswert am Ende seiner
Nutzungsdauer angibt.
Life
Erforderlich. Ein Wert vom Typ Double, der die Lnge der Nutzungsdauer des
Vermgenswerts angibt.
Tabelle 49: Die Argumente der Funktion SLN
Listing 70: Die degressive Abschreibung berechnen (Forts.)
Sandini Bib
Ganzzahligen Wert ermitteln 103
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie zunchst einige Variablen und fllen Sie diese mit den Parametern, die fr
die Abschreibung gefordert werden. In einer For Next-Schleife ermitteln Sie mithilfe der
Funktion SLN die jeweiligen Abschreibungsbetrge im Direktfenster der Entwicklungsumge-
bung.
58 Ganzzahligen Wert ermitteln
Um aus einer Zahl mit Dezimalstellen den ganzzahligen Wert zu ermitteln, knnen Sie die
Funktionen Fix oder Int einsetzen, je nachdem, welches Ergebnis Sie erhalten mchten.
Die Funktion Fix gibt den Vorkommawert einer Zahl zurck.
Fix(Zahl)
Die Funktion Int gibt den Vorkommawert einer Zahl zurck.
Int(Zahl)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Sub AbschreibungLinear()
Dim curWert As Currency
Dim curEndwert As Currency
Dim intDauer As Integer
Dim intz As Integer
intDauer = 5
curWert = 2500
curEndwert = 0
For intz = 1 To intDauer
[Link] "Jahr " & intz & ": " & _
SLN(curWert, curEndwert, intDauer)
Next intz
End Sub
Listing 71: Die lineare Abschreibung errechnen
Abbildung 34: Die lineare Abschreibung wurde errechnet.
Sandini Bib
104 Allgemeine VBA-Funktionen
Das erforderliche Argument Zahl ist ein Wert vom Typ Double oder ein beliebiger zulssiger
numerischer Ausdruck. Wenn Zahl den Wert Null enthlt, wird Null zurckgegeben.
Im folgenden Beispiel aus Listing 72 werden die ganzzahligen Werte einiger Zahlen ermittelt.
59 Zahlen runden
Mithilfe der Funktion Round runden Sie einen Zahlenwert auf Basis einer angegebenen Dezi-
malstelle. Die Syntax dieser Funktion lautet:
Round(Ausdruck [,AnzahlAnDezimalpunktn])
Die Syntax der Round-Funktion besteht aus folgenden Teilen:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Sub Ganzzahl()
[Link] "Fix: aus 10,3 wird " & Fix(10.3)
[Link] "Fix: aus 10,1 wird " & Fix(10.1)
[Link] "Fix: aus -10,7 wird " & Fix(-10.7)
[Link] "Fix: aus -10,3 wird " & Fix(-10.3)
[Link] "Int: aus 10,3 wird " & Int(10.3)
[Link] "Int: aus 10,1 wird " & Int(10.1)
[Link] "Int: aus -10,7 wird " & Int(-10.7)
[Link] "Int: aus -10,3 wird " & Int(-10.3)
End Sub
Listing 72: Ganzzahlige Werte ber die Funktionen Fix und Int herstellen
Abbildung 35: Die beiden Funktionen liefern zum Teil unterschiedliche Ergebnisse.
Sandini Bib
Zahlen runden 105
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 73 werden einige Zahlen auf verschiedene Art und Weise
gerundet.
Je nachdem, wie Sie das zweite Argument der Funktion Round angeben, wird die Rundung der
Zahlen durchgefhrt.
Teil Beschreibung
Ausdruck
Erforderlich. Numerischer Ausdruck, der gerundet wird.
AnzahlAnDezimalpunkten
Optional. Zahl, die angibt, wie viele Stellen rechts vom
Dezimalpunkt beim Runden bercksichtigt werden.
Wird dieser Wert ausgelassen, gibt die Round-Funktion
Ganzzahlen zurck.
Tabelle 50: Die Argumente der Funktion Round
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Sub Runden()
[Link] Round(12.456, 0)
[Link] Round(12.456, 1)
[Link] Round(12.456, 2)
[Link] Round(12.456, 3)
[Link] Round(-12.456, 1)
[Link] Round(-12.456, 2)
[Link] Round(-12.456, 3)
End Sub
Listing 73: Zahlen runden
Abbildung 36: Die Ergebnisse des Rundens
Sandini Bib
106 Allgemeine VBA-Funktionen
60 Zinssatz errechnen
Wird ein Kredit genommen, wobei Kreditsumme sowie Laufzeit und die monatliche Rck-
zahlung bekannt sind, dann knnen Sie den Zinssatz ber die Funktion Rate ausrechnen.
Die Funktion Rate errechnet den Zinssatz zu einer Annuitt bei festen Zeitrumen, konstan-
ten Zahlungen und festem Zinssatz.
Rate(nper, pmt, pv[, fv[, type[, guess]]])
Die Rate-Funktion hat folgende benannte Argumente:
Im folgenden Beispiel aus Listing 74 wird ein Kredit von 150.000 Euro aufgenommen. Der
Kredit soll nach 12 Jahren zurckbezahlt sein. Monatlich werden jeweils 650 Euro abbezahlt.
Wie hoch ist nun der Zinssatz?
Teil Beschreibung
nper
Erforderlich. Ein Wert vom Typ Double, der die Gesamtanzahl der Zahlungs-
zeitrume fr die Annuitt angibt.
pmt
Erforderlich. Ein Wert vom Typ Double, der die Zahlung pro Zeitraum angibt.
Die Zahlungen enthalten gewhnlich Kapital und Zinsen und ndern sich
whrend der Laufzeit einer Annuitt nicht.
pv
Erforderlich. Ein Wert vom Typ Double, der den Barwert oder heutigen Wert
einer Folge zuknftiger Aus- oder Einzahlungen angibt.
fv
Optional. Ein Wert vom Typ Variant, der den Endwert oder Kontostand
angibt, der nach der letzten Zahlung erreicht sein soll.
type
Optional. Ein Wert vom Typ Variant, der angibt, wann Zahlungen fllig sind.
Bei 0 sind die Zahlungen am Ende eines Zahlungszeitraums fllig, bei 1 zu
Beginn des Zahlungszeitraums. Wird der Wert nicht angegeben, so wird 0
angenommen.
guess
Optional. Ein Wert vom Typ Variant, der einen von Ihnen geschtzten Wert
enthlt, der von Rate zurckgegeben wird. Wird der Wert nicht angegeben, so
ist guess gleich 0,1 (10 Prozent).
Tabelle 51: Die Argument der Funktion Rate
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Listing 74: Zinssatz errechnen ber die Funktion Rate
Sandini Bib
Ansparungsbetrag errechnen 107
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie zunchst einige Variablen und fllen Sie diese mit den Parametern, die fr
die Zinssatzberechnung gefordert werden. Fllen Sie die bentigten Variablen und berge-
ben Sie diese der Funktion Rate. Geben Sie danach das Ergebnis am Bildschirm aus.
61 Ansparungsbetrag errechnen
Wenn Sie einen monatlichen Betrag fr die Laufzeit ber mehrere Jahre zu einem bestimm-
ten Zinssatz anlegen, dann erhalten Sie zum Ende der Laufzeit ein Gesamtkapital, das Sie
ber die Funktion FV ausrechnen knnen.
Die Funktion FV errechnet den zuknftigen Wert einer Annuitt bei konstanter Zahlung,
festem Zins und fester Laufzeit.
FV(rate, nper, pmt[, pv[, type]])
Die FV-Funktion hat die folgenden benannten Argumente:
Sub ZinssatzErrechnen()
Dim curEndWert As Currency
Dim curAnfangwert As Currency
Dim curBetrag As Currency
Dim intMonate As Integer
Dim intZahlTyp As Integer
Dim sngZINS As Single
curEndWert = 0
curAnfangwert = 150000
curBetrag = 650
intMonate = 12 * 12
intZahlTyp = 0
sngZINS = (Rate(intMonate, -curBetrag, curAnfangwert, _
curEndWert, intZahlTyp) * 12) * 100
MsgBox "Ihr Zinssatz betrgt " & _
Format(sngZINS, "#,#0.00")
End Sub
Abbildung 37: Das Ergebnis der Zinsrechnung
Listing 74: Zinssatz errechnen ber die Funktion Rate (Forts.)
Sandini Bib
108 Allgemeine VBA-Funktionen
Im folgenden Beispiel aus Listing 75 wird errechnet, wie sich ein angelegtes Kapital von
10000 Euro ber einen Zeitraum von 12 Jahren bei einem festen Zinssatz von 4,5% im Jahr
bei einer monatlichen Einzahlung von 100 Euro entwickelt.
Teil Beschreibung
rate
Erforderlich. Ein Wert vom Typ Double, der den Zinssatz pro Zeitraum
angibt. Wenn Sie beispielsweise einen Kredit mit einem Jahreszins von
10 Prozent aufnehmen und monatliche Zahlungen vereinbart haben, betrgt
der Zinssatz pro Zeitraum 0,1 dividiert durch 12 oder 0,0083.
nper
Erforderlich. Ein Wert vom Typ Integer, der die Gesamtanzahl der Zahlungs-
zeitrume fr die Annuitt angibt. Wenn Sie beispielsweise monatliche Zah-
lungen fr einen Autokredit mit 4 Jahren Laufzeit vereinbart haben, betrgt
die Summe der Zahlungszeitrume fr Ihren Kredit 4 * 12 (oder 48).
pmt
Erforderlich. Ein Wert vom Typ Double, der die Zahlung pro Zeitraum angibt.
Die Zahlungen enthalten gewhnlich Kapital und Zinsen und ndern sich
whrend der Laufzeit einer Annuitt nicht.
pv
Optional. Ein Wert vom Typ Variant, der den Barwert (oder Gesamtbetrag)
einer Folge zuknftiger Zahlungen zum jetzigen Zeitpunkt angibt. Wenn Sie
beispielsweise Geld aufnehmen, stellt die Kredithhe fr den Kreditgeber
den Barwert der von Ihnen zu leistenden monatlichen Zahlungen dar.
Wird der Barwert nicht angegeben, so wird 0 angenommen.
type
Optional. Ein Wert vom Typ Variant, der angibt, wann Zahlungen fllig sind.
Bei 0 sind die Zahlungen am Ende des Zahlungszeitraums fllig, bei 1 zu
Beginn des Zahlungszeitraums. Wird der Wert nicht angegeben, so wird 0
angenommen.
Tabelle 52: Die Argumente der Funktion FV
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Sub EndKapitalErrechnen()
Dim curWert As Currency
Dim intDauer As Integer
Dim curRate As Currency
Dim sngZins As Single
curWert = 10000
intDauer = 12 * 12
curRate = 100
sngZins = 0.045 / 12
Listing 75: Das Endkapital wurde berechnet.
Sandini Bib
Zufallszahlen erzeugen 109
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Funktion FV die bentigten Argumente. Da die Dauer in Monaten angege-
ben werden muss, multiplizieren Sie die Laufzeit in Jahren mit dem Multiplikator 12. Den
Zinssatz mssen Sie ebenfalls auf Monatsbasis herunterrechnen. ber die Funktion Format
bringen Sie das Ergebnis in das gewnschte Format.
62 Zufallszahlen erzeugen
Zum Erzeugen von Zufallszahlen werden zwei Befehle bentigt:
Die Anweisung Randomize initialisiert den Zufallsgenerator.
Randomize [Zahl]
Das optionale Argument Zahl ist ein Wert vom Typ Variant oder ein beliebiger zulssiger
numerischer Ausdruck.
Die Funktion Rnd liefert eine Zufallszahl mit Dezimalstellen zwischen 0 und 1.
Rnd[(Zahl)]
Das optionale Argument Zahl ist ein Wert vom Typ Single oder ein beliebiger zulssiger
numerischer Ausdruck.
Zufallszahlen im Bereich von 1 bis 100
Im folgenden Beispiel aus Listing 76 werden mithilfe der Funktion Rnd Zufallszahlen im
Bereich 1 bis 100 gebildet.
MsgBox "Gesamtkapital nach 12 Jahren : " & _
Format(-FV(sngZins, curRate, intDauer, curWert), "#,##0 _")
End Sub
Abbildung 38: Das formatierte Endergebnis
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Sub ZufallsZahlenErzeugen()
Listing 76: Zufallszahlen zwischen 1 und 100 bilden
Listing 75: Das Endkapital wurde berechnet. (Forts.)
Sandini Bib
110 Allgemeine VBA-Funktionen
ber die Anweisung Randomize initialisieren Sie den Zufallsgenerator. Danach setzen Sie eine
Schleife auf, die genau 10 Mal durchlaufen wird. Innerhalb der Schleife erstellen Sie Zufalls-
zahlen im Bereich zwischen 1 und 100. ber den Einsatz der Funktion Int werden aus diesen
Zufallszahlen, die noch Nachkommastellen aufweisen, Ganzzahlwerte gemacht.
Zufallsbuchstaben zwischen A und Z erzeugen
Wenn Sie das Makro aus Listing 76 erweitern, dann knnen Sie mithilfe der Funktion Rnd
sowie der Funktion Chr Zufallsbuchstaben wie in Listing 77 gezeigt bilden.
Dim intz As Integer
Randomize
For intz = 1 To 10
[Link] (Int(100 * Rnd + 1))
Next intz
End Sub
Abbildung 39: Zufallszahlen wurden erzeugt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlMath
'=====================================================
Sub ZufallsBuchstabenErzeugen()
Dim intz As Integer
Randomize
For intz = 1 To 10
[Link] (Chr(Int((122 - 97 + 1) * Rnd + 97)))
Next intz
End Sub
Listing 77: Zufallsbuchstaben erzeugen
Listing 76: Zufallszahlen zwischen 1 und 100 bilden (Forts.)
Sandini Bib
Eingabe prfen 111
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Anweisung Randomize initialisieren Sie den Zufallsgenerator. Danach setzen Sie eine
Schleife auf, die genau 10 Mal durchlaufen wird. Innerhalb der Schleife erstellen Sie Zufalls-
buchstaben. Dabei wenden Sie die Funktion Chr an, um den Zahlenwert in einen Buchstaben
zu wandeln.
63 Eingabe prfen
Die Prffunktionen kommen immer dann zum Einsatz, wenn Sie kontrollieren mchten,
welche Eingabe ein Anwender in einem Formular oder einem anderen Dialog vornimmt.
Im folgenden Beispiel aus Listing 78 muss der Anwender einen numerischen Wert in eine
Inputbox eingeben. Diese Eingabe knnen Sie ber die Funktion IsNumeric berprfen.
Abbildung 40: Die Zufallsbuchstaben wurden erzeugt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlPrf
'=====================================================
Sub EingabeChecken()
Dim strEingabe As String
strEingabe = InputBox("Geben Sie Ihr Alter ein!")
If strEingabe <> "" Then
If IsNumeric(strEingabe) Then
MsgBox "Eingabe ok!"
Else
MsgBox "Eingabe falsch!"
End If
End If
End Sub
Listing 78: Eingabe auf Richtigkeit prfen
Sandini Bib
112 Allgemeine VBA-Funktionen
Um zu testen, ob der Anwender berhaupt eine Eingabe vorgenommen hat, berprfen Sie,
ob nach dem Aufruf der Inputbox und dem Besttigen mit der OK-Schaltflche die Variable
StrEingabe einen Inhalt hat. Nur wenn dies so ist, dann wenden Sie die Funktion IsNumeric
an, um zu testen, ob eine korrekte Zahl eingegeben wurde.
64 Datenfeldcheck
Mithilfe der Funktion IsArray prfen Sie, ob es sich bei der angesprochenen Variablen um
ein Datenfeld (Array) handelt.
Um diese Funktion zu ben, schreiben Sie ein Makro, in dem Sie festlegen, wie gro ein
Datenfeld angelegt werden soll. Diese Information bergeben Sie einer Funktion, die das
Datenfeld in der gewnschten Gre anlegt und an die aufrufende Prozedur zurckliefert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlPrf
'=====================================================
Function ArrayBilden(intA As Integer) As Variant
ReDim ArrK(lngG)
Dim intz As Integer
For intz = LBound(ArrK, 1) To UBound(ArrK, 1)
ArrK(intz) = intz
Next intz
ArrayBilden = ArrK
End Function
Sub DynamischenArrayBilden()
Dim ArrK As Variant
Dim intz As Integer
ArrK = ArrayBilden(10)
If IsArray(ArrK) Then
For intz = LBound(ArrK, 1) To UBound(ArrK, 1)
[Link] ArrK(intz)
Next intz
End If
End Sub
Listing 79: Datenfelder bilden und prfen
Sandini Bib
Tabellencheck vornehmen 113
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
In der Zeile ArrK=ArrayBilden(10) rufen Sie die Funktion ArrayBilden auf und bergeben ihr
den Wert 10. Damit legt die Funktion ArrayBilden ein Datenfeld mit genau 10 Datenfeldern
an, eigentlich ja 11, da die 0 mitgezhlt wird. Nachdem die Funktion an die aufrufende Pro-
zedur das angelegte Datenfeld zurckmeldet, prfen Sie ber die Funktion IsArray, ob die
Rckgabe der Funktion auch den richtigen Datentyp, nmlich ein Datenfeld, liefert. Wenn
ja, dann setzen Sie eine Schleife auf, in der das Datenfeld ausgelesen wird. Setzen Sie dazu
den Index l zu Beginn der Schleife mithilfe der Funktion LBound auf den ersten Eintrag des
Datenfelds und arbeiten Sie sich dann bis zum letzten Feld des Datenfelds vor, welches Sie
ber die Funktion UBound ermitteln. Geben Sie nach jedem Schleifendurchlauf den Inhalt des
jeweiligen Datenfelds im Direktbereich ber die Anweisung [Link] aus.
65 Tabellencheck vornehmen
Mithilfe der Funktion IsObject knnen Sie beispielsweise berprfen, ob sich ein bestimmtes
Objekt in Ihrer Datenbank befindet. So wird diese Funktion im nchsten Beispiel eingesetzt,
um zu prfen, ob sich eine bestimmte Tabelle in der aktuellen Datenbank befindet. Nur dann
soll diese Tabelle auch geffnet werden. Diese Prfroutine sieht wie folgt aus:
Abbildung 41: Das Datenfeld wurde angelegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlPrf
'=====================================================
Function Tabelleda(strTab As String) As Boolean
On Error Resume Next
Tabelleda = IsObject([Link](strTab))
End Function
Listing 80: Tabellenexistenz prfen
Sandini Bib
114 Allgemeine VBA-Funktionen
ber die Methode CurrentDb haben Sie Zugriff auf die aktuelle geffnete Datenbank. Mithilfe
der Auflistung TableDefs knnen Sie kontrollieren, ob sich die bergebene Tabelle in der
Variablen s in der Datenbank befindet. Wenn ja, dann wenden Sie die Methode OpenTable an,
um die gewnschte Tabelle zu ffnen.
66 Punkte entfernen
Mithilfe der Typumwandlungsfunktion CDbl knnen Sie beispielsweise aus einem String, der
einen Wert enthlt, alle Punkte entfernen. Dieser String wird dann in einen Ausdruck des
Datentyps Double umgewandelt.
Im nchsten Beispiel aus Listing 81 werden aus einem String, der Tausenderpunkte enthlt,
diese Punkte entfernt und in einer Variablen vom Typ Double gespeichert.
Sub PrfenAufTabelle()
Dim b As Boolean
If Tabelleda("Personal") = True Then
[Link] "Personal"
Else
MsgBox "Tabelle ist nicht vorhanden!"
End If
End Sub
H
i
n
w
e
i
s
Wie Sie weitere Prffunktionen fr Access programmieren knnen, erfahren Sie im fol-
genden Kapitel.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlKonv
'=====================================================
Sub PunkteRaus()
Dim strText As String
Dim dblBetrag As Double
strText = "255.435.190,45"
[Link] "Zeichenkette vorher: " & strText
dblBetrag = CDbl(strText)
[Link] "Zeichenkette nachher: " & dblBetrag
End Sub
Listing 81: Punkte aus Zeichenfolge eliminieren
Listing 80: Tabellenexistenz prfen (Forts.)
Sandini Bib
Datumswerte umwandeln 115
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
67 Datumswerte umwandeln
Mithilfe der Typumwandlungsfunktion CDate knnen Sie Datumsangaben in Zeichenfolgen
in echte Datumsangaben umwandeln. So wird beispielsweise aus der Zeichenfolge
21. November 2004 das Datum 21.11.2004.
Sehen Sie weitere Beispiele im Listing 82.
Abbildung 42: Die Punkte wurden entfernt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlKonv
'=====================================================
Sub DatumswerteWandeln()
Const Datum1 = "11/25/1998 8:30 AM"
Const Datum2 = "12. Februar 2002 "
Const Datum3 = "Januar, 2002 "
[Link] Datum1 & " ---> " & CDate(Datum1)
[Link] Datum2 & " ---> " & CDate(Datum2)
[Link] Datum3 & " ---> " & CDate(Datum3)
End Sub
Listing 82: Zeichenfolgen in Datumswerte umwandeln
Abbildung 43: Die Textfolgen wurden erfolgreich umgewandelt.
Sandini Bib
116 Allgemeine VBA-Funktionen
68 Nachkommastellen entfernen
Mithilfe der Funktion CLng knnen Sie einen Wert in einen Datentyp Long umwandeln. Dabei
werden eventuell existierende Nachkommastellen gerundet.
Im folgenden Beispiel aus Listing 83 werden genau zehn Zufallszahlen im Zahlenbereich zwi-
schen 1000 und 99999 gebildet. Diese werden mithilfe der Funktion CLng in den richtigen
Datentyp umgewandelt.
ber die Anweisung CLng(99999 * Rnd + 1) bilden Sie eine Zufallszahl zwischen 10000 und
99999 und weisen dieser Zahl den Datentyp Long zu. ber die Funktion Format bringen Sie
die Werte in die gewnschte Form.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlKonv
'=====================================================
Sub NachkommastellenWeg()
Dim intz As Integer
Dim lngZahl As Long
For intz = 1 To 10
lngZahl = CLng(99900 * Rnd + 1)
[Link] "Zufallszahl " & Format(intz, "00") & _
" lautet " & Format(lngZahl, "0,##")
Next intz
End Sub
Listing 83: Zufallszahlen ohne Nachkommastellen bilden
Abbildung 44: Zufallszahlen mit Tausenderpunkt
Sandini Bib
Zahl aus Zeichenfolge extrahieren 117
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
69 Zahl aus Zeichenfolge extrahieren
Mithilfe der Funktion Val knnen Sie in einer Zeichenfolge enthaltene numerische Werte
herauszuholen.
Im folgenden Beispiel aus Listing 84 wird aus einer Zeichenfolge nur der numerische Wert
extrahiert.
70 Zahlen in Texte umwandeln
Fr die Umwandlung von Zahlen in Texte wird die Funktion Str eingesetzt. Dabei wird bei
der Umwandlung immer fr die erste Stelle ein Vorzeichen reserviert. Im Makro aus Listing
85 sehen Sie, wie die Umwandlung dabei vor sich geht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlKonv
'=====================================================
Sub ZahlAusFeldExtrahieren()
[Link] "70469 Stuttgart -----> " & Val("70469 Stuttgart")
[Link] "70467 Stuttgart -----> " & Val("70467 Stuttgart")
End Sub
Listing 84: Zahlenteil einer Zeichenfolge extrahieren
Abbildung 45: Die Postleitzahl wird extrahiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap01
' Dateiname [Link]
' Modul MdlKonv
'=====================================================
Sub ZahlInText()
Dim strText As String
Listing 85: Zahlen in Textwerte umwandeln
Sandini Bib
118 Allgemeine VBA-Funktionen
strText = Str(679) ' Liefert " 679".
strText = Str(-679.34) ' Liefert "-679.34".
strText = Str(123.986) ' Liefert " 123.986".
End Sub
Listing 85: Zahlen in Textwerte umwandeln (Forts.)
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Weitere Funktionen
In diesem Kapitel knnen Sie ausgesuchte API-Funktionen sowie Beispiele fr eigene Funk-
tionen nachschlagen. Viele Aufgaben in Access mssen nicht unbedingt durch den Einsatz
von VBA gelst werden. Zahlreiche Lsungen stecken auch schon direkt in Windows. Ihr
Betriebssystem stellt Ihnen eine ganze Reihe Dynamic Link Libraries (DLLs) zur Verfgung,
die Sie bei der Programmierung von Access einsetzen knnen. Diese DLLs enthalten Funk-
tionen, die u. a. fr die Speicher- und Ressourcenverwaltung, die Bereitstellung von Dialog-
und Steuerelementen, den Einsatz von Zeichenfunktionen, die Behandlung von Men- und
Symbolleisten, die Verwendung von Multimediafunktionen oder auch die Verwaltung von
E-Mails verantwortlich sind.
Wie Sie sehen, decken API-Funktionen nahezu alle Aufgaben in Windows und somit auch in
Access ab. Der Vorteil von API-Aufrufen ist beispielsweise auch deren universelle Einsetzbar-
keit. Ob Sie in Access, Excel, Word oder einer anderen beliebigen Windows-Anwendung mit
Programmierschnittstelle arbeiten, ist dabei gleichgltig. Sie knnen API-Funktionen aus
nahezu jeder Anwendung heraus aufrufen und fr Ihre Aufgaben nutzen.
Die bekannteste API ist die Windows-API, zu der auch die DLLs gehren, aus denen das
Windows-Betriebssystem besteht. Jede Windows-Anwendung kommuniziert direkt oder
indirekt mit der Windows-API. Durch die Windows-API wird sichergestellt, dass das Verhal-
ten aller unter Windows laufenden Anwendungen konsistent bleibt.
Ein Nachteil von API-Funktionen ist, dass Sie diese in der Online-Hilfe leider nicht nach-
schlagen knnen bzw. dass die Syntax von API-Funktionen recht kompliziert ist. Ein weiterer
Punkt ist der, dass API-Funktionen sehr sensibel reagieren, wenn Sie irgendein Argument
bzw. die Syntax der API-Funktion nicht genau einhalten. Access reagiert dann nicht selten
mit einem Programmabsturz.
Wenn Sie im Besitz des Office-Developer-Pakets sind, knnen Sie mithilfe des API-Viewers
gezielt nach bestimmten API-Funktionen suchen. Im anderen Fall empfiehlt sich fr dieses
Thema weiterfhrende Literatur.
Da es sich unser Buch vorrangig mit der VBA-Programmierung beschftigt, werden auf den
nchsten Seiten gezielt einige Aufgaben vorgestellt, deren Einsatz in der Programmierung
erstens viel Zeit spart und die zweitens in der Praxis gut verwendbar sind. Aber auch interes-
sante Mglichkeiten durch die Verwendung von API-Funktionen sollen nicht zu kurz kom-
men.
71 Ermittlung des CD-ROM-Laufwerks
In der ersten Aufgabe aus Listing 86 werden Sie ber den Einsatz einer API-Funktion heraus-
finden, welcher Laufwerksbuchstabe Ihrem CD-ROM-Laufwerk zugeordnet ist.
Sandini Bib
120 Weitere Funktionen
Bevor von VBA aus eine Funktion in einer DLL aufgerufen werden kann, mssen Sie VBA
mitteilen, wo sich die Funktion befindet und wie sie aufgerufen wird. Dazu verwenden Sie
eine Declare-Anweisung in einem Modul. Sobald der Verweis festgelegt ist, kann die DLL-
Funktion so aufgerufen werden, als sei sie Teil des Projekts. Durch das Schlsselwort Lib wird
bestimmt, welche DLL die Funktion enthlt. Folgende DLLs sind die am hufigsten verwen-
deten Bibliotheken in Windows:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetDrive
'=====================================================
Declare Function GetDriveType Lib "kernel32" Alias _
"GetDriveTypeA" (ByVal nDrive As String) As Long
Declare Function GetLogicalDriveStrings Lib _
"kernel32" Alias "GetLogicalDriveStringsA" _
(ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Public Const DRIVE_CDROM As Long = 5
Function CdRomLWBuchstabe() As String
Dim lLWTyp As Long
Dim sLW As String
Dim l As Long
Dim l1 As Long
Dim sBuffer As String
sBuffer = Space(200)
l = GetLogicalDriveStrings(200, sBuffer)
If l = 0 Then
CdRomLWBuchstabe = vbNullString
Exit Function
End If
l1 = 1
sLW = Mid(sBuffer, l1, 3)
Do While (Mid(sBuffer, l1, 1) <> vbNullChar)
lLWTyp = GetDriveType(sLW)
If lLWTyp = 5 Then
CdRomLWBuchstabe = sLW
Exit Function
End If
l1 = l1 + 4
sLW = Mid(sBuffer, l1, 3)
Loop
End Function
Listing 86: API-Funktion zur Ermittlung des CD-ROM-Laufwerks
Sandini Bib
Ermittlung des CD-ROM-Laufwerks 121
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
[Link]: Hier finden Sie Betriebssystemfunktionen z. B. fr die Speicherverwaltung
und die Ressourcenbehandlung.
[Link]: Diese DLL bernimmt die Fensterverwaltungsfunktionen wie z. B. Meldun-
gen, Mens, Symbolleisten und Kommunikation.
[Link]: Damit ist die GDI-Bibliothek (GDI = Graphics Device Interface) gemeint.
Sie enthlt die Funktionen fr die Gerteausgabe, z. B. Zeichnen, Anzeigen von Kontext
und Schriftartenverwaltung.
Im zweiten Schritt schreiben Sie eine Funktion und definieren einen Puffer vom Typ String,
in dem Sie alle logischen Laufwerksbezeichnungen Ihres Systems einlesen. Danach rufen Sie
die API-Funktion GetLogicalDriveStrings auf, die alle verwendeten Laufwerksbuchstaben in
den Puffer schreibt. Prfen Sie nach dem Fllen des Puffers gleich einmal die Lnge des Puf-
fers. Sind im Puffer 0 Zeichen enthalten, konnte die API-Funktion keine Laufwerksbuchsta-
ben ermitteln. In diesem Fall bergeben Sie der Funktion als Rckgabewert die Konstante
vbNullString, welche eine Zeichenfolge mit dem Wert 0 darstellt. Fr den Fall, dass der Puffer
gefllt ist, setzen Sie die Verarbeitung fort.
Im nchsten Schritt mssen Sie die einzelnen Laufwerke auslesen. Dazu legen Sie die Start-
position fest, bei der im Puffer begonnen werden soll, und speichern den Startwert 1 in der
Variablen l. Zerlegen Sie danach den Puffer, indem Sie die Funktion Mid einsetzen. Die Funk-
tion Mid bertrgt eine bestimmte Anzahl von Zeichen (genau drei, z. B. a:\), beginnend bei
der Startposition 1, in die String-Variable s. Setzen Sie nun eine Schleife auf, die den Puffer
Stck fr Stck zerlegt. Innerhalb der Schleife wenden Sie die API-Funktion GetDriveType an.
Diese API-Funktion liefert den Index fr das Laufwerk in der Variablen sLW zurck. Jeder
Laufwerkstyp weist einen eindeutigen Laufwerksindex auf. Diese Indizes knnen Sie der fol-
genden Tabelle entnehmen.
Rufen Sie nun die API-Funktion ber das Makro aus Listing 87 auf.
Index Beschreibung
2
Disketten oder auch ZIP-Laufwerk
3
Lokale Festplatte
4
Netzlaufwerk
5
CD-ROM-Laufwerk
6
RAM-Laufwerk
Tabelle 53: Die Laufwerksindizes fr die API-Funktion GetDriveType
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetDrive
Listing 87: CD-ROM-Laufwerk ermitteln
Sandini Bib
122 Weitere Funktionen
72 Namen des Anwenders ermitteln
Im folgenden Beispiel soll der Name des angemeldeten Benutzers unter Windows ermittelt
und ausgegeben werden. Fr diesen Zweck greifen Sie auf die Bibliothek [Link]
zurck und ntzen die API-Funktion GetUserName.
Erfassen Sie jetzt die API-Funktion aus Listing 88.
'=====================================================
Sub CDRomLW()
Dim strLW As String
strLW = CdRomLWBuchstabe()
MsgBox "Das CD-ROM-Laufwerk hat den Buchstaben " & strLW
End Sub
Abbildung 46: Das CD-ROM-Laufwerk wurde ermittelt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetUser
'=====================================================
Private Declare Function GetUserName Lib _
"[Link]" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Function AnwenderName() As String
Dim l As Long
Dim s As String
Const D_Puffer = 255
s = Space(D_Puffer)
l = D_Puffer
If CBool(GetUserName(s, l)) Then
AnwenderName = Left$(s, l - 1)
Else
AnwenderName = ""
End If
End Function
Listing 88: Anwendernamen ermitteln
Listing 87: CD-ROM-Laufwerk ermitteln (Forts.)
Sandini Bib
Computernamen ermitteln 123
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Rufen Sie ber eine Prozedur die Funktion Anwendername auf. In dieser Funktion wird ein lee-
rer Datenpuffer erzeugt. Danach rufen Sie die API-Funktion GetUserName auf und berpr-
fen, ob ein Anwendername ermittelt werden konnte. Um eventuell mitgeschleppte
Leerzeichen abzuschneiden, setzen Sie die Funktion Left ein und bertragen den ermittelten
Anwendernamen. Da die API-Funktion ein Zeichen zu viel bertrgt, subtrahieren Sie dieses
von der Gesamtlnge des ermittelten Anwendernamens.
73 Computernamen ermitteln
Den Computernamen knnen Sie in der Systemsteuerung von Windows unter NETZWERK
herausfinden. Schneller geht es aber mit der API-Funktion aus Listing 89.
ber die API-Funktion GetComputerName knnen Sie den Computernamen ermitteln.
Sub WerBinIch()
MsgBox "Der Anwender " & AnwenderName & " ist angemeldet!"
End Sub
Abbildung 47: Anwendernamen auslesen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetComp
'=====================================================
Private Declare Function GetComputerName Lib _
"kernel32" Alias "GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Sub ComputerNameAnzeigen()
Dim strString As String
strString = String(255, Chr$(0))
GetComputerName strString, 255
MsgBox "Der Computer heit: " & strString
End Sub
Listing 89: Computernamen ausgeben
Listing 88: Anwendernamen ermitteln (Forts.)
Sandini Bib
124 Weitere Funktionen
74 Bedienung des CD-ROM-Laufwerks
Haben Sie sich schon einmal berlegt, dass Sie Ihr CD-ROM-Laufwerk auch gut als Tassen-
halter verwenden knnen? Dazu mssen Sie Ihr CD-ROM-Laufwerk nur ffnen und schon
haben Sie eine clevere Ablagemglichkeit mehr. Diese nicht ganz ernst gemeinte Anwendung
knnen Sie automatisieren, indem Sie Ihr CD-ROM-Laufwerk auf Kommando ffnen bzw.
schlieen. Die API-Funktion fr diese Aufgabe heit mciSendString.
ffnen bzw. schlieen Sie mithilfe der folgenden API-Funktion aus Listing 90 das CD-ROM-
Laufwerk.
75 Die Bildschirmauflsung ermitteln
Mchten Sie prfen, mit welcher Bildschirmauflsung ein Anwender arbeitet, dann setzen
Sie die API-Funktion aus Listing 91 ein.
Abbildung 48: Computernamen auslesen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlCDROM
'=====================================================
Public Declare Function mciSendString _
Lib "[Link]" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long
Sub ffnenCDROMLaufwerk()
mciSendString "Set CDAudio Door Open", 0&, 0, 0
End Sub
Sub SchlieenCDROMLaufwerk()
mciSendString "Set CDAudio Door Closed", 0&, 0, 0
End Sub
Listing 90: CD-ROM-Laufwerk ansprechen
Sandini Bib
Ist ein externes Programm gestartet? 125
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
76 Ist ein externes Programm gestartet?
Im nchsten Beispiel prfen Sie, ob Ihr E-Mail-Programm OUTLOOK bereits gestartet ist. Die
API-Funktion fr diese Aufgabe finden Sie in Listing 92.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetDev
'=====================================================
Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hdc As Long, ByVal nIndex As Long) As Long
Declare Function GetDC Lib "user32" _
(ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" _
(ByVal hwnd As Long, ByVal hdc As Long) As Long
Const HORZRES = 8
Const VERTRES = 10
Sub BildschirmAuflsungErmitteln()
MsgBox "Ihre Bildschirmauflsung lautet:" & _
Chr(13) & BilschirmAuflsung()
End Sub
Function BilschirmAuflsung()
Dim lRval As Long
Dim lDc As Long
Dim lHSize As Long
Dim lVSize As Long
lDc = GetDC(0&)
lHSize = GetDeviceCaps(lDc, HORZRES)
lVSize = GetDeviceCaps(lDc, VERTRES)
lRval = ReleaseDC(0, lDc)
BilschirmAuflsung = lHSize & "x" & lVSize
End Function
Listing 91: Bildschirmauflsung ermitteln
Abbildung 49: Bildschirmauflsung ermitteln
Sandini Bib
126 Weitere Funktionen
ber die API-Funktion FindWindow knnen Sie prfen, ob eine andere Anwendung bereits
gestartet ist. Ist dies der Fall, dann wird Ihnen ein Wert <> 0 zurckgeliefert.
77 Externes Programm aufrufen
Um externe Programme aufzurufen, setzen Sie die API-Funktion ShellExecute ein. Im fol-
genden Makro aus Listing 93 wird beispielsweise der Windows-Rechner aufgerufen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlFindW
'=====================================================
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal szClass$, ByVal szTitle$) _
As Long
Sub MailProgrammAktiv()
Dim hfenster As String
hfenster = FindWindow(vbNullString, "Microsoft Outlook")
If hfenster = 0 Then
MsgBox "Outlook nicht aktiv!"
Else
MsgBox ("Outlook gestartet!")
End If
End Sub
Listing 92: Ist ein externes Programm momentan geffnet?
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlShell
'=====================================================
Private Declare Function ShellExecute Lib _
"[Link]" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal bShowCMD As Long) _
As Long
Sub RechnerAufrufen()
ShellExecute hwnd, "open", "[Link]", 0, 0, SW_SHOW
End Sub
Listing 93: Ein externes Programm starten
Sandini Bib
Wie lange luft ein externes Programm? 127
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der API-Funktion unter anderem den Namen der Anwendung, die Sie starten
mchten.
78 Wie lange luft ein externes Programm?
Im nchsten Beispiel soll ermittelt werden, wie lange ein externes Programm luft, und der
Start- und Endezeitpunkt im Direktfenster dokumentiert werden. Nehmen wir beispiels-
weise an, Sie mchten protokollieren, wann und wie lange Sie das Spiel Solitr gespielt
haben. Dazu setzen Sie die API-Funktionen OpenProcess sowie GetExitCodeProcess ein. Die
eine API-Funktion aus Listing 94 erffnet und berwacht den Start einer externen Anwen-
dung, die andere meldet das Beenden einer Anwendung zurck.
Abbildung 50: Externes Programm aufrufen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlOpenProc
'=====================================================
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal L_Prozess As Long, _
l_Ende As Long) As Long
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STILL_ACTIVE = &H103
Sub StartenExternerAnwendung()
Dim Beginn As Double
Listing 94: Wie lange luft ein gestartetes Programm?
Sandini Bib
128 Weitere Funktionen
Speichern Sie gleich zu Beginn des Makros die aktuelle Uhrzeit mithilfe der Funktion Now in
der Variablen Beginn. Danach schreiben Sie diesen Startzeitpunkt in das Direktfenster. Als
Nchstes setzen Sie die Funktion Shell ein, um das externe Programm zu starten. Dabei
haben Sie die Mglichkeit, als Argument die Anordnung der externen Anwendung auf dem
Bildschirm zu bestimmen. Entnehmen Sie diese verschiedenen Indizes und deren Bedeutung
der Tabelle 54.
Rufen Sie jetzt die erste API-Funktion OpenProcess auf, die den aktiven Prozess (im Beispiel
das Spiel Solitr) verwaltet. Den Rckgabewert dieser Funktion speichern Sie in einer
Variablen vom Datentyp Long. Setzen Sie nun eine Schleife auf, die so lange abgearbeitet
wird, bis die API-Funktion GetExitCodeProcess die Beendigung des externen Programms
meldet. Mithilfe der Funktion DoEvents bergeben Sie die Steuerung an das Betriebssystem,
damit andere Ereignisse verarbeitet werden knnen. Somit luft diese Schleife im Hinter-
Dim l As Long
Dim L_Prozess As Long
Dim l_Ende As Long
Beginn = Now
[Link] "Start des Programms um: " & Now
l = Shell("[Link]", 1)
L_Prozess = _
OpenProcess(PROCESS_QUERY_INFORMATION, False, l)
MsgBox "Zeitnahme luft..."
Do While l_Ende = STILL_ACTIVE
GetExitCodeProcess L_Prozess, l_Ende
DoEvents
Loop
Ende = Now
[Link] "Die Anwendung wurde um " & Now & " beendet!"
[Link] "Das Programm lief genau: " & Format(Ende-Beginn, "s") & " Sekunden!"
End Sub
Index Beschreibung
0
Das Fenster der aufgerufenen Anwendung ist ausgeblendet und das ausgeblendete
Fenster erhlt den Fokus.
1
Das Fenster hat den Fokus und die ursprngliche Gre und Position werden
wiederhergestellt.
2
Das Fenster wird als Symbol mit Fokus angezeigt.
3
Das Fenster wird maximiert (Vollbild) mit Fokus angezeigt.
4
Die zuletzt verwendete Gre und Position des Fensters wird wiederhergestellt.
Das momentan aktive Fenster bleibt aktiv.
6
Das Fenster wird als Symbol angezeigt. Das momentan aktive Fenster bleibt aktiv.
Tabelle 54: Die Mglichkeiten bei der Fensteranordnung von Programmen
Listing 94: Wie lange luft ein gestartetes Programm? (Forts.)
Sandini Bib
Access schlafen schicken 129
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
grund weiter und wird erst beendet, wenn der Prozess beendet ist. Nach Beendigung der
externen Anwendung schreiben Sie die Laufzeit des externen Programms in das Direktfens-
ter. Die Laufzeit ermitteln Sie, indem Sie wiederum die Funktion Now heranziehen und diese
Zeit mit der vorher gespeicherten Startzeit in der Variablen Beginn abgleichen.
79 Access schlafen schicken
Mchten Sie eine Anwendung ein wenig zum Schlafen schicken, dann knnen Sie die API-
Funktion aus Listing 95 einsetzen.
Die Zeitangabe ist in Millisekunden angegeben.
80 Verzeichnisse erstellen
Neben der Standard-VBA-Funktion MkDir, um einen neuen Ordner anzulegen, gibt es auch
hierfr eine eigene API-Funktion. ber API-Funktionen haben Sie ganz allgemein Zugriff
auf alle Ordner und Laufwerke Ihres Betriebssystems. So knnen Sie auch Verzeichnisse
erstellen und lschen. In Listing 96 wird nach einer Benutzereingabe das gewnschte Ver-
zeichnis erstellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlSleep
'=====================================================
Declare Sub Sleep Lib "[Link]" _
(ByVal SleepTime As Long)
Sub AccessZumSchlafenSchicken()
Sleep (10000)
MsgBox "Ruhepause beendet"
End Sub
Listing 95: API-Funktion zum Schlafenlegen einer Anwendung
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlCreateD
'=====================================================
Private Declare Function CreateDirectory Lib _
"kernel32" Alias "CreateDirectoryA" _
(ByVal lpPathName As String, _
lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Listing 96: Verzeichnis erstellen mit einer API-Funktion
Sandini Bib
130 Weitere Funktionen
Mit der API-Funktion CreateDirectory knnen Sie eigene Verzeichnisse auf Ihrer Festplatte
anlegen.
81 Verzeichnis lschen
Um ein Verzeichnis zu entfernen, knnen Sie die API-Funktion RemoveDirectory aus Listing
97 einsetzen.
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Sub VerzeichnisErstellen()
Dim Security As SECURITY_ATTRIBUTES
Dim l As Long
Dim strV As String
strV = InputBox("Geben Sie das Verzeichnis ein", _
"Verzeichnis erstellen", "c:\")
If strV = "" Then Exit Sub
l = CreateDirectory(strV, Security)
If l = 0 Then
MsgBox "Das Verzeichnis konnte nicht erstellt werden!", _
vbCritical + vbOKOnly
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlRemoveD
'=====================================================
Private Declare Function RemoveDirectory Lib _
"kernel32" Alias "RemoveDirectoryA" _
(ByVal lpPathName As String) As Long
Sub VerzeichnisLschen()
Dim lngV As Long
lngV = RemoveDirectory("C:\Test")
End Sub
Listing 97: Verzeichnis lschen mit einer API-Funktion
Listing 96: Verzeichnis erstellen mit einer API-Funktion (Forts.)
Sandini Bib
Verzeichnisbaum anzeigen und auswerten 131
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
82 Verzeichnisbaum anzeigen und auswerten
Im folgenden Beispiel aus Listing 3.98 wird Ihre Verzeichnisstruktur in einem Dialogfeld als
Verzeichnisbaum angezeigt und ausgewertet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetPath
'=====================================================
Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Declare Function SHGetPathFromIDList Lib "[Link]" _
Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal pszPath As _
String) As Long
Declare Function SHBrowseForFolder Lib "[Link]" _
Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long
Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal _
lpClassName As String, _
ByVal lpWindowName As String) As Long
Function VerzeichnisErmitteln(Msg) As String
Dim bInfo As BROWSEINFO
Dim path As String
Dim l As Long
[Link] = 0&
l = SHBrowseForFolder(bInfo)
path = Space$(512)
If SHGetPathFromIDList(ByVal l, ByVal path) Then
VerzeichnisErmitteln = Left(path, InStr(path, Chr$(0)) - 1)
Else
VerzeichnisErmitteln = ""
End If
End Function
Sub VerzeichnisBaum()
Listing 98: Verzeichnis auswhlen und abfragen
Sandini Bib
132 Weitere Funktionen
Bei der Anweisung [Link] = 0& kann man die Zahl jeweils erhhen, was folgende
Effekte hat.
1 --> Internet Explorer
2 --> Programme
3 --> Systemsteuerung
4 --> Drucker
5 --> Eigene Dateien
6 --> Favoriten
7 --> Autostart
8 --> Recent
9 --> SendTo
10--> Papierkorb
Dim sVerz As String
sVerz = VerzeichnisErmitteln(sVerz)
If sVerz = "" Then Exit Sub
MsgBox "Das ausgewhlte Verzeichnis lautet: " & sVerz
End Sub
Abbildung 51: Den Verzeichnisbaum anzeigen
Listing 98: Verzeichnis auswhlen und abfragen (Forts.)
Sandini Bib
Windows-Version ermitteln 133
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
83 Windows-Version ermitteln
Um die installierte Windows-Version zu ermitteln, knnen Sie mit der API-Funktion GetVer-
sionEx aus Listing 99 arbeiten.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetVersion
'=====================================================
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Sub WindowsVersion()
Dim osInfo As OSVERSIONINFO
Dim lRet As Long
[Link] = 148
[Link] = Space(128)
lRet = GetVersionEx(osInfo)
Select Case [Link]
Case VER_PLATFORM_WIN32s
[Link] "Win32s on Windows 3.1"
Case VER_PLATFORM_WIN32_WINDOWS
If [Link] = 0 Then
[Link] "Win32 mit Windows 95"
Else
[Link] "Win32 mit Windows 98"
End If
Case VER_PLATFORM_WIN32_NT
If [Link] = 5 And [Link] = 0 Then
[Link] "Win32 mit Windows 2000"
Else
Listing 99: Die installierte Windows-Version erkennen
Sandini Bib
134 Weitere Funktionen
Die neueren Windows-Versionen werden ber die dwplatformId mit dem Wert 2 interpre-
tiert. Darunter werten Sie die Argumente dwMinorVersion und dwMajorVersion aus, um das
Betriebssystem zu bestimmen.
84 Windows-Verzeichnis ermitteln
Da es mehrere Windows-Versionen gibt und diese sich namentlich auch unterscheiden kn-
nen, ist es wichtig zu wissen, wie der exakte Namen des Windows-Verzeichnisses lautet. Fr
diese Aufgabe knnen Sie folgende API-Funktion aus Listing 100 einsetzen.
If [Link] = 5 And [Link] >= 1 Then
[Link] "Win32 mit Windows XP"
Else
[Link] "Win32 mit Windows NT"
End If
End If
Case Else
[Link] "Betriebssystem unbekannt!"
End Select
[Link] "Version: " & [Link] & "." & [Link]
[Link] "Build: " & [Link]
[Link] "Info: " & [Link]
End Sub
Abbildung 52: Die Windows-Version ermitteln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetWinD
'=====================================================
Declare Function GetWindowsDirectory Lib _
Listing 100: Windows-Verzeichnis ermitteln
Listing 99: Die installierte Windows-Version erkennen (Forts.)
Sandini Bib
Windows-Systemverzeichnis ermitteln 135
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
85 Windows-Systemverzeichnis ermitteln
Soll das Windows-System-Verzeichnis ermittelt werden, dann setzen Sie die API-Funktion
GetSystemDirectory aus Listing 101 ein.
"kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
Function GetWinDir() As String
Dim lpBuffer As String * 255
Dim length As Long
length = _
GetWindowsDirectory(lpBuffer, Len(lpBuffer))
GetWinDir = Left(lpBuffer, length)
End Function
Sub WindowsVerzeichnis()
Dim t As String
t = GetWinDir
MsgBox "Ihr Windows-Verzeichnis heit: " & t
End Sub
Abbildung 53: Windows-Installationsverzeichnis auslesen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetSystemD
'=====================================================
Declare Function GetSystemDirectory Lib _
"kernel32" Alias "GetSystemDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
Function GetSystemDir() As String
Dim lpBuffer As String * 255
Dim length As Long
length = _
GetSystemDirectory(lpBuffer, Len(lpBuffer))
Listing 101: Windows-Systemverzeichnis ermitteln
Listing 100: Windows-Verzeichnis ermitteln (Forts.)
Sandini Bib
136 Weitere Funktionen
86 Das temporre Verzeichnis ermitteln
Windows bentigt ein Verzeichnis, in dem es temporre Dateien ablegt, die bei Bedarf gela-
den bzw. wieder geschlossen werden. Um dieses temporre Verzeichnis aufzuspren, setzen
Sie die API-Funktion GetTempPath aus Listing 102 ein.
GetSystemDir = Left(lpBuffer, length)
End Function
Sub WindowsSystemVerzeichnis()
Dim strV As String
strV = GetSystemDir
MsgBox "Ihr Windows-System-Verzeichnis heit: " & strV
End Sub
Abbildung 54: Das Windows-System-Verzeichnis ermitteln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetTempP
'=====================================================
Declare Function GetTempPath Lib _
"kernel32" Alias "GetTempPathA" _
(ByVal nSize As Long, ByVal lpBuffer As String) As Long
Function GetTempDir() As String
Dim lpBuffer As String * 255
Dim length As Long
length = _
GetTempPath(Len(lpBuffer), lpBuffer)
GetTempDir = Left(lpBuffer, length)
End Function
Sub TemporresVerzeichnis()
Dim strV As String
Listing 102: Das temporre Verzeichnis ermitteln
Listing 101: Windows-Systemverzeichnis ermitteln (Forts.)
Sandini Bib
Das aktuelle Verzeichnis ermitteln 137
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
87 Das aktuelle Verzeichnis ermitteln
Neben der API-Funktion GetWindowsDirekctory gibt es weitere API-Funktionen, um
bestimmte Verzeichnisse zu ermitteln. Mithilfe der Funktion GetCurrentDirectory aus Listing
103 knnen Sie ermitteln, welches Verzeichnis gerade aktiv ist.
strV = GetTempDir
MsgBox "Ihr temporres Verzeichnis heit: " & strV
End Sub
Abbildung 55: Das temporre Verzeichnis von Windows ermitteln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetCurrD
'=====================================================
Declare Function GetCurrentDirectory Lib _
"kernel32" Alias "GetCurrentDirectoryA" _
(ByVal nSize As Long, ByVal lpBuffer As String) As Long
Function GetAktDir() As String
Dim lpBuffer As String * 255
Dim length As Long
length = _
GetCurrentDirectory(Len(lpBuffer), lpBuffer)
GetAktDir = Left(lpBuffer, length)
End Function
Sub AktuellesVerzeichnis()
Dim t As String
t = GetAktDir
MsgBox "Ihr aktuelles Verzeichnis heit: " & t
End Sub
Listing 103: Das aktuelle Verzeichnis ermitteln
Listing 102: Das temporre Verzeichnis ermitteln (Forts.)
Sandini Bib
138 Weitere Funktionen
88 Windows-Infobildschirm anzeigen
Mchten Sie einen Info-Bildschirm in Excel anzeigen, dann knnen Sie dazu eine API-Funk-
tion aus Listing 104 einsetzen. Das spart Ihnen das Entwerfen und Programmieren eines
eigenen Formulars. Die API-Funktion fr diesen Zweck heit ShellAbout.
89 Access-Verzeichnis ermitteln
Sie knnen Access auch starten, indem Sie auf Ihrem Windows-Desktop die Schaltflche
START anklicken und dann den Befehl AUSFHREN whlen. Im Dialogfeld AUSFHREN klicken
Sie auf die Schaltflche DURCHSUCHEN, stellen Ihr Office-Verzeichnis ein und markieren die
Datei [Link].
Um genau diesen Pfad zur ermitteln, knnen Sie die API-Funktion aus Listing 105 verwen-
den.
Abbildung 56: Das aktuelle Verzeichnis ermitteln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlShellA
'=====================================================
Private Declare Function ShellAbout Lib "[Link]" _
Alias "ShellAboutA" (ByVal hwnd As Long, _
ByVal szApp As String, ByVal szOtherStuff As String, _
ByVal hIcon As Long) As Long
Sub BildschirmAnzeigen()
Dim hwnd As Long
Dim lngSymbol As Long
ShellAbout hwnd, "Held-Office", _
"Bernd Held, MVP fr Microsoft Excel" & vbCrLf & _
"[Link] lngSymbol
End Sub
Listing 104: API-Funktion zum Anzeigen eines Infoschirms
Sandini Bib
Standardverzeichnis festlegen 139
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die API-Funktion besteht lediglich aus einem Kommando, welches Sie durch ein Makro auf-
rufen und ber die Funktion MsgBox auf dem Bildschirm ausgeben.
90 Standardverzeichnis festlegen
Standardmig ist das Verzeichnis Eigene Dateien Ihr Standardverzeichnis in Access. Hier
werden Access-Datenbanken standardmig gespeichert bzw. beim Dialog FFNEN wird
immer dieses Verzeichnis eingestellt. Diese Einstellung knnen Sie ndern, indem Sie die
API-Funktion aus Listing 106 einsetzen.
Abbildung 57: Windows-Infoschirm manipulieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetCommandL
'=====================================================
Declare Function GetCommandLine Lib "Kernel32" _
Alias "GetCommandLineA" () As String
Sub VerzeichnisAccessAnsteuern()
MsgBox "Access befindet sich unter: " & GetCommandLine()
End Sub
Listing 105: Ermitteln des Access-Startverzeichnisses
Sandini Bib
140 Weitere Funktionen
91 Dateityp und Anwendung ermitteln
Im nchsten Beispiel soll ausgehend von einer bestimmten Datei die dazugehrige Anwen-
dung ermittelt werden. Den Code fr diese Aufgabe finden Sie in Listing 107.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlSetCurrentD
'=====================================================
Private Declare Function SetCurrentDirectoryA _
Lib "kernel32" (ByVal lpPathName As String) As Long
Sub VerzeichnisFestlegenberAPI()
SetCurrentDirectoryA ("c:\temp")
End Sub
Listing 106: Standardverzeichnis festlegen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlFindEx
'=====================================================
Private Declare Function FindExecutable Lib "[Link]" _
Alias "FindExecutableA" (ByVal lpFile As String, _
ByVal lpDirectory As String, _
ByVal lpResult As String) As Long
Public Function AppFile(Datei As String) As String
Dim strT As String
strT = Space(256)
FindExecutable Datei, vbNullString, strT
AppFile = Left$(strT, InStr(strT, vbNullChar) - 1)
End Function
Sub Datei()
Dim strT As String
strT = AppFile("c:\Eigene Dateien\[Link]")
If strT <> "" Then
MsgBox "Die dazugehrige Anwendung lautet: " & vbLf & strT
Else
MsgBox "Anwendung konnte nicht ermittelt werden!", vbCritical
End If
End Sub
Listing 107: Die zur Datei gehrende Anwendung ermitteln
Sandini Bib
Kurze Pfadnamen ermitteln 141
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Wenn Sie eine Datei mitsamt dem Pfad angeben, liefert FindExecutable den kompletten Pfad
zur verknpften Anwendung zurck, der in einem String ber den Parameter lpResult ber-
geben wird. Existiert die angegebene Datei nicht, so wird ein Leerstring zurckgegeben.
92 Kurze Pfadnamen ermitteln
Bei sehr ausgeprgten Verzeichnisstrukturen wird der Pfad in Windows oft umgebrochen.
Die API-Funktion, die dafr verantwortlich ist, heit GetShortPathName.
ber die Anweisung [Link] ermitteln Sie den Dateinamen inklusive des
Pfads der aktuell geffneten Datenbank. Die Variable KurzerName wird mit 250 Leerzeichen
zunchst initialisiert. Danach wird die API-Funktion GetShortPathName aufgerufen. Dieser
Funktion wird sowohl die Variable LangerName als auch die noch leere Variable KurzerName
Abbildung 58: Die dazugehrige Anwendung wurde aufgesprt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetShort
'=====================================================
Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" _
(ByVal lpszLongPath As String, ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long
Sub KurzerDateiname()
Dim strLangerName As String
Dim strKurzerName As String
Dim lngl As Long
strLangerName = [Link]
strKurzerName = Space$(250)
lngl = GetShortPathName(strLangerName, strKurzerName, Len(strKurzerName))
strKurzerName = Left$(strKurzerName, lngl)
MsgBox " Kurz: " & strKurzerName & vbLf & _
"Lang: " & [Link], vbInformation
End Sub
Listing 108: Die gekrzte Pfadangabe ausgeben
Sandini Bib
142 Weitere Funktionen
sowie deren Lnge bergeben. Die API-Funktion krzt den Pfadnamen, den Sie danach ber
die Funktion MsgBox auf dem Bildschirm ausgeben.
93 Texte mit API-Funktionen konvertieren
Es ist mglich, mithilfe von API-Funktionen auch Texte zu konvertieren. So konvertiert die
API-Funktion CharUpper einen Text in Groschreibweise und entspricht dabei der VBA-
Funktion UCase. Die API-Funktion CharLower konvertiert einen vorgegebenen Text in Klein-
schreibweise und findet ihre Entsprechung in der VBA-Funktion LCase. Sehen Sie sich dazu
die API-Funktion aus Listing 109 an.
Das Ergebnis der Konvertierungsfunktionen wird im Direktbereich ausgegeben.
Abbildung 59: Kurze und lange Dateinamen auslesen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlChartLower
'=====================================================
Private Declare Function CharLower Lib "user32" _
Alias "CharLowerA" (ByVal lpsz As String) As Long
Private Declare Function CharUpper Lib "user32" _
Alias "CharUpperA" (ByVal lpsz As String) As Long
Sub TexteUmsetzen()
Dim strText As String
strText = "API-Funktionen sind o.k.!"
[Link] "Originalzustand: " + strText
CharUpper strText
[Link] "GROSS: " + strText
CharLower strText
[Link] "klein: " + strText
End Sub
Listing 109: Texte konvertieren
Sandini Bib
Zwischenablage lschen 143
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
94 Zwischenablage lschen
Mchten Sie die Zwischenablage durch eine API-Funktion lschen, verwenden Sie die API-
Funktion aus Listing 110
Befindet sich etwas in der Zwischenablage, dann meldet die API-Funktion OpenClipboard
einen Wert <> 0. In diesem Fall rufen Sie die beiden API-Funktionen nacheinander auf.
Die OpenClipboard-Funktion wird dazu verwendet, die Zwischenlage zu ffnen, zu prfen
und zu verhindern, dass ihr Inhalt durch andere Anwendungen gendert wird. Mit der
GetClipboardData-Funktion werden die in der Zwischenablage gespeicherten Daten zurck-
gegeben, whrend die CloseClipboard-Funktion dazu dient, die Zwischenablage zu schlieen
und sie fr andere Anwendungen wieder verfgbar zu machen.
Abbildung 60: Texte konvertieren ber eine API-Funktion
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlOpenClip
'=====================================================
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Sub ZwischenablageLeeren()
If OpenClipboard(0&) <> 0 Then
Call EmptyClipboard
Call CloseClipboard
End If
End Sub
Listing 110: Zwischenablage lschen
Sandini Bib
144 Weitere Funktionen
95 Soundkarte checken
Bevor Sie Klangdateien auf Ihrem Computer abspielen knnen, fhren Sie zunchst einen
Test durch, ob berhaupt eine Soundkarte auf Ihrem System verfgbar ist. Fr diese Aufgabe
knnen Sie die API-Funktion WaveOutGetNumDevs aus Listing 111 einsetzen.
96 Sounds per API-Funktion ausgeben
Mithilfe von API-Funktionen knnen Sie auch Ihre Soundkarte ansprechen. Mit der API-
Funktion aus Listing 112 spielen Sie eine WAV-Datei ab.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWaveOut
'=====================================================
Private Declare Function waveOutGetNumDevs Lib _ "[Link]" () As Long
Function PrfenSound() As Boolean
PrfenSound = waveOutGetNumDevs()
End Function
Sub SoundMglich()
Dim b As Boolean
If PrfenSound = True Then
MsgBox "Soundkarte verfgbar!", vbInformation
Else
MsgBox "Soundkarte verfgbar!", vbInformation
End If
End Sub
Listing 111: berprfen, ob Soundkarte einsatzbereit ist
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlPlaySound
'=====================================================
Declare Function sndPlaySound32 Lib "[Link]" Alias _
"sndPlaySoundA" (ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long
Sub SoundAusgeben()
Call sndPlaySound32("c:\[Link]", 0)
End Sub
Listing 112: Sounddatei abspielen
Sandini Bib
PC piepsen lassen 145
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
97 PC piepsen lassen
Soll Ihr PC nur einen Piepston abgeben, dann setzen Sie die API-Funktion Beep aus Listing
113 ein.
Die API-Funktion bentigt zwei Parameter. Im ersten Argument legen Sie fest, mit wie viel Herz
der Piepston erzeugt werden soll. Mgliche noch hrbare Werte liegen im Bereich zwischen
37 und 5500. Im zweiten Argument legen Sie die Dauer des Piepstons in Millisekunden fest.
98 Tasten abfangen
Durch den Einsatz von API-Funktionen knnen Sie bestimmte Tasten abfangen. Im folgen-
den Beispiel aus Listing 114 wird die Taste (Esc) berwacht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlBeep
'=====================================================
Declare Function Beep Lib "[Link]" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Sub ComputerPiepst()
Dim L As Long
L = Beep(250, 1000)
If L = 0 Then
MsgBox "PC kann nicht piepsen!"
End If
End Sub
Listing 113: PC piepsen lassen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlKeyboard
'=====================================================
Type KeyboardBytes
kbb(0 To 255) As Byte
End Type
Declare Function GetKeyboardState Lib "[Link]" _
(kbArray As KeyboardBytes) As Long
Listing 114: API-Funktion zum Abfangen von Tastenklicks
Sandini Bib
146 Weitere Funktionen
Starten Sie das Makro TasteESCAbfangen. Dieses Programm luft im Hintergrund ab und gibt
jedes Mal eine Bildschirmmeldung aus, wenn Sie die Taste (Esc) drcken. Drcken Sie die
Taste (Strg), um dieses Makro wieder zu beenden und die berwachung der Taste (Esc)
abzuschlieen.
99 Dateien suchen
Mithilfe der API-Funktion SearchTreeForFile aus Listing 115 knnen Sie auch Dateien
suchen und deren Speicherpfad ermitteln.
Sub TasteESCabfangen()
Dim kbArray As KeyboardBytes
Do
DoEvents
GetKeyboardState kbArray
If [Link](27) And 128 Then
ESCgedrckt
End If
' Makro beenden mit STRG
Loop Until [Link](17) And 128
End Sub
Sub ESCgedrckt()
MsgBox "Sie haben die Taste ESC gedrckt"
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlSearch
'=====================================================
Private Declare Function SearchTreeForFile _
Lib "imagehlp" (ByVal RootPath As String, _
ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Const Verzeichnisse = 100
Sub DateiSuchen()
Dim strS As String
Dim lngL As Long
strS = String(Verzeichnisse, 0)
Listing 115: Datei suchen ber eine API-Funktion
Listing 114: API-Funktion zum Abfangen von Tastenklicks (Forts.)
Sandini Bib
Dateiinformationen auslesen 147
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
100 Dateiinformationen auslesen
Mithilfe von API-Funktionen lassen sich Datumsinformationen zu Dateien ermitteln. So
wird im folgenden Beispiel aus Listing 116 das Erstellungsdatum, das letzte Zugriffsdatum
sowie das letzte Speicherdatum einer Datenbank ermittelt.
lngL = SearchTreeForFile("C:\", "[Link]", strS)
If lngL <> 0 Then
MsgBox "Datei wurde gefunden: " & vbLf & strS, vbInformation
Else
MsgBox "Datei konnte nicht gefunden werden!", vbCritical
End If
End Sub
Abbildung 61: Dateien suchen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlFindFirst
'=====================================================
Public Declare Function FindFirstFile Lib _
"kernel32" Alias "FindFirstFileA" _
(ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FileTimeToSystemTime _
Lib "kernel32" (lpFileTime As FILETIME, _
lpSystemTime As SYSTEMTIME) As Long
Declare Function FileTimeToLocalFileTime _
Lib "kernel32" (lpFileTime As FILETIME, _
lpLocalFileTime As FILETIME) As Long
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type SYSTEMTIME
Listing 116: Dateiinformationen auslesen
Listing 115: Datei suchen ber eine API-Funktion (Forts.)
Sandini Bib
148 Weitere Funktionen
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
ftName As String * 150
End Type
Private Function DatPrf(FT As FILETIME) As String
Dim ST As SYSTEMTIME
Dim LT As FILETIME
Dim t As Long
Dim lDatum As Double
Dim lZeit As Double
t = FileTimeToLocalFileTime(FT, LT)
t = FileTimeToSystemTime(LT, ST)
If t Then
lDatum = DateSerial([Link], [Link], [Link])
lZeit = TimeSerial([Link], [Link], [Link])
lDatum = lDatum + lZeit
If lDatum > 0 Then
DatPrf = Format$(lDatum, "[Link] hh:mm:ss")
Else
DatPrf = "kein gltiges Datum"
End If
End If
End Function
Sub DateiInfoDialog()
Dim hFile As Long
Dim WFD As WIN32_FIND_DATA
Dim strDatei As String
Dim Erstellt As String
Dim Gespeichert As String
Dim Zugriff As String
strDatei = [Link]
hFile = FindFirstFile(strDatei, WFD)
If hFile > 0 Then
Listing 116: Dateiinformationen auslesen (Forts.)
Sandini Bib
Internetverbindung aktiv? 149
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Anweisung [Link] ermitteln Sie den Namen der aktuell
geffneten Datenbank. Diesen Namen bergeben Sie an die API-Funktion FindFirstFile.
Danach bergeben Sie die Dateiinformationen an die Funktion DatPrf. Dort werden die
gewnschten Informationen ermittelt und in das richtige Format gebracht und an das aufru-
fende Makro zurckgegeben. Dort werden alle Informationen zusammengefasst und in einer
Bildschirmmeldung ausgegeben.
101 Internetverbindung aktiv?
Wenn Sie mit einem VBA-Makro ins Internet gehen mchten, dann sollten Sie vorher pr-
fen, ob berhaupt eine Verbindung mit dem Internet besteht. Dazu setzen Sie die API-Funk-
tion InternetGetConnectedState aus Listing 117 ein.
Erstellt = DatPrf([Link])
Gespeichert = DatPrf([Link])
Zugriff = DatPrf([Link])
MsgBox "Datei angelegt: " & Erstellt & vbLf _
& "Letzte nderung: " & Gespeichert & vbLf _
& "Letzter Zugriff: " & Zugriff, vbInformation, sDatei
Else
MsgBox "Datei wurde nicht gefunden!", vbCritical, sDatei
End If
End Sub
Abbildung 62: Auf Dateieigenschaften zugreifen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlInternet
'=====================================================
Public Declare Function InternetGetConnectedState Lib "[Link]" _
(ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long
Sub InternetAktiv()
Dim b As Boolean
b = InternetGetConnectedState(0&, 0&)
Listing 117: Internetverbindung berprfen
Listing 116: Dateiinformationen auslesen (Forts.)
Sandini Bib
150 Weitere Funktionen
ber die API-Funktion InternetGetConnectedState lsst sich ermitteln, ob eine Verbindung
mit dem Internet besteht. Wenn ja, dann meldet diese Funktion den Wert True zurck, den
Sie auswerten knnen.
102 Cursorposition in Pixel angeben
In Excel oder Access haben Sie in einer Tabelle ber die Koordinaten der Zeilen und Spalten
einen relativ schnellen berblick, wo genau der Mauszeiger steht. Diese Angabe in der A1-
Schreibweise sagt aber nicht aus, wo der Mauszeiger genau steht. Die genaue Position des
Mauszeigers knnen Sie nur ber die API-Funktion GetCursorPos aus Listing 118 bestimmen.
Je nach Breite der Spalten bzw. Hhe der Zeilen ndern sich dann die Koordinaten.
If b = True Then
MsgBox "Internetverbindung steht!"
Else
MsgBox "Internetverbindung fehlt!!"
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlGetCursor
'=====================================================
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
y As Long
End Type
Sub KoordinatenErmitteln()
Dim Point As POINTAPI
Dim i As Integer
i = GetCursorPos(Point)
If i <> 0 Then
MsgBox "X-Position: " & Point.x & vbLf & _
"Y-Position: " & Point.y, vbInformation
Else
MsgBox "Es konnte keine Position ermittelt werden"
End If
End Sub
Listing 118: Punktgenaue Koordinaten ermitteln
Listing 117: Internetverbindung berprfen (Forts.)
Sandini Bib
Stckzahl pro Stunde errechnen 151
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Definieren Sie zuerst die Struktur POINTAPI, in der Sie die Position des Mauszeigers in Form der
Pixelkoordinaten speichern. Wenden Sie im Anschluss daran die API-Funktion GetCursorPos
an, die Ihnen die aktuelle Position des Mauszeigers wiedergibt. Geben Sie die Koordinaten
danach in einer Meldung auf dem Bildschirm aus.
103 Stckzahl pro Stunde errechnen
Stellen Sie sich vor, Sie haben eine Gesamtzeit fr die Produktion sowie eine in dieser Zeit
erstellte Stckzahl von Produkten. Die Aufgabe besteht nun darin, die Stundenleistung zu
errechnen. Um diese Aufgabe zu lsen, schreiben Sie eine Funktion, der Sie als Argumente
die Gesamtzeit sowie die Stckzahl bergeben. Als Ergebnis liefert die Funktion aus Listing
119 die Anzahl in Stck/Stunde.
Abbildung 63: Die genaue Cursorposition ermitteln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function StckPerStd(Zeit As Date, Stck) As Integer
StckPerStd = Stck / (Zeit * 24)
End Function
Sub LeistungErrechnen()
[Link] StckPerStd("4:35", 500)
[Link] StckPerStd("3:25", 450)
[Link] StckPerStd("5:45", 650)
[Link] StckPerStd("7:25", 750)
End Sub
Listing 119: Stckzahl pro Stunde errechnen
Sandini Bib
152 Weitere Funktionen
104 Stunden in Minuten umrechnen
Bei der folgenden Aufgabe aus Listing 120 soll eine Zeitangabe, die in Stunden und Minuten
vorliegt, in Minuten umgerechnet werden.
Um eine Zeitangabe in Minuten umzurechnen, multiplizieren Sie die Zeitangabe zuerst mit
24 (24 Stunden am Tag) und anschlieend mit 60 (60 Minuten pro Stunde). Selbstverstnd-
lich knnten Sie auch sofort mit dem Wert 1440 multiplizieren.
105 Minuten in Stunden umrechnen
Auch der umgekehrte Weg ist mglich. Es liegt eine Zeitangabe in Minuten vor, die in Stun-
den umgewandelt werden soll. Die Lsung dieser Aufgabe knnen Sie in Listing 121 sehen.
Abbildung 64: Die einzelnen Stundenleistungen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function ZeitInMinuten(Zeit As Date) As Integer
ZeitInMinuten = Zeit * 24 * 60
End Function
Sub Bearbeitungszeit()
MsgBox ZeitInMinuten("1:25")
End Sub
Listing 120: Stunden in Minuten umrechnen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Listing 121: Minuten in Stunden umrechnen
Sandini Bib
Normalzeit in Industriezeit umrechnen 153
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Analog zur letzten Aufgabe aus Listing 120 dividieren Sie bei der Umrechnung von Minuten
in Stunden mit den Werten 24 und 60 bzw. gleich mit 1440.
106 Normalzeit in Industriezeit umrechnen
Bei einer Industrieminute wird beispielsweise die Uhrzeit 3:30 als 3,5 dargestellt, also auf
100-er Basis umgerechnet. Dazu kann eine Funktion erstellt werden, die Sie in Listing 122
sehen knnen.
107 Industriezeit in Normalzeit umwandeln
Der umgekehrte Vorgang ist ebenso von Interesse und wird ber die Funktion aus Listing
123 realisiert.
Function MinutenInStd(intMin As Integer) As Date
MinutenInStd = intMin / 24 / 60
End Function
Sub Bearbeitungszeit2()
MsgBox MinutenInStd(85)
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function IndZeit(Zeit As Date) As Single
IndZeit = Zeit * 24
End Function
Sub NormalZeitInInustriezeitWandeln()
MsgBox IndZeit("3:30")
End Sub
Listing 122: Normalzeit in Industriezeit umrechnen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Listing 123: Industriezeit in Normalzeit umrechnen
Listing 121: Minuten in Stunden umrechnen (Forts.)
Sandini Bib
154 Weitere Funktionen
108 Schaltjahr oder nicht?
Im folgenden Beispiel aus Listing 124 wird ber eine Funktion geprft, ob es sich bei einem
bestimmten Jahr um ein Schaltjahr handelt oder nicht.
Die Funktion Schaltjahr erwartet eine Jahresangabe. Die Funktion extrahiert daraus mithilfe
der Funktion Month den Monat Februar und prft, ob dieser Monat 29 Tage hat. Wenn ja,
dann handelt es sich um ein Schaltjahr.
109 Stundengeschwindigkeit errechnen
Im folgenden Beispiel wird ein Marathon von einem Lufer in 2 Stunden und 13 Minuten
zurckgelegt. Um jetzt eine Geschwindigkeitsangabe in km/h zu errechnen, setzen Sie die
Funktion aus Listing 125 ein.
Function NormZeit(intZeit As Single) As Date
NormZeit = intZeit / 24
End Function
Sub InustriezeiInNormalzeitWandeln()
MsgBox NormZeit(3.5)
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function Schaltjahr(lngJahr As Long) As Boolean
Schaltjahr = Month(DateSerial(lngJahr, 2, 29)) = 2
End Function
Sub JahrTesten()
If Schaltjahr(2004) Then
MsgBox "Es handelt sich um ein Schaltjahr!"
Else
MsgBox "Normales Jahr"
End If
End Sub
Listing 124: Der Schaltjahrtest ber eine Funktion
Listing 123: Industriezeit in Normalzeit umrechnen (Forts.)
Sandini Bib
Durchschnittlichen Benzinverbrauch ermitteln 155
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
110 Durchschnittlichen Benzinverbrauch ermitteln
Um den durchschnittlichen Benzinverbrauch auf 100 km zu ermitteln, bentigen Sie die
Menge des getankten Benzins sowie die damit gefahrenen Kilometer. Daraus lsst sich dann
die Funktion aus Listing 126 schreiben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function StdKm(sngkm As Single, Zeit As Date) As Single
StdKm = sngkm / (Zeit * 24)
End Function
Sub Auswertung()
Dim sngGesamtKm As Single
Dim ZeitGesamt As Date
sngGesamtKm = 42
ZeitGesamt = "2:13"
MsgBox "Die Geschwindigkeitsangabe km/h betrgt: " & _
Round(StdKm(sngGesamtKm, ZeitGesamt),2)
End Sub
Listing 125: Durchschnittsgeschwindigkeit km/h errechnen
Abbildung 65: Eine relativ flotte Geschwindigkeit fr einen Marathon
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function Benzin(ltr As Single, km As Single) As Single
Benzin = Round((ltr / km) * 100, 2)
End Function
Listing 126: Den Benzinverbrauch errechnen
Sandini Bib
156 Weitere Funktionen
111 Das Idealgewicht bestimmen
Wenn Sie wissen mchten, welches Ihr Ideal- bzw. Normalgewicht ist, dann knnen Sie beide
Informationen in einer Funktion errechnen.
Das Normalgewicht errechnet sich, indem Sie von Ihrer Krpergre in cm den Wert 100
subtrahieren und das Ergebnis daraus mit dem Multiplikator 0,9 multiplizieren. Das Ideal-
gewicht entspricht der Krpergre in cm, von der 100 Zentimeter subtrahiert werden.
Sub Benzinverbrauch()
MsgBox "Der durchschnittliche Verbrauch liegt bei " & _
Benzin(35, 488) & " Liter/Km", vbInformation
End Sub
Abbildung 66: Benzinverbrauch auf 100 km ausrechnen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function Gewicht(intG As Integer, intZ As Integer) As Single
Select Case intZ
Case 1
' Normalgewicht
Gewicht = Round((intG - 100) * 0.9, 2)
Case 2
' Idealgewicht
Gewicht = Round(intG - 100, 2)
Case Else
'Weitere Berechnungen
End Select
End Function
Sub VorgabeGewichtErrechnen()
[Link] "Normalgewicht: " & Gewicht(183, 1)
[Link] "Idealgewicht: " & Gewicht(183, 2)
End Sub
Listing 127: Normal- und Idealgewicht errechnen
Listing 126: Den Benzinverbrauch errechnen (Forts.)
Sandini Bib
Fahrleistung pro Tag errechnen 157
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
112 Fahrleistung pro Tag errechnen
Mchten Sie Ihre durchschnittlich gefahrenen Kilometer pro Tag ermitteln, dann bentigen
Sie folgende Informationen:
Datum des Autokaufs
Aktuelles Datum
Bisher gefahrene Gesamtkilometer
Aus diesen Informationen schreiben Sie die Funktion aus Listing 128.
Abbildung 67: Normal- und Idealgewicht bei einer Gre von 1.83
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function KmProTag(sngKMGesamt As Single, _
DateAkt As Date, DateKauf As Date) As Single
KmProTag = Round(sngKMGesamt / (DateAkt - DateKauf), 2)
End Function
Sub FahrleistungProTag()
MsgBox "Durchschnittlich wurden " & _
KmProTag(34567, "20.07.2004", "25.10.2001") & " Km pro Tag gefahren!"
End Sub
Listing 128: Die durchschnittliche Kilometerleistung pro Tag
Abbildung 68: Durchschnittsleistung pro Tag
Sandini Bib
158 Weitere Funktionen
113 Berechnung des Bremswegs
Die Berechnung des Bremswegs bei einem Auto erfolgt mittels drei Einzelformeln:
Reaktionsweg = Geschwindigkeit (in km/h) / 10)*3
Bremsweg = Geschwindigkeit (in km/h) / 10) ^2
Anhalteweg = Reaktionsweg + Bremsweg
Fr den Reaktionsweg wird eine Reaktionsdauer von 1 Sekunde unterstellt. Diese Prmisse
gilt aber nur fr Autofahrer in guter krperlicher Verfassung. Mdigkeit, Alkohol, Ablen-
kung etwa durch laute Musik verlngern die Reaktionszeit.
Beim Bremsweg ist die Strecke zwischen dem Ansprechen der Bremsen bis zum absoluten
Stillstand des Autos gemeint. Ganz grob kann man sagen, dass sich bei einer Verdopplung
der Geschwindigkeit der Bremsweg vervierfacht.
Der Anhalteweg ergibt sich aus der Addition von Reaktionsweg und Bremsweg.
Diese Informationen packen Sie in die Funktion aus Listing 129.
114 Verzeichnis berprfen
Viele Fehler in der Programmierung knnen abgefangen werden, wenn Sie vor dem Zugriff
auf ein Objekt sicherheitshalber dessen Existenz berprfen. Dabei knnen Sie Prffunktio-
nen verwenden, die aus Makros aufgerufen werden und als Rckgabewert den Wert True lie-
fern, sofern ein Objekt verfgbar ist, bzw. den Wert False, wenn ein Objekt nicht zur
Verfgung steht. Im zweiten Fall knnen Sie dann entscheiden, wie Sie im Einzelnen weiter
vorgehen mchten.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function AnhaltWeg(intGeschw As Integer) As Single
AnhaltWeg = (intGeschw / 10) * 3 + (intGeschw / 10) ^ 2
End Function
Sub WannStehtAuto()
Dim intkm As Integer
For intkm = 100 To 250 Step 10
[Link] "Geschwindigkeit: " & intkm & vbTab & _
"steht nach " & AnhaltWeg(intkm) & " Metern"
Next intkm
End Sub
Listing 129: Anhalteweg errechnen
Sandini Bib
Verzeichnis berprfen 159
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Beispiel aus Listing 130 mchten Sie in ein bestimmten Verzeichnis wechseln. Zu diesem
Zweck mssen Sie sicherstellen, dass das Zielverzeichnis auch existiert. Wenn nicht, dann soll
das Makro das nicht vorhandene Verzeichnis selbststndig anlegen. Danach soll der Ver-
zeichniswechsel wie gewohnt stattfinden.
Abbildung 69: Die Dokumentation des Anhaltewegs
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function VerzDa(strName As String) As Boolean
On Error GoTo fehler
ChDir (strName)
VerzDa = True
Exit Function
fehler:
VerzDa = False
End Function
Sub PfadEinstellen()
Dim b As Boolean
Const Ordner = "C:\Eigene Dateien\"
b = VerzDa(Ordner)
If b = False Then
' Neuanlage des Verzeichnisses
MkDir Ordner
Listing 130: Prfung, ob ein Verzeichnis existiert
Sandini Bib
160 Weitere Funktionen
Die Funktion VerzDa erwartet als Empfangsargument einen String. In diesem String StrName
bergeben Sie das Verzeichnis, dessen Existenz Sie berprfen mchten. ber die Anweisung
ChDir versuchen Sie, innerhalb der Funktion einfach mal dieses Verzeichnis einzustellen.
Schlgt dieser Vorgang fehl, dann wird ein Fehler erzeugt, den Sie ber die On Error-Klausel
abfangen knnen. In diesem Fall verzweigen Sie ans Ende der Funktion und geben als Rck-
gabeargument den Wert False zurck. Ergab die Prfung des Verzeichnisses ein positives
Ergebnis geben Sie als Rckgabeargument den Wert True zurck und springen danach ber
die Anweisung Exit Function direkt aus der Funktion.
Deklarieren Sie beim aufrufenden Makro im ersten Schritt eine Variable vom Typ Boolean.
Diese Variable meldet Ihnen das Ergebnis der Funktion VerzDa in Form eines Wahrheitswerts
mit True (Verzeichnis existiert) bzw. False (Verzeichnis existiert nicht). Den Ordner, dessen
Existenz Sie berprfen mchten, knnen Sie entweder direkt beim Funktionsaufruf ange-
ben oder in einer Konstanten, gleich zu Beginn des Makros. Rufen Sie die Funktion VerzDa
nun auf und warten Sie auf den Rckgabewert der Funktion, welchen Sie ber eine If-
Abfrage auswerten. Fr den Fall, dass das Verzeichnis noch nicht verfgbar ist, legen Sie das
gewnschte Verzeichnis ber die Anweisung MkDir an. Wechseln Sie danach ber die Anwei-
sung ChDir in das Zielverzeichnis.
115 Datenbank berprfen
Die Existenz einer Datenbank sollte auf jeden Fall gewhrleistet sein, wenn Sie versuchen,
eine Datenbank zu ffnen bzw. eine Datenbank zu lschen. Beim Versuch, eine Datenbank
zu ffnen, die nicht vorhanden ist, wird der Laufzeitfehler 1004 ausgelst. Beim Versuch,
eine nicht existente Datenbank von der Festplatte zu entfernen, wird der Laufzeitfehler 53
(Datei nicht gefunden) angezeigt. Beide Fehlermeldungen knnen Sie unterdrcken, indem
Sie die folgende Lsung aus Listing 131 anwenden:
Else
ChDir Ordner$
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function DBDa(strName As String) As Boolean
DBDa = False
If Len(strName) > 0 Then DBDa = (Dir(strName) <> "")
End Function
Listing 131: Prfung vor der Lschung einer Datenbank
Listing 130: Prfung, ob ein Verzeichnis existiert (Forts.)
Sandini Bib
Datenbankstatus berprfen 161
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Funktion DBDa erwartet einen String, in dem Sie den Namen sowie den kompletten Pfad
der Datei bergeben, die Sie ffnen bzw. lschen mchten. ber die Funktion Len knnen Sie
berprfen, ob berhaupt ein gltiger Dateiname an die Funktion bergeben wurde. Wenn
ja, dann liefert diese Funktion einen Wert grer Null. In diesem Fall wenden Sie die Funk-
tion Dir an, um zu testen, ob die gewnschte Datei berhaupt vorhanden ist. Wird die so
angesteuerte Datei gefunden, dann meldet die Funktion Dir einen Wert ungleich leer zurck.
In diesem Fall gibt die Funktion DBDa als Rckgabeargument den Wert True zurck. Im ande-
ren Fall wird als Rckgabeargument der Wert False bergeben, den Sie ja standardmig zu
Beginn der Funktion gesetzt haben.
116 Datenbankstatus berprfen
Wenn Sie in einem Netzwerk arbeiten und versuchen, eine Datenbank zu ffnen, die ein Kol-
lege bereits geffnet hat, dann sollten Sie vor dem ffnen der Datenbank prfen, ob Sie diese
im Exklusivzugriff haben. Die Funktion fr diesen Zweck lautet:
Sub DBLschen()
Dim b As Boolean
Const Datei = "c:\Eigene Dateien\[Link]"
b = DBDa(Datei)
If b = True Then
Kill Datei
Else
MsgBox "Die angegebene Datei konnte nicht gefunden werden!", vbCritical
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function DBInBearbeitung(strDatei As String) As Boolean
On Error Resume Next
Open strDatei For Binary Access Read Lock Read As #1
Close #1
If [Link] <> 0 Then
DBInBearbeitung = True
[Link]
End If
End Function
Listing 132: Datenbankstatus prfen
Listing 131: Prfung vor der Lschung einer Datenbank (Forts.)
Sandini Bib
162 Weitere Funktionen
Mit der Methode Open ffnen Sie die Datenbank mit Lesezugriffsrechten. Ist diese Datenbank
bereits geffnet, liefert Ihnen die Eigenschaft Number des Err-Objekts einen Laufzeitfehler > 0.
In diesem Fall wird die Datenbank momentan von einem anderen Anwender bearbeitet.
117 Objektstatus erkennen
Sehr ntzlich ist auch die Funktion aus Listing 133. Diese Funktion prft den Status eines
Objekts. Dabei knnen Sie bei dieser Lsung erkennen, ob eine Tabelle, eine Abfrage, ein
Formular, ein Bericht, ein Makro oder ein Modul geffnet ist oder nicht.
bergeben Sie der Methode ber einen numerischen Wert, die den Objekttyp darstellt, das
zu prfende Objekt. Dabei gelten folgende Zuordnungen:
Sub DateiFrei()
Const DB = "[Link]"
If DBInBearbeitung("C:\Eigene Dateien\" & DB) = False Then
MsgBox "Die Datenbank " & DB & " ist fr Bearbeitung frei!"
Else
MsgBox "Die Datenbank " & DB & " ist in Bearbeitung!"
End if
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function ObjektStatus(ObjTyp As Integer, StrName As String) As Boolean
ObjektStatus = SysCmd(acSysCmdGetObjectState, ObjTyp, StrName)
End Function
Sub ObjektPrfen()
Dim b As Boolean
b = ObjektStatus(0, "Kategorien")
If b = True Then
MsgBox "Objekt geffnet!"
Else
MsgBox "Objekt geschlossen!"
End If
End Sub
Listing 133: Prfung, ob ein Objekt geffnet ist
Listing 132: Datenbankstatus prfen (Forts.)
Sandini Bib
Dateien zhlen 163
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Tabelle: 0
Abfrage:1
Formular:2
Bericht:3
Makro:4
Modul:5
Im zweiten Argument bergeben Sie den Namen des Objekts. In Abhngigkeit vom Status
wird dementsprechend eine Meldung am Bildschirm angezeigt.
118 Dateien zhlen
Stellen Sie sich vor, Sie mssten in einem Makro feststellen, wie viele Dateien sich in einem
Verzeichnis befinden. Dazu erfassen Sie zunchst folgende Funktion aus Listing 134:
Die Funktion DZ erwartet als Eingabe den Namen des Verzeichnisses, auf das Sie zugreifen
mchten. Als Ergebnis liefert die Funktion Ihnen im Datentyp Long die Anzahl der ermittel-
ten Dateien. Wenn Sie nur bestimmte Dateien gezhlt haben mchten, knnen Sie die obige
Funktion abndern, indem Sie die Zeichenfolge StrDatei = Dir$(strText & "\*.*") bei-
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function DZ(strText As String) As Integer
Dim strDatei As String
Dim intz As Integer
strDatei = Dir$(strText & "\*.*")
Do While Len(strDatei) > 0
intz = intz + 1
strDatei = Dir$()
Loop
DZ = intz
End Function
Sub ZhlenDateien()
Const Verz = "C:\Eigene Dateien\"
Dim intz As Integer
intz = DZ(Verz)
MsgBox "Das Verzeichnis " & Verz & " enthlt " & intz & " Dateien!"
End Sub
Listing 134: Dateien aus einem Verzeichnis zhlen
Sandini Bib
164 Weitere Funktionen
spielsweise in StrDatei = Dir$(strText & "\*.mdb") ndern. Diese kleine nderung bewirkt,
dass nur Access-Datenbanken gezhlt werden.
Im aufrufenden Makro legen Sie gleich zu Beginn fest, welches Verzeichnis Sie durchsuchen
mchten. bergeben Sie anschlieend der Funktion DZ genau dieses Verzeichnis.
119 Initialen erstellen
Sollen aus einem Vor-, Zu- und Nachnamen Initialen gebildet werden, so dass aus dem
Namen Bernd Michael Held die Initiale BMH wird, dann knnen Sie die Funktion aus
Listing 135 einsetzen.
Entfernen Sie im ersten Schritt mithilfe der Funktion RTrim nachgestellte, eventuell vorkom-
mende Leerzeichen. Danach beginnen Sie die Verarbeitung beim zweiten Zeichen des ersten
Namens. Dabei setzen Sie eine Schleife auf, die Buchstaben fr Buchstaben abarbeitet. Inner-
halb der Schleife prfen Sie, wann der jeweilige Namen zu Ende geht, da Sie von jedem Ein-
Abbildung 70: Dateien zhlen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function Initit(strName As String) As String
Dim intZ As Integer
strName = " " & RTrim(strName)
For intZ = 2 To Len(strName)
If Mid(strName, intZ - 1, 1) = " " Then
Initit = Initit & Mid(strName, intZ, 1)
End if
Next intZ
End Function
Sub InitialenErstellen()
[Link] "Bernd Michael Held --> " & Initit("Bernd Michael Held")
[Link] "Anna Maria Schmitt --> " & Initit("Anna Maria Schmitt ")
[Link] "Jrgen Br --> " & Initit("Jrgen Br")
End Sub
Listing 135: Initialen erstellen
Sandini Bib
Position der ersten Zahl erkennen 165
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
zelnamen nur das erste Zeichen bertragen mssen. Diese jeweils ersten Zeichen geben Sie
am Ende der Funktion an das aufrufende Makro zurck.
120 Position der ersten Zahl erkennen
Haben Sie einen Text vorliegen, der sowohl numerische als auch alphanumerische Werte ent-
hlt, dann knnte Sie die folgende Funktion interessieren. Sie meldet Ihnen die Position des
ersten numerischen Zeichens im Text. Diese Funktion knnen Sie in Listing 136 sehen.
Abbildung 71: Auf schnelle Art und Weise Initialen bilden
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function PosErsteZahl(strText As String) As Integer
Dim intZ As Integer
For intZ = 1 To Len(strText)
Select Case Asc(Mid(strText, intZ, 1))
Case 48 To 57
PosErsteZahl = intZ
Exit Function
End Select
Next intZ
PosErsteZahl = 0
End Function
Sub ZahlUndText()
[Link] "Jahr2004 --> " & PosErsteZahl("Jahr2004") & ". Stelle"
[Link] "0815 --> " & PosErsteZahl("0815") & ". Stelle"
[Link] "Test --> " & PosErsteZahl("Test") & ". Stelle"
[Link] "H2O --> " & PosErsteZahl("H2O") & ". Stelle"
End Sub
Listing 136: Position der ersten Ziffer melden
Sandini Bib
166 Weitere Funktionen
Ermitteln Sie im ersten Schritt die Lnge des Textes, setzen Sie dafr die Funktion Len ein.
Danach prfen Sie mithilfe der Funktion Asc das jeweils aktuelle Zeichen des Textes, indem
Sie dieses in einen Integer-Wert umwandeln. Mit der Funktion Mid extrahieren Sie jeweils das
nchste Zeichen aus dem Text. Dabei entsprechen die Werte 48 bis 57 den Zahlen 0 bis 9.
Diese Wertebereiche grenzen Sie innerhalb der Select Case-Anweisung aus. Wird das erste
numerische Zeichen im Text gefunden, springen Sie mit der Anweisung Exit Function aus
der Funktion. In der Variablen steht dann automatisch die richtige Position des Zeichens.
Wurde kein numerisches Zeichen gefunden, dann meldet die Funktion den Wert 0 zurck.
121 Position des ersten Buchstabens erkennen
Analog dazu knnen Sie die Position des ersten Buchstabens, im Bereich AZ und az,
ermitteln, indem Sie die Funktion aus Listing 137 einsetzen.
Abbildung 72: Das jeweils erste numerische Zeichen wird gemeldet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function PosErsterBuch(strText As String) As Integer
Dim intZ As Integer
For intZ = 1 To Len(strText)
Select Case Asc(Mid(strText, intZ, 1))
Case 0 To 64, 123 To 197
'keine Aktion
Case Else
PosErsterBuch = intZ
Exit Function
End Select
Next intZ
PosErsterBuch = 0
End Function
Listing 137: Position des ersten Buchstabens ermitteln
Sandini Bib
Sonderzeichen entfernen 167
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Ermitteln Sie im ersten Schritt die Lnge des Textes und setzen Sie dafr die Funktion Len
ein. Danach prfen Sie mithilfe der Funktion Asc das jeweils aktuelle Zeichen des Textes,
indem Sie dieses in einen Integer-Wert umwandeln. Mit der Funktion Mid extrahieren Sie
jeweils das nchste Zeichen aus dem Text. Dabei entsprechen die Werte 65 bis 90 Kleinbuch-
staben und die Werte 97 bis 122 den Grobuchstaben. Diese Wertebereiche grenzen Sie
innerhalb der Select Case-Anweisung aus. Sobald das erste Zeichen in der Zelle gefunden
wird, welches numerisch ist, springen Sie mit der Anweisung Exit Function aus der Funk-
tion. In der Variablen steht dann automatisch die richtige Position des Zeichens. Wurde kein
numerisches Zeichen gefunden, dann meldet die Funktion den Wert 0 zurck.
122 Sonderzeichen entfernen
Mssen Sie Daten weiterverarbeiten, in denen Sonderzeichen wie Punkte und Kommas vor-
kommen, die Sie nicht weiterverarbeiten mchten, dann schreiben Sie eine Funktion, die
diese Zeichen aus einem String entfernt.
Sehen Sie sich dazu die folgende Funktion aus Listing 138 an.
Sub WoStecktDerBuchstabe()
MsgBox "Der erste Buchstabe im Text 00O45T steckt an Position " & _
PosErsterBuch("00O45T")
End Sub
Abbildung 73: Das groe O sieht der 0 ziemlich hnlich.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function SonderzRaus(strText As String) As Double
Dim strPuffer As String
Dim intz As Integer
strPuffer = ""
intz = 1
Listing 138: Punkte und Kommas aus Zeichenfolge entfernen
Listing 137: Position des ersten Buchstabens ermitteln (Forts.)
Sandini Bib
168 Weitere Funktionen
In der Funktion durchlaufen Sie eine Schleife, in der die Zeichen jeweils bis zum nchsten
Komma in den String strPuffer bertragen werden. Dabei wird das Komma aber nicht ber-
tragen, da Sie es jeweils wieder ber die Variable intz subtrahieren. Ermitteln Sie danach die
Position des nchsten Kommas ber die Funktion Instr.
123 Numerische Ziffern in Zeichenfolge zhlen
Im nchsten Beispiel aus Listing 139 wird die Anzahl der Zahlen, die in einem Text enthalten
sind, ermittelt.
While InStr(intz, strText, ",") > 0
strPuffer = strPuffer & _
Mid(strText, intz, InStr(intz, strText, ",") - intz)
intz = InStr(intz, strText, ",") + 1
Wend
strPuffer = strPuffer & Mid(strText, intz)
SonderzRaus = CDbl(strPuffer)
End Function
Sub PunkteUndKommasRaus()
Dim strTextVorher As String
Dim strTextNachher As String
strTextVorher = "169.123.278,45"
[Link] "Zeichenkette vorher: " & strTextVorher>
strTextNachher = SonderzRaus(strTextVorher)
[Link] "Zeichenkette nachher: " & strTextNachher
End Sub
Abbildung 74: Bereinigung von Zeichenketten
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Listing 139: Die Anzahl der Zahlen zhlen
Listing 138: Punkte und Kommas aus Zeichenfolge entfernen (Forts.)
Sandini Bib
Buchstaben in Zeichenfolge zhlen 169
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Ermitteln Sie zuerst einmal die Gesamtlnge des Textes ber die Funktion Len. Danach
durchlaufen Sie eine Schleife und arbeiten mithilfe der Funktion Mid ein Zeichen nach dem
anderen ab. Setzen Sie den Operator Like ein, um zu ermitteln, ob es sich bei dem Zeichen
um einen Zahlenwert handelt. In diesem Fall meldet Ihnen dieser Operator einen Wert zwi-
schen 0 und 9 zurck. Addieren Sie dann den Wert 1 in Ihrer Funktion.
124 Buchstaben in Zeichenfolge zhlen
Analog zur vorherigen Aufgabe zhlt die Funktion aus Listing 140 alle Buchstaben, die in
einem Text auftreten.
Function AnzahlZahlen(strText As String) As Integer
Dim intZ As Integer
For intZ = 1 To Len(strText)
If Mid(strText, intZ, 1) Like "#" Then
AnzahlZahlen = AnzahlZahlen + 1
End If
Next intZ
End Function
Sub ZahlenZhlen()
[Link] "WG0897 --> " & AnzahlZahlen("WG0897")
[Link] "XY O90 --> " & AnzahlZahlen("XY O90")
[Link] "101010TZ --> " & AnzahlZahlen("101010TZ")
End Sub
Abbildung 75: Auch hier ist wieder auf den Unterschied zwischen 0 und O zu achten!
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Listing 140: Alle Buchstaben in einem Text zhlen
Listing 139: Die Anzahl der Zahlen zhlen (Forts.)
Sandini Bib
170 Weitere Funktionen
125 Rmische Zahlen umwandeln
Liegen rmische Ziffern vor, die in Zahlen umgewandelt werden sollen, dann knnen Sie die
folgende Funktion aus Listing 141 verwenden.
Das rmische Zahlensystem verwendete Buchstaben als Zahlen. So war der Buchstabe M
gleichbedeutend mit dem Wert 1000. Von daher mssen Sie Zeichen fr Zeichen im Text
abarbeiten und die entsprechenden Werte sammeln, um sie am Ende als Rckgabewert aus-
zugeben.
Function AnzahlBuch(strText As String) As Integer
Dim intZ As Integer
For intZ = 1 To Len(strText)
Select Case Asc(Mid(strText, intZ, 1))
Case 0 To 64, 123 To 197
'keine Aktion
Case Else
AnzahlBuch = AnzahlBuch + 1
End Select
Next intZ
End Function
Sub BuchstabenZhlen()
[Link] "WG0897 --> " & AnzahlBuch("WG0897")
[Link] "XY O90 --> " & AnzahlBuch("XY O90")
[Link] "101010TZ --> " & AnzahlBuch("101010TZ")
End Sub
Abbildung 76: Die Anzahl der Buchstaben wurde ermittelt..
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Listing 141: Umwandeln von rmischen Zahlen
Listing 140: Alle Buchstaben in einem Text zhlen (Forts.)
Sandini Bib
Rmische Zahlen umwandeln 171
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Function Arabisch(strText As String) As Integer
Dim intz As Integer
Dim intTeilW As Integer
Dim intTeilW2 As Integer
Dim intGesamtW As Integer
intGesamtW = 0
intTeilW = 0
intTeilW2 = 0
For intz = 1 To Len(strText)
Select Case Mid(strText, intz, 1)
Case Is = "M"
intTeilW = 1000
Case Is = "D"
intTeilW = 500
Case Is = "C"
intTeilW = 100
Case Is = "L"
intTeilW = 50
Case Is = "X"
intTeilW = 10
Case Is = "V"
intTeilW = 5
Case Is = "I"
intTeilW = 1
Case Else
intTeilW = 0
End Select
If intTeilW2 < intTeilW Then
intGesamtW = intGesamtW - intTeilW2 * 2 + intTeilW
Else
intGesamtW = intGesamtW + intTeilW
End If
intTeilW2 = intTeilW
Next intz
Arabisch = intGesamtW
End Function
Sub ZahlRom()
[Link] "MDLX --> " & Arabisch("MDLX")
[Link] "MCCL --> " & Arabisch("MCCL")
[Link] "DIX --> " & Arabisch("DIX")
[Link] "CCCLX --> " & Arabisch("CCCLX")
End Sub
Listing 141: Umwandeln von rmischen Zahlen (Forts.)
Sandini Bib
172 Weitere Funktionen
126 Arabische Zahlen umwandeln
Beim gerade umgekehrten Vorgang werden Sie an dieser Stelle eine etwas andere Vorgehens-
weise kennen lernen. Mchten Sie eine arabische Zahl in eine rmische Zahl umwandeln,
dann knnen Sie die Excel-Tabellenfunktion RMISCH einsetzen. Diese Funktion knnen Sie
direkt aus Access aufrufen, indem Sie in der Entwicklungsumgebung die Bibliothek MICRO-
SOFT EXCEL mithilfe des Menbefehls EXTRAS/VERWEISE aktivieren. Danach erfassen Sie fol-
genden Quellcode aus Listing 142:
Erstellen Sie zunchst ein neues Excel-Objekt. Danach greifen Sie ber das Objekt Worksheet-
Function auf die Tabellenfunktion roman zurck und bergeben dieser Funktion die arabische
Zahl. Als Rckgabewert liefert die Funktion die dazugehrende rmische Ziffer.
Abbildung 77: Das Ergebnis der Umwandlung
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function Rmisch(strZahl As String) As String
Dim xlApp As [Link]
Set xlApp = New [Link]
Rmisch = [Link](strZahl)
[Link]
Set xlApp = Nothing
End Function
Sub ZahlArab()
[Link] " 567 --> " & Rmisch(567)
[Link] "1579 --> " & Rmisch(1579)
[Link] " 936 --> " & Rmisch(936)
End Sub
Listing 142: Arabische Zahlen in rmische Zahlen umwandeln
Sandini Bib
Auf Dokumenteigenschaften zugreifen 173
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
127 Auf Dokumenteigenschaften zugreifen
Im folgenden Beispiel aus Listing 143 wird auf die Dokumenteigenschaften einer Datenbank
zugegriffen. Dabei orientiert sich die Funktion an Tabelle 55.
Abbildung 78: Die Zahlen wurden in die rmische Syntax umgesetzt.
Eigenschaftsnummer Beschreibung
0 Dateiname mit Pfad
1 nur Pfad
2 nur Dateiname
3 Dateityp
4 Dateigre in Byte
5 erstellt am
6 letzte nderung am
7 letzter Zugriff am
Tabelle 55: Die verfgbaren Dokumenteigenschaften
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function ZeigeDateiEigenschaften(Dateiname, EigenschaftsNr As Byte)
Dim fso As Object
Dim tmp As String
On Error Resume Next
Set fso = CreateObject("[Link]")
With [Link](Dateiname)
Select Case EigenschaftsNr
Case Is = 0: tmp = .path
Case Is = 1: tmp = Mid(.path, 1, Len(.path) - Len(.Name))
Case Is = 2: tmp = .Name
Listing 143: Dokumenteigenschaften ber eine Funktion abfragen
Sandini Bib
174 Weitere Funktionen
Erstellen Sie im ersten Schritt einen Verweis auf das FileSystemObject, um damit die Infor-
mationen bezglich der Datenbank zu erhalten. Danach werten Sie die bergebene Eigen-
schaftsnummer in einer Select Case-Anweisung aus. Bei den Datumswerten wenden Sie die
Funktion CDate an, um diese Angaben in das richtige Format zu bringen.
128 Den letzten Tag im Monat ermitteln
Vielleicht haben Sie manchmal auch Probleme, den letzten Tag eines Monats schnell zu
erkennen. Hat der Monat jetzt 30 oder 31 Tage? Es gibt hierfr zwar recht einfache Bauern-
regeln, wie etwa das Zhlen der Mulden zwischen den Fingerknochen. Aber auch da herrscht
doch relativ groe Unsicherheit, je nachdem, ob Sie von links oder rechts anfangen zu zh-
len. Eine nahezu sichere Lsung bietet die Funktion aus Listing 144.
Case Is = 3: tmp = .Type
Case Is = 4: tmp = .Size
Case Is = 5: tmp = CDate(.DateCreated)
Case Is = 6: tmp = CDate(.DateLastModified)
Case Is = 7: tmp = CDate(.DateLastAccessed)
Case Else
tmp = "Ungltige EigenschaftsNr!"
End Select
End With
ZeigeDateiEigenschaften = tmp
End Function
Sub DokumentEigenschaften()
[Link] ZeigeDateiEigenschaften([Link], 1)
[Link] ZeigeDateiEigenschaften([Link], 2)
[Link] ZeigeDateiEigenschaften([Link], 3)
[Link] ZeigeDateiEigenschaften([Link], 4)
[Link] ZeigeDateiEigenschaften([Link], 5)
[Link] ZeigeDateiEigenschaften([Link], 6)
[Link] ZeigeDateiEigenschaften([Link], 7)
End Sub
Abbildung 79: Die Dokumenteigenschaften werden ber eine Nummer ermittelt.
Listing 143: Dokumenteigenschaften ber eine Funktion abfragen (Forts.)
Sandini Bib
Den letzten Tag im Monat ermitteln 175
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Funktion DateSerial wird ein Datum in seine Bestandteile zerlegt. ber die
Funktionen Year und Month extrahieren Sie dann das jeweilige Jahr sowie den Monat.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap02
' Dateiname [Link]
' Modul MdlWeitereFunktionen
'=====================================================
Function LTImMo(inputdate As Date) As Date
LTImMo = DateSerial(Year(inputdate), Month(inputdate) + 1, 0)
End Function
Sub LetzterTagImMonatErmitteln()
[Link] "01.01.2004 --> " & LTImMo("01.01.2004")
[Link] "01.02.2004 --> " & LTImMo("01.02.2004")
[Link] "01.03.2004 --> " & LTImMo("01.03.2004")
[Link] "01.04.2004 --> " & LTImMo("01.04.2004")
[Link] "01.05.2004 --> " & LTImMo("01.05.2004")
[Link] "01.06.2004 --> " & LTImMo("01.06.2004")
[Link] "01.07.2004 --> " & LTImMo("01.07.2004")
[Link] "01.08.2004 --> " & LTImMo("01.08.2004")
[Link] "01.09.2004 --> " & LTImMo("01.09.2004")
[Link] "01.10.2004 --> " & LTImMo("01.10.2004")
[Link] "01.11.2004 --> " & LTImMo("01.11.2004")
[Link] "01.12.2004 --> " & LTImMo("01.12.2004")
End Sub
Listing 144: Den letzten Tag/Monat ermitteln
Abbildung 80: Eine komplette Liste mit den Letzten Tagen liegt vor.
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Access-Objekte
In diesem Kapitel knnen Sie Beispiele zu den wichtigsten Access-Objekten nachschlagen. Zu
jedem Objekt stehen Ihnen zahlreiche Methoden und Eigenschaften zur Verfgung, die Sie
bei der Programmierung einsetzen knnen.
129 Das Objekt AccessObject
Mithilfe des AccessObject-Objekts knnen Sie auf Auflistungsobjekte zugreifen und diese
auswerten. Dabei stehen Ihnen folgende Auflistungsobjekte zur Verfgung:
130 Alle Module auflisten
Um alle in der Entwicklungsumgebung angelegten Module aufzulisten, knnen Sie auf die
Auflistung AllModules zurckgreifen. Im Beispiel aus Listing 145 werden die Namen sowie
das Erstellungsdatum aller Module im Direktfenster der Entwicklungsumgebung ausgege-
ben.
AccessObject Auflistung Enthlt Informationen ber
Datenzugriffsseite
AllDataAccessPages
gespeicherte Datenzugriffs-
seiten
Datenbankdiagramm
AllDatabaseDiagrams
gespeicherte Datenbank-
diagramme
Form
AllForms
gespeicherte Formulare
Funktion
AllFunctions
gespeicherte Funktionen
Makro
AllMacros
gespeicherte Makros
Modul
AllModules
gespeicherte Module
Abfrage
AllQueries
gespeicherte Abfragen
Bericht
AllReports
gespeicherte Berichte
Gespeicherte Prozedur
AllStoredProcedures
gespeicherte Prozeduren
Table
AllTables
gespeicherte Tabellen
Sicht
AllViews
gespeicherte Ansichten
Tabelle 56: Alle AccessObjects im berblick
Sandini Bib
178 Die Access-Objekte
ber die Eigenschaft CurrentProject haben Sie Zugriff auf die aktuelle Datenbank. ber die
Eigenschaft Name knnen Sie sich die Namen der einzelnen Module ausgeben lassen, wenn Sie
das Auflistungsobjekt AllModules einsetzen. Mithilfe der Eigenschaft DateCreated knnen Sie
abfragen, wann das Modul erstellt wurde.
131 Alle Tabellen auflisten
ber die Auflistung AllTables haben Sie Zugriff auf alle Tabellen, die sich in der Datenbank
befinden. Im Makro aus Listing 146 werden die Namen aller Tabellen in das Direktfenster der
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlAccObj
'=====================================================
Sub ModuleAuflisten()
Dim AccObj As AccessObject
Dim dbs As CurrentProject
Set dbs = [Link]
For Each AccObj In [Link]
[Link] "Name : " & [Link]
[Link] "Erstellt am : " & [Link] & vbLf
Next AccObj
End Sub
Listing 145: Alle Module werden im Direktfenster dokumentiert.
Abbildung 81: Die verfgbaren Module der Datenbank
H
i
n
w
e
i
s
In Kapitel 9 knnen Sie nachschlagen, wie Sie mithilfe der VBE-Programmierung noch
weiter gehende Aufgaben schnell erledigen knnen.
Sandini Bib
Alle Tabellen auflisten 179
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Entwicklungsumgebung geschrieben. Dabei wird geprft, ob die jeweilige Tabelle momentan
geffnet ist.
ber die Eigenschaft CurrentData haben Sie Zugriff auf einige Objekte, die sich in der geff-
neten Datenbank befinden. Unter diesen Objekten befinden sich auch Tabellen, die Sie ber
die Auflistung AllTables ansprechen knnen. Mithilfe der Eigenschaft Name ermitteln Sie den
Namen der jeweiligen Tabelle. Die Funktion IsLoaded gibt Auskunft darber, ob eine Tabelle
momentan geffnet ist. Wenn ja, dann meldet diese Funktion den Rckgabewert True.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlAccObj
'=====================================================
Sub TabellenAuflisten()
Dim Accobj As AccessObject
Dim dbs As CurrentData
Set dbs = [Link]
For Each Accobj In [Link]
[Link] "Tabellenname: " & [Link]
[Link] "Geffnet : " & [Link] & vbLf
Next Accobj
End Sub
Listing 146: Tabellennamen dokumentieren
Abbildung 82: Tabellen auflisten und Status prfen
Sandini Bib
180 Die Access-Objekte
132 Alle Abfragen auflisten
ber den Einsatz des AccessObject knnen Sie alle Abfragen der Datenbank anzeigen lassen.
Im Makro aus Listing 147 werden die Namen aller in der Datenbank befindlichen Abfragen
dokumentiert.
In einer For each next-Schleife durchlaufen Sie Abfragen und ermitteln die Namen der Abfra-
gen ber die Eigenschaft Name.
133 Die Application-Objekte
Das Application-Objekt steht an oberster Ebene. Es bezieht sich auf die aktive Microsoft
Access-Anwendung und beinhaltet alle darunter liegenden Objekte wie Formulare, Reports,
Drucker und Bildschirm.
134 Name der aktuellen Datenbank abfragen
Soll der Name der aktuell geffneten Datenbank abgefragt werden, dann knnen Sie diese
Aufgabe ber das Makro aus Listing 148 durchfhren.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlAccObj
'=====================================================
Sub AbfragenAuflisten()
Dim AccObj As AccessObject
Dim dbs As CurrentData
Set dbs = [Link]
For Each AccObj In [Link]
[Link] [Link]
Next AccObj
End Sub
Listing 147: Alle Abfragen dokumentieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Listing 148: Name der Datenbank ermitteln Variante 1
Sandini Bib
Pfad der aktuellen Datenbank abfragen 181
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Eigenschaft Name, welche Sie auf das Objekt CurrentProject anwenden, knnen Sie
den Namen der aktuellen Datenbank ermitteln.
Eine zweite Variante, um den Namen der Datenbank zu ermitteln, sehen Sie im Makro aus
Listing 149.
ber die Eigenschaft Name, welche Sie auf das Objekt CurrentDb anwenden, knnen Sie den
Namen der aktuellen Datenbank ermitteln.
135 Pfad der aktuellen Datenbank abfragen
Um den Pfad der aktuell geffneten Datenbank abzufragen, setzen Sie die Eigenschaft Path
wie in Listing 150 gezeigt, ein.
Sub DatenbankName()
MsgBox "Die aktuelle Datenbank heit: " & _
[Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub DatenbankName2()
MsgBox "Die aktuelle Datenbank heit: " & _
[Link]
End Sub
Listing 149: Name der Datenbank ermitteln Variante 2
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub PfadAusgeben()
MsgBox "Die aktuelle Datenbank heit: " & _
[Link]
End Sub
Listing 150: Pfad der Datenbank ermitteln
Listing 148: Name der Datenbank ermitteln Variante 1 (Forts.)
Sandini Bib
182 Die Access-Objekte
Um beide Informationen, also den Pfad sowie den Namen der aktuellen Datenbank abzufra-
gen, verwenden Sie die Eigenschaft FullName.
136 Pfad der Anwendung abfragen
Durch den Einsatz der Methode SysCmd knnen Sie den Pfad der Anwendung ermitteln. Im
Beispiel aus Listing 152 wird der Installationspfad von Microsoft Access ermittelt.
bergeben Sie der Methode SysCmd als Konstante acSysCmdAccessDir, um das Installationsver-
zeichnis von Microsoft Access abzufragen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub PfadUndNameAusgeben()
MsgBox "Die aktuelle Datenbank heit: " & _
[Link]
End Sub
Listing 151: Pfad und Dateiname der Datenbank ermitteln
Abbildung 83: Pfad und Dateiname abfragen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub InstallationsPfadAusgeben()
MsgBox "Das Installationsverzeichnis von Access lautet: " & _
vbLf & SysCmd(acSysCmdAccessDir), vbInformation
End Sub
Listing 152: Den Pfad der Anwendung abfragen
Sandini Bib
Access-Version feststellen 183
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
137 Access-Version feststellen
Ebenso geeignet, um die eingesetzte Access-Version zu ermitteln, ist der Einsatz der Methode
SysCmd. Im folgenden Beispiel aus Listing 153 wird die Access-Versionsnummer am Bild-
schirm ausgegeben.
bergeben Sie der Methode SysCmd als Konstante acSysCmdAccessVer, um die Access-Versions-
nummer zu ermitteln.
Abbildung 84: Den Installationspfad von Access ausgeben
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub AccessVersionsNrAusgeben()
MsgBox "Die eingesetzte Access-Version lautet: " & _
vbLf & SysCmd(acSysCmdAccessVer), vbInformation
End Sub
Listing 153: Die eingesetzte Access-Version abfragen
Abbildung 85: Die Versionsabfrage wurde durchgefhrt.
H
i
n
w
e
i
s
Die Versionsnummer 11.0 steht fr Microsoft Access 2003.
Sandini Bib
184 Die Access-Objekte
138 Aktuellen Anwendernamen abfragen
Mithilfe der Methode CurrentUser knnen Sie den Namen des aktuellen Benutzers der
Datenbank zurckgeben.
139 Aktuelle Datenbank schlieen
Soll die aktuelle Datenbank geschlossen werden, dann knnen Sie fr diese Aufgabe die
Methode CloseCurrentDatabase einsetzen. Diese Methode kann unter anderem dann einge-
setzt werden, wenn Sie eine Microsoft Access-Datenbank von einer anderen Anwendung aus
ber Automatisierung geffnet haben.
140 Applikation beenden
Mchten Sie Microsoft Access beenden, dann setzen Sie die Methode Quit ein, welche Sie auf
das Objekt Application anwenden. Im Makro aus Listing 156 wird die Anwendung beendet
und alle nderungen an der aktuellen Datenbank werden vorher gesichert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub AnwenderNamenAusgeben()
MsgBox "Der aktuelle Benutzer ist: " & _
[Link], vbInformation
End Sub
Listing 154: Den aktuellen Anwendernamen abfragen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub DatenbankBeenden()
[Link]
End Sub
Listing 155: Aktuelle Datenbank schlieen
Sandini Bib
Drucker auflisten 185
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Methode Quit kann mit folgenden Optionen eingesetzt werden:
acQuitPrompt: Zeigt ein Dialogfeld an, in dem Sie gefragt werden, ob genderte, aber nicht
gesicherte Objekte vor dem Beenden von Microsoft Access gespeichert werden sollen.
acQuitSaveAll: Speichert alle Objekte, ohne ein Dialogfeld anzuzeigen. (Standardeinstel-
lung).
acQuitSaveNone: Beendet Microsoft Access, ohne Objekte zu speichern.
141 Drucker auflisten
Um zu ermitteln, welche Drucker Sie im Einsatz haben und an welchem Anschluss diese hn-
gen, knnen Sie das neue Auflistungsobjekt Printers nutzen, das Sie im Zusammenspiel mit
dem Objekt Application einsetzen.
Die Eigenschaft DeviceName zeigt den Druckernamen an. Mithilfe der Eigenschaft Port kn-
nen Sie den Anschluss anzeigen, dem Ihr Drucker zugeordnet ist.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub ApplikationBeenden()
[Link] acQuitSaveAll
End Sub
Listing 156: Applikation beenden
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub DruckerListen()
Dim Drucker As Printer
For Each Drucker In [Link]
With Drucker
[Link] "Druckername: " & .DeviceName & vbCr _
& "Anschluss: " & .Port
End With
Next Drucker
End Sub
Listing 157: Drucker und Ports auflisten
Sandini Bib
186 Die Access-Objekte
142 Access-Version abfragen
ber die Eigenschaft Version, die Sie auf das Objekt Application anwenden, knnen Sie die
eingesetzte Access-Version ermitteln.
143 Das Control-Objekt
Das Objekt Control stellt ein Steuerelement dar, das sich in einem Formular, einem Bericht,
einem Bereich oder innerhalb eines anderen Steuerelements befindet oder einem anderen
Steuerelement beigefgt ist. Im folgenden Beispiel aus Listing 159 werden alle Textfelder des
Formulars Artikel im Direktfenster ausgegeben.
Abbildung 86: Die verfgbaren Drucker mit Anschlussbelegung
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlApp
'=====================================================
Sub VersionAusgeben()
MsgBox "Sie arbeiten mit der Access-Version: " _
& [Link]
End Sub
Listing 158: Die eingesetzte Access-Version ermitteln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCtl
'=====================================================
Listing 159: Alle Textfelder in einem Formular auslesen
Sandini Bib
Das DoCmd-Objekt 187
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Anweisung Set geben Sie zunchst einmal an, wie das Formular heit. Danach set-
zen Sie eine For Each Next-Schleife auf, die alle Steuerelemente des Formulars abarbeitet.
Innerhalb der Schleife prfen Sie ber den Einsatz der Funktion TypeName, ob es sich bei dem
jeweiligen Steuerelement um ein Textfeld handelt. Wenn ja, dann meldet diese Funktion den
Ausdruck Textbox zurck. In diesem Fall geben Sie den Namen des Steuerelements ber die
Eigenschaft Name aus.
144 Das DoCmd-Objekt
ber den Einsatz des Objekts DoCmd knnen Sie Aktionen wie das Schlieen von Fenstern, das
ffnen von Formularen und das Festlegen der Werte von Steuerelementen ausfhren.
Auf den nchsten Seiten erfolgt eine Auswahl von typischen Aufgaben, die in Verbindung mit
diesem Objekt durchgefhrt werden knnen.
145 Filter in Tabellen setzen
Mithilfe der Methode ApplyFilter knnen Sie einen Filter hinzufgen. Dabei setzen Sie die-
sen Filter gewhnlich in Tabellen oder Formularen ein. Die Syntax dieser Methode lautet:
[Link](Filtername, Bedingung)
Sub SteuerelementeDokumentieren()
Dim ctrl As Control
Dim frm As Form
Set frm = Form_Kunden
For Each ctrl In [Link]
If TypeName(ctrl) = "Textbox" Then
[Link] [Link]
End If
Next ctrl
End Sub
Abbildung 87: Die Textfelder eines Formulars wurden dokumentiert.
Listing 159: Alle Textfelder in einem Formular auslesen (Forts.)
Sandini Bib
188 Die Access-Objekte
Im folgenden Beispiel aus Listing 160 wird die Tabelle Artikel geffnet. Danach werden alle
Artikel ausgefiltert, die einen Lagerbestand kleiner 10 aufweisen.
ber die Methode OpenTable ffnen Sie die Tabelle, danach wenden Sie die Methode
ApplyFilter an, um den Filter zu setzen. Das Filterkriterium wird dabei in Anfhrungs-
zeichen angegeben.
Sollen beispielsweise gleich mehrere Artikel ausgefiltert werden, dann knnen Sie diese Auf-
gabe ber das Makro aus Listing 161 lsen. Dabei werden alle Artikel mit dem Namen TOFU
oder KONBU in der Tabelle Artikel gefiltert.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Filtername
Optional. Legt den Namen eines Filters oder einer Abfrage in der
aktuellen Datenbank fest.
Bedingung
Optional. Legt die Bedingung fest
Tabelle 57: Die Argumente der Methode ApplyFilter
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub FilterSetzen()
[Link] "Artikel"
[Link] , "Lagerbestand < 10"
End Sub
Listing 160: Einen Tabellenfilter setzen
Abbildung 88: Alle Artikel mit einem Lagerbestand von weniger als zehn Artikeln werden angezeigt.
Sandini Bib
Objekte umbenennen 189
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
146 Objekte umbenennen
Mithilfe der Methode Rename knnen Sie Objekte wie Tabellen, Formulare und sonstige
umbenennen. Die Syntax dieser Methode lautet:
[Link](NewName, ObjectType, OldName)
Im folgenden Beispiel aus Listing 162 wird eine Tabelle umbenannt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub FilterSetzen2()
[Link] "Artikel"
[Link] , "Artikelname = 'Tofu' OR Artikelname= 'Konbu'"
End Sub
Listing 161: Mehrere Bedingungen beim Filtern angeben
Abbildung 89: Die Artikel Konbu und Tofu wurden gefiltert.
H
i
n
w
e
i
s
Durch die Methode ShowAllRecords werden alle vorhandenen Filter entfernt, die fr die
aktuelle Tabelle, die aktuelle Abfrage oder das aktuelle Formular eingerichtet wurden.
Diese Methode hat keine weiteren Argumente.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
NewName
Erforderlich. Legt den neuen Namen des umzubenennenden
Objekts fest.
ObjectType
Optional. Gibt den Typ des umzubenennenden Objekts an.
OldName
Optional. Gibt den alten Namen des Objekts an.
Tabelle 58: Die Argumente der Methode Rename
Sandini Bib
190 Die Access-Objekte
Sollte die Umbenennung nicht erfolgreich sein, dann knnen Sie anstatt eines Makroabstur-
zes ber die Anweisung On Error GoTo zu einer Fehlerbehandlung bergehen. Dabei werten
Sie das Objekt Err aus, indem Sie ber die Eigenschaften Number und Description die Feh-
lernummer sowie eine Beschreibung des Fehlers am Bildschirm anzeigen.
147 Objekte kopieren
Mithilfe der Methode CopyObject knnen Sie Objekte wie Tabellen und Berichte kopieren.
Die Syntax dieser Methode lautet:
[Link](Zieldatenbank, NeuerName, Quellobjekttyp, Quellobjektname)
Beim folgenden Beispiel aus Listing 163 wird die Tabelle Artikel kopiert und der Namen
ArtikelAktuell vergeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TabelleUmbenennen()
On Error GoTo fehler
[Link] "ArtikelNeu", acTable, _
"ArtikelAktuell"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 162: Eine Tabelle umbenennen
Argument Beschreibung
Ausdruck Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Zieldatenbank Optional. Gibt den gltigen Pfad und Dateinamen fr die Datenbank
an, in die das Objekt kopiert werden soll.
NeuerName Optional. Legt den neuen Namen fr das zu kopierende Objekt fest.
Sie knnen beim Kopieren in eine andere Datenbank denselben
Namen verwenden, indem Sie dieses Argument nicht angeben.
Quellobjekttyp Optional. Gibt an, um welchen Objekttyp es sich handelt.
Quellobjektname Optional. Gibt den Namen des Quellobjekts an.
Tabelle 59: Die Argumente der Methode CopyObject
Sandini Bib
Objekte kopieren 191
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Soll die Tabelle Artikel in eine andere Datenbank kopiert werden, die momentan nicht geff-
net ist, dann wenden Sie das Makro aus Listing 164 an.
Sollte der Kopiervorgang nicht erfolgreich sein, dann knnen Sie anstatt eines Makro-
absturzes ber die Anweisung On Error GoTo zu einer Fehlerbehandlung bergehen. Dabei
werten Sie das Objekt Err aus, indem Sie ber die Eigenschaften Number und Description die
Fehlernummer sowie eine Beschreibung des Fehlers am Bildschirm anzeigen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TabelleKopieren()
[Link] , "ArtikelAktuell", acTable, _
"Artikel"
End Sub
Listing 163: Tabelle in aktueller Datenbank kopieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TabelleKopierenInAndereDB()
On Error GoTo fehler
[Link] "C:\Eigene Dateien\[Link]", _
"ArtikelAktuell", acTable, "Artikel"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 164: Tabelle in andere Datenbank kopieren
Abbildung 90: Den Fehlerfall abfangen ber das Objekt Err.
Sandini Bib
192 Die Access-Objekte
148 Objekte lschen
ber die Methode DeleteObject knnen Sie ein Objekt wie beispielsweise eine Tabelle oder
ein Formular aus einer Datenbank entfernen. Die Syntax dieser Methode lautet:
[Link](Objekttyp, Objektname)
Im folgenden Beispiel aus Listing 165 wird die Tabelle ArtikelAktuell aus der aktuellen
Datenbank entfernt.
149 Objekte exportieren
Mit der Methode OutputTo knnen Sie die Daten in einem bestimmten Microsoft Access-
Datenbankobjekt (einem Datenblatt, einem Formular, einem Bericht, einem Modul oder einer
Datenzugriffsseite) in verschiedenen Formaten ausgeben. Die Syntax dieser Methode lautet:
OutputTo(ObjectType, ObjectName, OutputFormat, OutputFile, AutoStart, TemplateFile)
Argument Beschreibung
Ausdruck Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurck-
gibt.
Objekttyp Gibt den Objekttyp an.
Objektname Optional. Gibt den Namen des Objekts bekannt, das
gelscht werden soll.
Tabelle 60: Die Argumente der Methode DeleteObject
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TabelleEntfernen()
On Error GoTo fehler
[Link] acTable, "ArtikelAktuell"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 165: Eine Tabelle aus der aktuellen Datenbank entfernen
Sandini Bib
Objekte exportieren 193
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 166 wird die Tabelle Artikel in eine Textdatei geschrieben.
Argument Beschreibung
ObjectType Erforderlich. Legt die Art des Access-Objekts fest, dessen Daten Sie exportie-
ren mchten. Dabei haben Sie folgende Mglichkeiten:
acOutputForm: Export der Daten eines Formulars
acOutputFunction: Export einer Funktion
acOutputModule: Export eines kompletten Moduls inklusive aller Funktionen
und Makros
acOutputQuery: Export der Ergebnisse einer Abfrage
acOutputReport: Export eines Berichts
acOutputServerView: Export einer Serveransicht
acOutputStoredProcedure: Export einer gespeicherten Prozedur
acOutputTable: Export einer Tabelle
ObjectName Optional. Gibt den Namen des Objekts an, das Sie exportieren mchten.
OutPutFormat
Optional. Legt fest, in welchem Datenformat Sie die Daten transferieren.
Die bekanntesten Formate sind Folgende:
acFormatHTML: Konvertiert die Daten in das HTML-Format.
acFormatRTF: Konvertiert die Daten in das Rich-Text-Format. Dieses Format
kann beispielsweise problemlos in Microsoft Word eingelesen werden.
acFormatTXT: Mit diesem Format ist das Textformat gemeint.
acFormatXLS: Konvertiert die Daten in das Microsoft Excel-Format.
OutputFile
Optional. Der Pfad sowie den Dateinamen der Datei, in welche Sie die Daten
transferieren mchten. Dabei muss die Datei noch nicht vorhanden sein.
Access legt diese bei Bedarf selber an.
AutoStart
Optional. Damit haben Sie die Mglichkeit, die so erstellte Exportdatei
gleich zu ffnen. Verwenden Sie den Wert True, um die entsprechende auf
Windows basierende Anwendung sofort zu starten. Setzen Sie das Argument
auf den Wert False oder lassen Sie es weg, wenn Sie die Exportdatei nicht
ffnen mchten.
TemplateFile
Optional. Dieses Argument ist dann von Interesse, wenn Sie eine Vorlage
beispielsweise fr die HTML-Datei verwenden mchten. In diesem Fall ist
dann der komplette Pfad dieser Vorlagendatei anzugeben.
Tabelle 61: Die Argumente der Methode OutPutTo
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
Listing 166: Tabelle in eine Textdatei exportieren
Sandini Bib
194 Die Access-Objekte
Geben Sie bei der Methode OutputTo den Objekttyp, den Namen des Objekts, das
gewnschte Ausgabeformat sowie den Namen der Zieldatei an. Dabei wird die
Zieldatei, sofern sie noch nicht existiert, neu angelegt. Im letzten Argument der Methode
geben Sie den Wert True an, was bedeutet, dass die Zieldatei nach dem Export angezeigt
werden soll.
150 Objekte drucken
ber die Methode PrintOut knnen Sie einen Drucken-Befehl in Access ausfhren. Die Syn-
tax dieser Methode lautet:
[Link](Druckbereich, Von, Bis, Druckqualitt, Exemplare,
ExemplareSortieren)
'=====================================================
Sub TabelleExportieren()
On Error GoTo fehler
[Link] acOutputTable, "Artikel", _
acFormatTXT, "C:\Eigene Dateien\[Link]", True
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Abbildung 91: Die Tabelle liegt nun als Textdatei vor.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Druckbereich
Optional. acPages, acPrintAll (Standard), acSelection
Tabelle 62: Die Argumente der Methode PrintOut
Listing 166: Tabelle in eine Textdatei exportieren (Forts.)
Sandini Bib
Objekte drucken 195
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 167 wird ein Bericht in der aktuell geffneten Datenbank
geffnet und es werden einige Seiten davon ausgedruckt.
ber die Methode Echo knnen Sie festlegen, ob die Bildschirmaktualisierung whrend des
Makroablaufs eingeschaltet bzw. ausgeschaltet wird. Wenn Sie diese Methode mit dem Argu-
ment False einsetzen, dann erfolgt der Druckvorgang gnzlich im Hintergrund. Nach dem
Drucken der Seiten wenden Sie die Methode Close an, um den Bericht wieder zu schlieen,
und schalten Sie die Bildschirmaktualisierung wieder ein.
Von
Optional. Gibt die erste Seite des Bereichs an, ab der gedruckt
werden soll. Dieses Argument ist erforderlich, wenn Sie fr das
Argument Druckbereich die Konstante acPages angeben.
Bis
Optional. Gibt die letzte Seite an, bis zu der gedruckt werden
soll. Dieses Argument ist erforderlich, wenn Sie fr das Argu-
ment Druckbereich die Konstante acPages angeben.
Druckqualitt
Optional. Dabei gelten folgende Konstanten:
acDraft (Entwurfsqualitt)
acHigh (bestmgliche Druckqualitt)
acLow (Konzeptdruckqualitt)
acMedium (mittlere Druckqualitt)
Exemplare
Optional. Gibt die Anzahl der Kopien an.
ExemplareSortieren
Optional. Verwenden Sie True, um die Exemplare zu sortieren,
und False, um die Exemplare nicht whrend des Druckvor-
gangs zu sortieren.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub BerichtDrucken()
[Link] False
[Link] "Rechnung", acViewPreview
[Link] acPages, 1, 1, , 2
[Link]
[Link] True
End Sub
Listing 167: Bericht drucken
Argument Beschreibung
Tabelle 62: Die Argumente der Methode PrintOut (Forts.)
Sandini Bib
196 Die Access-Objekte
151 Objekte versenden
Fr das Versenden von E-Mails knnen Sie in Access die Methode SendObject einsetzen.
Dabei knnen Sie ganz genau festlegen, welchen Bestandteil einer Access-Datenbank Sie ver-
senden mchten. Ferner bergeben Sie dieser Methode die Adressaten sowie den Begleittext
der E-Mail. Die Syntax dieser Methode lautet:
SendObject(Objekttyp, Objektname, Ausgabeformat, An, Cc, Bcc, Betreff, Nachricht,
NachrichtBearbeiten, Vorlagedatei)
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Objekttyp
Optional. Dabei geben Sie in einer Konstanten an, welchen Bestandteil der
Datenbank Sie per E-Mail versenden mchten. Folgende Konstanten
stehen Ihnen dabei zur Verfgung:
acSendDataAccessPage: Eine Access-Datenzugriffsseite wird einem E-Mail-
Empfnger zugestellt.
acSendForm: Ein Formular soll ber eine E-Mail versendet werden.
acSendModule: Ein Modul wird per E-Mail versendet.
acSendNoObject: Es wird lediglich eine Text-E-Mail, ohne Anhang,
versendet. Es handelt sich dabei um die Standardeinstellung.
acSendQuery: Hierbei soll eine Abfrage per E-Mail versendet werden.
acSendReport: Bei dieser Angabe wird ein Bericht versendet.
acSendTable: Diese Konstante steht fr das Versenden einer bestimmten
Tabelle aus einer Datenbank.
Objektname
Optional. Hier muss der Name des Objekts angegeben werden, der per
E-Mail versendet werden soll.
Ausgabeformat
Optional. Hier knnen Sie festlegen, in welcher Form das Access-Objekt
versendet werden soll. Dabei haben Sie unter anderem die Auswahl
zwischen folgenden Konstanten:
acFormatHTML: Ausgabe des Access-Objekts ber das HTML-Format,
das Sie mit jedem Browser ansehen knnen.
acFormatRTF: Beim RTF-Format handelt es sich um ein Textformat,
das Sie mit nahezu jedem Textverarbeitungsprogramm ffnen knnen.
acFormatTXT: Dieses Textformat ist mit jedem Texteditor, beispielsweise
Notepad im Zubehr von Windows, zu lesen.
acFormatXLS: Dabei handelt es sich um das Excel-Tabellenformat.
AcFormatDAP: Bei dieser Konstante handelt es sich um Datenzugriffseiten.
An
Optional. Hier mssen Sie die Empfnger auflisten, deren Namen in die
An-Zeile der E-Mail-Nachricht aufgenommen werden sollen. Die Empfn-
gernamen in diesem Argument mssen durch Semikola (;) voneinander
getrennt werden.
Tabelle 63: Die Argumente der Methode SendObject
Sandini Bib
Objekte versenden 197
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 168 wird eine E-Mail ohne Dateianhang versendet.
Cc
Optional. Gibt an, an welche E-Mail-Empfnger Sie die E-Mail als Kopie
schicken mchten. Es gelten dabei dieselben Optionen wie auch beim
Argument An.
Bcc
Optional. Hier knnen Sie E-Mail-Empfnger eine blinde Kopie der
E-Mail schicken, ohne dass der eigentliche Empfnger der E-Mail, der
unter dem Argument An angegeben wurde, etwas davon erfhrt.
Betreff
Optional. Reprsentiert die Betreff-Zeile der E-Mail. Geben Sie dort einen
Betreff in doppelten Anfhrungsstrichen an.
Nachricht
Optional. Geben Sie den Text an, der in die E-Mail eingefgt werden soll.
Wenn Sie dieses Argument nicht angeben, wird nur das Objekt, jedoch
kein Text in die E-Mail aufgenommen.
NachrichtBearbeiten
Optional. Hier knnen Sie entscheiden, ob Sie die E-Mail direkt absenden
oder zur weiteren Bearbeitung vorher ffnen mchten. Setzen Sie dieses
Argument auf den Wert False, um die Nachricht direkt zu versenden. Set-
zen Sie das Argument auf den Wert True, um die E-Mail zur weiteren
Bearbeitung zu ffnen.
Vorlagedatei
Optional. Hier handelt es sich um einen optionalen Wert, der den vollstn-
digen Namen und Pfad der Datei angibt, die als Vorlage fr eine HTML-
Datei verwendet werden soll.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TextMailVersenden()
On Error GoTo fehler
[Link] , , , _
"Held-office@[Link]", _
"Machero@[Link]", , "Feedback erwnscht", _
"Sehr geehrter KundeXY," & vbCrLf & _
"Bitte schicken Sie mir ein Feedback" & _
vbCrLf & "zu meiner Anfrage vom 20.07.2004" & _
vbCrLf & vbCrLf & _
"Viele Gre" & vbCrLf & _
"Bernd Held", True
Exit Sub
Listing 168: Eine einfache Text-E-Mail versenden
Argument Beschreibung
Tabelle 63: Die Argumente der Methode SendObject (Forts.)
Sandini Bib
198 Die Access-Objekte
Da diese Art von E-Mail keinen Dateianhang hat, lassen Sie die ersten drei Argumente der
Methode SendObject einfach leer. Danach geben Sie den Adressaten sowie den Kopieempfn-
ger der E-Mail, den Titel und den eigentlichen Text der E-Mail an. Mithilfe der Konstanten
vbCrLf knnen Sie im E-Mail-Text einen Zeilenumbruch erzeugen. ber das letzte Argu-
ment, das Sie auf True oder False setzen knnen, bestimmen Sie, ob die E-Mail direkt versen-
det oder noch einmal vor dem Versand zur Kontrolle angezeigt werden soll.
Im nchsten Beispiel aus Listing 169 wird die Tabelle Artikel im Excel-Format gleich an
mehrere Anwender per E-Mail verschickt.
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Abbildung 92: Eine Text-E-Mail ohne Anhang erstellen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub MailMitAnhangVersenden()
On Error GoTo fehler
[Link] acSendTable, _
"Artikel", acFormatXLS, _
"Held-office@[Link]; Machero@[Link]", _
, , "Die aktuellen Top-Artikel", _
Listing 169: E-Mail mit Dateianhang versenden
Listing 168: Eine einfache Text-E-Mail versenden (Forts.)
Sandini Bib
Feld aktivieren im Formular 199
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Legen Sie in den ersten drei Argumenten der Methode SendObject den Objekttyp, den
Objektnamen und das gewnschte Ausgabeformat an. Danach geben Sie den Adressaten
sowie den Kopieempfnger der E-Mail, den Titel und den eigentlichen Text der E-Mail an.
152 Feld aktivieren im Formular
ber die Methode GoToControl knnen Sie den Fokus in einem Formular auf ein bestimmtes
Feld setzen. Die Syntax dieser Methode lautet:
[Link](Steuerelementname)
"Hallo Kollegen, " & vbCrLf & _
"Anbei die aktuell gut laufenden Artikel!" & _
vbCrLf & "Viele Gre" & vbCrLf & _
"Fritz Meier", True
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Abbildung 93: Die Tabelle Artikel wird im Excel-Format verschickt.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Steuerelementname
Erforderlich. Gibt den Namen des Steuerelements im aktiven
Formular oder Datenblatt an.
Tabelle 64: Die Argumente der Methode GoToControl
Listing 169: E-Mail mit Dateianhang versenden (Forts.)
Sandini Bib
200 Die Access-Objekte
Im folgenden Beispiel aus Listing 170 wird das Formular KUNDEN geffnet und der Fokus in
das Feld Firma gesetzt.
ber die Methode OpenForm ffnen Sie das Formular KUNDEN. Danach wenden Sie die
Methode GoToControl an, um das gewnschte Feld zu aktivieren.
153 Datensatz in Tabelle aktivieren
ber die Methode GoToRecord knnen Sie einen bestimmten Satz in einem Formular oder
einer Tabelle vorab einstellen. Die Syntax dieser Methode lautet:
[Link](Objekttyp, Objektname, Datensatz, Offset)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub FeldAnspringen()
[Link] "Kunden"
[Link] "Firma"
End Sub
Listing 170: Ein bestimmtes Feld im Formular anspringen
Abbildung 94: Der Fokus wurde auf das Feld Firma gesetzt.
Sandini Bib
Menbefehle ausfhren 201
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Beispiel aus Listing 171 wird die Tabelle Artikel geffnet und der letzte Satz voreinge-
stellt.
154 Menbefehle ausfhren
Mithilfe der Methode RunCommand knnen Sie jeden mglichen Befehl in Access, den Sie ber
die Mens ansteuern knnen, auch per Makro ausfhren lassen. Diese Methode hat demzu-
folge mehrere hundert Konstanten, ber die Sie steuern knnen, welcher Menbefehl ausge-
fhrt werden soll. Die Syntax dieser Methode lautet:
[Link](Command)
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Objekttyp
Gibt den Objekttyp an. Es gelten dabei: acActiveDataObject (Stan-
dard), acDataForm, acDataFunction, acDataQuery, acDataServerView,
acDataStoredProcedure oder acDataTable.
Objektname
Optional. Gibt den Namen des Objekts an.
Datensatz
Optional. Dabei gelten folgende Konstanten: acFirst, acGoTo, acLast,
acNewRec, acNext (Standard), acPrevious
Offset
Optional. Eine Zahl, die die Anzahl der Datenstze angibt, um die
vorwrts oder rckwrts geblttert werden soll, wenn Sie fr das
Argument Datensatz die Optionen acNext oder acPrevious angege-
ben haben, oder der Datensatz, zu dem Sie wechseln mchten,
wenn Sie fr das Argument Datensatz acGoTo angegeben haben.
Der Ausdruck muss eine gltige Datensatznummer ergeben.
Tabelle 65: Die Argumente der Methode GoToRecord
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub LetzterSatzEinstellen()
[Link] "Artikel"
[Link] acDataTable, "Artikel", acLast
End Sub
Listing 171: Den letzten Satz einer Tabelle voreinstellen
Sandini Bib
202 Die Access-Objekte
Entnehmen Sie aus der folgenden Tabelle exemplarisch ein paar wichtige Command-Konstanten.
Im folgenden Beispiel aus Listing 172 wird der Dialog DOKUMENTEIGENSCHAFTEN aufgerufen.
Argument Beschreibung
Ausdruck Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurck-
gibt.
Command ber eine Konstante aus Tabelle 67 knnen Sie den
gewnschten Befehl ausfhren.
Tabelle 66: Die Argumente der Methode RunCommand
Konstante Beschreibung
acCmdAboutMicrosoftAccess Ruft den Info-Dialog auf.
acCmdAnswerWizard Zeigt die Direkthilfe an.
acCmdCloseWindow Schliet das aktuelle Fenster.
acCmdDatabaseProperties Zeigt die Datenbankeigenschaften an.
acCmdDocMinimize Minimiert das Datenbankfenster.
acCmdDocMaximize Maximiert das Datenbankfenster.
acCmdExit Beendet Microsoft Access.
acCmdFind Das Suchenfenster wird angezeigt.
acCmdNewDatabase Legt eine neue Datenbank an.
acCmdOpenDatabase Zeigt den FFNEN-Dialog an.
acCmdOpenTable ffnet eine Tabelle.
acCmdOptions Zeigt den Dialog OPTIONEN an.
acCmdPrint Zeigt den Dialog DRUCKEN an.
acCmdQuickPrint Druckt sofort, ohne den Dialog DRUCKEN
anzuzeigen.
acCmdRedo Wiederholt die letzte Aktion.
acCmdUndo Widerruft die letzte Aktion.
acCmdRelationships ffnet das Fenster, welches die Beziehun-
gen der Tabellen anzeigt.
acCmdSend ffnet den E-Mail-Dialog.
Tabelle 67: Die wichtigsten Command-Konstanten der Methode RunCommand
Sandini Bib
Symbolleisten ein- und ausblenden 203
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
155 Symbolleisten ein- und ausblenden
ber die Methode ShowToolbar knnen Sie eine Symbolleiste einblenden. Die Syntax dieser
Methode lautet:
[Link](Symbolleistenname, Anzeigen)
Im folgenden Beispiel aus Listing 173 wird die Symbolleiste WEB ein- und wieder ausgeblen-
det.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub DokumenteigenschaftenAnzeigen()
[Link] acCmdDatabaseProperties
End Sub
Listing 172: Dokumenteigenschaften aufrufen
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Symbolleistenname
Erforderlich. Gibt den Namen einer integrierten Symbolleiste von
Microsoft Access oder einer von Ihnen erstellten benutzerdefinier-
ten Symbolleiste an.
Anzeigen
Optional. Folgende Konstanten stehen zur Verfgung: acToolbarNo,
acToolbarWhereApprop und acToolbarYes (Standard).
Tabelle 68: Die Argumente der Methode ShowToolbar
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub SymbolleisteEinblenden()
[Link] "Web", acToolbarYes
End Sub
Sub SymbolleisteAusblenden()
[Link] "Web", acToolbarNo
End Sub
Listing 173: Symbolleiste ein- und ausblenden
Sandini Bib
204 Die Access-Objekte
156 SQL-Anweisungen absetzen
ber die Methode RunSQL knnen Sie eine SQL-Anweisung absetzen, um Abfragen zu starten.
Dabei sind Anfgeabfragen, Lschabfragen, Tabellenerstellungsabfragen sowie Aktualisie-
rungsabfragen mglich. Die Syntax dieser Methode lautet:
[Link](SQLAnweisung, TransaktionVerwenden)
Im folgenden Beispiel aus Listing 174 wird die Methode RunSQL eingesetzt, um in der Tabelle
Kunden im Feld Position alle Vorkommen von Inhaber in Chef umzusetzen.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
SQLAnweisung
Erforderlich. Ein Zeichenfolgenausdruck, der einer gltigen
SQL-Anweisung fr eine Aktionsabfrage oder eine Datendefini-
tionsabfrage entspricht. Verwendet werden kann eine der fol-
genden Anweisungen: INSERT INTO, DELETE, SELECT...INTO, UPDATE,
CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX oder DROP
INDEX. Fgen Sie eine in-Klausel hinzu, wenn Sie auf eine andere
Datenbank zugreifen mchten.
TransaktionVerwenden
Optional. Verwenden Sie True, um diese Abfrage in eine Trans-
aktion einzubinden, oder False, wenn Sie keine Transaktion
durchfhren mchten.
Tabelle 69: Die Argumente der Methode RunSQL
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub SQLAnweisungStarten()
Dim strSQL As String
On Error GoTo fehler
strSQL = "UPDATE Kunden " & _
"SET [Link] = 'Chef' " & _
"WHERE [Link] = 'Inhaber'"
[Link] strSQL
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 174: Eine SQL-Anweisung absetzen
Sandini Bib
Fenstergre festlegen 205
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
157 Fenstergre festlegen
Mithilfe der Methode MoveSize knnen Sie die Fensterbreite des Access-Fensters einstellen.
Die Syntax dieser Methode lautet:
[Link](Rechts, Unten, Breite, Hhe)
Im folgenden Beispiel aus Listing 175 wird das Formular KUNDEN beim Aufruf in der Gre
angepasst. Dazu stellen Sie das Ereignis Form_Open ein.
Zur Manipulation der Fenstergre stehen noch weitere Methoden zur Verfgung: Mithilfe
der Methode Maximize knnen Sie ein Fenster so weit vergrern, dass es das ganze Access-
Fenster ausfllt. Diese Methode hat keine weiteren Argumente.
ber die Methode Minimize knnen Sie das aktive Fenster auf eine kleine Titelleiste unten im
Microsoft Access-Fenster reduzieren. Diese Methode hat keine weiteren Argumente.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Rechts
Optional. Die neue horizontale Position der oberen linken Ecke des
Fensters, gemessen vom linken Rand des umgebenden Fensters.
Unten
Optional. Die neue vertikale Position der oberen linken Ecke des
Fensters, gemessen vom oberen Rand des umgebenden Fensters.
Breite
Optional. Legt die neue Breite des Fensters fest.
Hhe
Optional. Legt die neue Hhe des Fensters fest.
Tabelle 70: Die Argumente der Methode MoveSize
H
i
n
w
e
i
s
Die Maeinheit fr die Argumente lautet Twips. (Twip: eine Maeinheit, die 1/20 eines
Punkts oder 1/1440 eines Zolls entspricht. 567 Twips sind ein Zentimeter.)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Formular Form_Kunden
'=====================================================
Private Sub Form_Open(Cancel As Integer)
[Link] 100, 100, 8000, 6000
End Sub
Listing 175: Formulargre anpassen
Sandini Bib
206 Die Access-Objekte
Im folgenden Beispiel aus Listing 176 wird ein Bericht aufgerufen und das Fenster maxi-
miert.
Eine weitere Methode ist im gleichen Atemzug zu nennen: Sie knnen die Methode Restore
verwenden, um die vorherige Gre eines maximierten oder minimierten Fensters wieder-
herzustellen. Diese Methode hat keine weiteren Argumente.
Im Beispiel aus Listing 177 wird folgendes Standardverhalten von Access deaktiviert. Wenn
Sie ein beliebiges Formular ffnen, dieses dann maximieren und anschlieend schlieen,
dann werden auch andere Formulare, die Sie danach ffnen, in der Maximalansicht ange-
zeigt. Um dies zu verhindern, wenden Sie das Close-Ereignis des Formulars an.
158 Datenbankinhalte transferieren
Mithilfe der Methode TransferDatabase knnen Sie Daten zwischen der aktuellen Datenbank
und einer anderen Datenbank austauschen. Die Syntax dieser Methode lautet:
[Link](Transfertyp, Datenbanktyp, Datenbankname, Objekttyp, Quelle,
Ziel, NurStruktur, AnmeldungSpeichern)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub FensterMaximieren()
On Error GoTo fehler
[Link] "Rechnngen", acPreview
[Link]
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 176: Fenster maximieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Formular Form_Kunden
'=====================================================
Private Sub Form_Close()
[Link]
End Sub
Listing 177: Formulargre beim Schlieen wieder zurcksetzen
Sandini Bib
Datenbankinhalte transferieren 207
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 178 wird der Bericht RECHNUNG aus der Datenbank
[Link] in die aktuell geffnete Datenbank transferiert und unter dem Namen
RechnungNeu gespeichert.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Transfertyp
Optional. Legt den Transfertyp fest. Es stehen dabei folgende
Typen zur Verfgung: acExport, acImport (Standard), acLink
Datenbanktyp
Optional. Gibt den Namen der Datenbanktypen an, die zum
Importieren, Exportieren oder Verknpfen von Daten verwendet
werden knnen. Standardwert ist hier Microsoft Access. Weitere
mgliche Typen knnen Sie der Online-Hilfe entnehmen.
Datenbankname
Optional. Gibt den vollstndigen Namen und Pfad der Datenbank
an, die zum Importieren, Exportieren oder Verknpfen von Daten
verwendet werden soll.
Objekttyp
Optional. Legt den Objekttyp fest.
Quelle
Optional. Gibt den Namen des Objekts an, dessen Daten impor-
tiert, exportiert oder verknpft werden sollen.
Ziel
Optional. Gibt den Namen des importierten, exportierten oder
verknpften Objekts in der Zieldatenbank an.
NurStruktur
Optional. Verwenden Sie True, um nur die Struktur einer Daten-
banktabelle zu importieren oder zu exportieren. Verwenden Sie
False, um die Struktur der Tabelle sowie deren Daten zu impor-
tieren oder zu exportieren.
AnmeldungSpeichern
Optional. Verwenden Sie True, um in der Verbindungszeichenfolge
einer verknpften Tabelle den Benutzernamen (ID) und das
Kennwort fr eine ODBC-Datenbank zu speichern, zu der die
Tabelle gehrt. Auf diese Weise entfllt die Anmeldung beim ff-
nen der Tabelle. Verwenden Sie False, wenn Sie den Benutzer-
namen und das Kennwort nicht speichern mchten.
Tabelle 71: Die Argumente der Methode TransferDatabase
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub BerichtTransferieren()
On Error GoTo fehler
Listing 178: Einen Bericht in eine andere Datenbank transferieren
Sandini Bib
208 Die Access-Objekte
Im nchsten Beispiel aus Listing 179 wird aus der Datenbank [Link] die Tabelle Personal
in die aktuell geffnete Datenbank verlinkt und mit dem Namen PersonalGelinkt gesichert.
159 Tabellen transferieren
Mithilfe der Methode TransferSpreadsheet knnen Sie Daten aus einer Access-Tabelle bei-
spielsweise in eine Excel-Tabelle bertragen. Die Syntax dieser Methode lautet:
[Link](Transfertyp, Dateiformat, Tabellenname, Dateiname,
BesitztFeldnamen, Bereich)
[Link] acImport, _
"Microsoft Access", _
"C:\Eigene Dateien\[Link]", acReport, _
"Rechnung", "RechnungNeu"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TabelleTransferierenUndLinken()
On Error GoTo fehler
[Link] acLink, _
"Microsoft Access", _
"C:\Eigene Dateien\[Link]", acTable, _
"Personal", "PersonalGelinkt"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 179: Tabelle transferieren und linken
Listing 178: Einen Bericht in eine andere Datenbank transferieren (Forts.)
Sandini Bib
Tabellen transferieren 209
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 180 wird die Access-Tabelle Artikel in eine Excel 2000-
Tabelle berfhrt.
Abbildung 95: Die verlinkte Tabelle erkennen Sie am Pfeilsymbol.
Argument Beschreibung
Ausdruck Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Transfertyp Optional. Gibt an, welchen Transfer Sie genau durchfhren mchten.
Sie haben dabei die Auswahl zwischen dem Export (acExport), dem
Import (acImport) oder einer Verknpfung (acLink).
Dateiformat Optional. Gibt an, in welcher Excel-Version (bzw. Lotus-Version) Sie
die Access-Tabelle exportieren mchten.
Tabellenamen Optional. Gibt den Namen der zu exportierenden Access-Tabelle an.
Dateinamen Optional. Gibt das Ziel fr den Datenexport bekannt. Dabei muss die
angegebene Datenquelle nicht einmal existieren. Access legt diese neu
fr Sie an.
BesitztFeldnamen Optional. Verwenden Sie den Wert True, um die erste Zeile der Kalku-
lationstabelle beim Importieren, Exportieren oder Verknpfen zur
Angabe der Feldnamen zu verwenden. Verwenden Sie hingegen den
Wert False, wenn die erste Zeile als normale Datenzeile gelten soll.
Wenn Sie dieses Argument nicht angeben, wird der Standardwert
False verwendet.
Bereich Diese Argument gilt nur fr Importoperationen und darf beim
Export nicht angegeben werden. Beim Import werden standardmig
alle Datenstze importiert, sofern dieses Argument nicht gesetzt wird.
Tabelle 72: Die Argumente der Methode TransferSpreadsheet
Sandini Bib
210 Die Access-Objekte
160 Texte exportieren und importieren
Mithilfe der TransferText-Methode knnen Sie Text zwischen der aktuellen Microsoft
Access-Datenbank und einer Textdatei importieren oder exportieren. Die Syntax dieser
Methode lautet:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TabelleTransferieren()
On Error GoTo fehler
[Link] acExport, _
acSpreadsheetTypeExcel9, "Artikel", _
"C:\Eigene Dateien\[Link]", True
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 180: Eine Datentabelle als Excel-Tabelle exportieren
Abbildung 96: Das Ergebnis liegt in einer Excel-Tabelle vor.
Sandini Bib
Texte exportieren und importieren 211
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
[Link](Transfertyp, Spezifikationsname, Tabellenname, Dateiname,
BesitztFeldnamen, HTML-Tabellenname, Codepage)
Im folgenden Beispiel aus Listing 181 wird eine Tabelle als Textdatei exportiert.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der ein DoCmd-Objekt zurckgibt.
Transfertyp Optional. Es stehen folgende Typen zur Verfgung:
acExportDelim, acExportFixed, acExportHTML, acExportMerge,
acImportDelim (Standard), acImportFixed, acImportHTML,
acLinkDelim, acLinkFixed, acLinkHTML
Spezifikationsname Optional. Ein Zeichenfolgenausdruck, der den Namen einer
Import- oder Exportspezifikation angibt, die Sie in der aktuellen
Datenbank erstellt und gespeichert haben. Bei einer Textdatei mit
fester Zeilenlnge mssen Sie entweder ein Argument angeben
oder eine Schemadatei ([Link]) verwenden, die in demsel-
ben Ordner wie die importierte, verknpfte oder exportierte
Textdatei gespeichert sein muss.
Tabellenname Optional. Legt den Namen einer Microsoft Access-Tabelle zum
Importieren, Exportieren oder Verknpfen von Textdaten fest.
Dateiname Optional. Legt den vollstndigen Namen und den Pfad der Text-
datei an, die zum Importieren, Exportieren oder Verknpfen von
Daten verwendet werden soll.
BesitztFeldnamen Optional. Verwenden Sie True, um die erste Zeile der Textdatei
beim Importieren, Exportieren oder Verknpfen zur Angabe der
Feldnamen zu verwenden. Verwenden Sie False, wenn die erste
Zeile als normale Datenzeile gelten soll.
HTML-Tabellenname Optional. Gibt den Namen der Tabelle oder Liste in der HTML-
Datei an, die Sie importieren oder verknpfen mchten. Dieses
Argument wird nur dann beachtet, wenn das Argument Trans-
fertyp auf acImportHTML oder acLinkHTML festgelegt ist.
Codepage Optional. Ein Wert des Typs Long, der den Zeichensatz der Code-
page angibt.
Tabelle 73: Die Argumente der Methode TransferText
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Listing 181: Tabelle in Textdatei exportieren
Sandini Bib
212 Die Access-Objekte
Beim Import von Textdateien mssen Sie vorher eine Importspezifikation erstellen. Dazu
sind folgende Schritte notwenig:
1. Whlen Sie aus dem Men DATEI den Befehl EXTERNE DATEN/IMPORTIEREN.
2. Im Dialogfeld IMPORTIEREN whlen Sie die Textdatei aus, die Sie in eine Access-Tabelle
importieren mchten.
3. Klicken Sie auf die Schaltflche IMPORTIEREN.
4. Aktivieren Sie im Textimport-Assistenten die gewnschte Option. Da bei der Textdatei
[Link] keine feste Feldbreite vorliegt und Sie das Semikolon als Trennzeichen vorfin-
den, aktivieren Sie in diesem Beispiel die erste Option.
5. Klicken Sie danach auf die Schaltflche WEITERE (bitte nicht verwechseln mit WEITER!).
6. Im Gruppenfeld FELDINFORMATION hat Access anhand der Textdatei [Link] bereits die
Felder vom Datentyp her gesehen fr Sie automatisch vordefiniert. Diese Information
knnen Sie natrlich noch anpassen, wenn es ntig ist. In der Spalte BERSPRINGEN kn-
nen Sie einzelne Datenfelder der Textdatei berspringen, d.h., wenn Sie einzelne Felder
dort aktivieren, werden diese nicht mit in die Tabelle bernommen.
7. Klicken Sie auf die Schaltflche SPEICHERN, um die Importspezifikation zu sichern.
8. Geben Sie der Importspezifikation einen Namen und besttigen Sie mit OK. Merken Sie
sich diesen Namen, den Sie spter fr Ihr Makro bentigen.
9. Klicken Sie danach auf die Schaltflche OK, um das Dialogfeld ARTIKEL IMPORTSPEZIFI-
KATIONEN zu schlieen.
10. Im Textimport-Assistenten wieder angekommen, klicken Sie auf WEITER, um zum nchs-
ten Importschritt zu gelangen.
11. bergehen Sie auch den nchsten Schritt mit einem Klick auf die Schaltflche WEITER.
12. Um die Textdatei in einer neuen Tabelle zu speichern, aktivieren Sie die Option IN EINER
NEUEN TABELLE.
13. Klicken Sie danach auf WEITER.
Sub TextExportieren()
On Error GoTo fehler
[Link] acExportDelim, , _
"Artikel", "C:\Eigene Dateien\[Link]"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 181: Tabelle in Textdatei exportieren (Forts.)
Sandini Bib
Das Reference-Objekt 213
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
14. In diesem Schritt knnen Sie noch einmal festlegen, wie die einzelnen Felder definiert
werden sollen. Da Sie diese Aufgabe aber bereits vorher ber die Importspezifikation
erledigt haben, klicken Sie auf die Schaltflche WEITER.
15. Im nchsten Schritt des Assistenten knnen Sie festlegen, ob Sie einen Primrschlssel
anlegen mchten. Dabei knnen Sie diese Aufgabe von Access selbst ausfhren lassen.
Klicken Sie danach auf WEITER.
16. Geben Sie an, in welche Tabelle Sie die Textdatei einfgen mchten. Sollte diese Tabelle
noch nicht existieren, wird diese von Access automatisch angelegt.
17. Klicken Sie abschlieend auf die Schaltflche FERTIG STELLEN.
Jetzt knnen Sie das Makro fr den Import einer Textdatei schreiben.
161 Das Reference-Objekt
Das Objekt Reference stellt einen Verweis auf die Typbibliothek einer anderen Anwendung
oder eines anderen Projekts dar.
162 Bibliotheken auslesen
ber die References-Auflistung knnen Sie alle eingebundenen Bibliotheken in der Entwick-
lungsumgebung abarbeiten.
Im folgenden Beispiel aus Listing 183 werden alle eingebundenen Bibliotheken der Entwick-
lungsumgebung im Direktfenster aufgelistet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlDoCmd
'=====================================================
Sub TextImportieren()
On Error GoTo fehler
[Link] acImportDelim, _
"ArtikelImportspezifikation", _
"ArtikelX", _
"C:\Eigene Dateien\[Link]", False
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 182: Textdatei importieren
Sandini Bib
214 Die Access-Objekte
In einer Schleife arbeiten Sie alle Bibliotheken ab. Innerhalb der Schleife ermitteln Sie den
Namen sowie den kompletten Pfad der Bibliothek, indem Sie die Eigenschaft FullName einset-
zen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlRef
'=====================================================
Sub BibliothekenDokumentieren()
Dim intZ As Integer
For intZ = 1 To [Link]
[Link] References(intZ).FullPath
Next intZ
End Sub
Listing 183: Eingebundene Bibliotheken auslesen
Abbildung 97: Alle aktiven Bibliotheken auslesen
H
i
n
w
e
i
s
In Kapitel 9 knnen Sie nachschlagen, wie Sie mithilfe der VBE-Programmierung noch
weiter gehende Aufgaben schnell erledigen knnen.
Sandini Bib
Office-Assistenten einsetzen 215
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
163 Office-Assistenten einsetzen
Der Office-Assistent wird im Makro aus Listing 184 dafr eingesetzt, um den Ablauf einer
VBA-Schulung darzustellen.
Im Makro aus Listing 184 werden einige Methoden und Eigenschaften eingesetzt, die jetzt
erlutert werden sollen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlBal
'=====================================================
Sub OfficeAssistentenAufrufen()
Dim OffAss As Balloon
Set OffAss = [Link]
With OffAss
.Heading = "Office-Assistent"
.Icon = msoIconTip
.Mode = msoModeAutoDown
.BalloonType = msoBalloonTypeButtons
.Labels(1).Text = "Tag 1: VBA-Grundlagen"
.Labels(2).Text = "Tag 2: Einfache Programmiertechnken"
.Labels(3).Text = "Tag 3: Komplexere Programmiertechniken"
.Animation = msoAnimationGreeting
.Button = msoButtonSetOK
.Show
End With
Set OffAss = Nothing
End Sub
Listing 184: Der Aufruf des Office-Assistenten
Abbildung 98: Der Office-Assistent wird aufgerufen.
Sandini Bib
216 Die Access-Objekte
ber die Eigenschaft Heading knnen Sie den Titel in einem Balloon-Objekt festlegen.
Die Eigenschaft Icon gibt den Symboltyp zurck, der im unteren linken Abschnitt der
Sprechblase des Office-Assistenten erscheint. Dabei stehen folgende Konstanten aus Tabelle
74 zur Verfgung:
Die Eigenschaft Mode gibt das modale Verhalten der Sprechblase des Office-Assistenten
zurck oder legt es fest. Dabei stehen die folgenden Konstanten aus Tabelle 75 zur Verfgung.
Die Eigenschaft BalloonType gibt den Sprechblasentyp zurck, den der Office-Assistent
verwendet, oder legt ihn fest. Dabei werden die Aufzhlungszeichen festgelegt. Sie knnen
folgende Konstanten aus der Tabelle 76 einsetzen.
Konstante Symbol
msoIconAlert
Gelbes Ausrufezeichen
msoIconAlertCritical
Rotes X-Symbol
msoIconAlertInfo
Info
msoIconAlertQuery
Fragezeichen
msoIconAlertWarning
Gelbes Ausrufezeichen
msoIconNone
Kein Symbol
msoIconTip
Glhbirne
Tabelle 74: Die Konstanten fr das Symbol eines Ballons
Konstante Beschreibung
msoModeAutoDown
Die Sprechblase wird geschlossen, sobald der Benutzer auf eine
beliebige Stelle des Bildschirms klickt.
msoModeModal
Der Anwender muss die Sprechblase schlieen, bevor er die
Arbeit in der Anwendung fortsetzen kann.
msoModeModeless
Der Anwender kann in der Anwendung weiterarbeiten, whrend
die Sprechblase sichtbar ist.
Tabelle 75: Die Konstanten der Eigenschaft Mode
Konstante Aufzhlungszeichen
msoBalloonTypeBullets
Kleine Punkte
msoBalloonTypeButtons
Grere Punkte
msoBalloonTypeNumbers
Numerische
Tabelle 76: Die Konstanten der Eigenschaft BalloonType
Sandini Bib
Office-Assistenten einsetzen 217
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Eigenschaft Labels legt die Beschriftungen fr die Schaltflchen, Nummerierungen und
Aufzhlungen in einer Sprechblase des Office-Assistenten fest.
Die Eigenschaft Animation gibt die Animationsaktion des Office-Assistenten zurck oder legt
sie fest. Insgesamt stehen eine ganze Reihe von Animationen zur Verfgung. Je nach einge-
stelltem Assistenten wird die eine oder andere Animation nicht angezeigt.
Konstante
msoAnimationAppear
msoAnimationBeginSpeaking
msoAnimationCharacterSuccessMajor
msoAnimationCheckingSomething
msoAnimationDisappear
msoAnimationEmptyTrash
msoAnimationGestureDown
msoAnimationGestureLeft
msoAnimationGestureRight
msoAnimationGestureUp
msoAnimationGetArtsy
msoAnimationGetAttentionMajor
msoAnimationGetAttentionMinor
msoAnimationGetTechy
msoAnimationGetWizardy
msoAnimationGoodbye
msoAnimationGreeting
msoAnimationIdle
msoAnimationListensToComputer
msoAnimationLookDown
msoAnimationLookDownLeft
msoAnimationLookDownRight
msoAnimationLookLeft
msoAnimationLookRight
msoAnimationLookUp
msoAnimationLookUpLeft
msoAnimationLookUpRight
msoAnimationPrinting
msoAnimationRestPose
msoAnimationSaving
msoAnimationSearching
msoAnimationSendingMail
msoAnimationThinking
Tabelle 77: Die Konstanten fr die Eigenschaft Animation
Sandini Bib
218 Die Access-Objekte
Die Eigenschaft Button gibt die Art der unten in der Sprechblase des Office-Assistenten ange-
zeigten Schaltflche zurck oder legt sie fest. Dabei knnen Sie folgende Konstanten aus der
Tabelle 78 verwenden.
Die Methode Show zeigt das angegebene Balloon-Objekt an.
Die Frage, welche Schaltflche im Office-Assistenten angeklickt wurde, beantwortet die
Tabelle 79.
msoAnimationWorkingAtSomething
msoAnimationWritingNotingSomething
Argument Schaltflchen
msoButtonSetAbortRetryIgnore
ABBRECHEN, IGNORIEREN UND WIEDERHOLEN
msoButtonSetBackClose
ZURCK UND SCHLIESSEN
msoButtonSetBackNextClose
ZURCK, WEITER, SCHLIESSEN
msoButtonSetBackNextSnooze
ZURCK, WEITER, ERNEUT ERINNERN
msoButtonSetCancel
ABBRECHEN
msoButtonSetNextClose
WEITER, SCHLIESSEN
msoButtonSetNone
KEINE SCHALTFLCHE
msoButtonSetOK
OK
msoButtonSetOkCancel
OK UND ABBRECHEN
msoButtonSetRetryCancel
WIEDERHOLEN, ABBRECHEN
msoButtonSetSearchClose
SUCHEN, SCHLIESSEN
msoButtonSetTipsOptionsClose
TIPPS, OPTIONEN, SCHLIESSEN
msoButtonSetYesAllNoCancel
JA, JA ALLE, ABBRECHEN, SCHLIESSEN
msoButtonSetYesNo
JA, NEIN
msoButtonSetYesNoCancel
JA, NEIN, ABBRECHEN
Tabelle 78: Die Konstanten fr die Schaltflchen eines Ballons
Konstante Schaltflche
msoBalloonButtonAbort
ABBRECHEN
msoBalloonButtonBack
ZURCK
msoBalloonButtonCancel
ABBRECHEN
msoBalloonButtonClose
SCHLIESSEN
Tabelle 79: Die Rckgabekonstanten der Methode Show
Konstante
Tabelle 77: Die Konstanten fr die Eigenschaft Animation (Forts.)
Sandini Bib
Office-Assistenten einsetzen 219
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Beim folgenden Beispiel aus Listing 185 soll ermittelt werden, welche der Schaltflchen vom
Anwender angeklickt wurde.
msoBalloonButtonIgnore
IGNORIEREN
msoBalloonButtonNext
NCHSTE
msoBalloonButtonNo
NEIN
msoBalloonButtonNull
NULL
msoBalloonButtonOK
OK
msoBalloonButtonOptions
OPTIONEN
msoBalloonButtonRetry
WIEDERHOLEN
msoBalloonButtonSearch
SUCHEN
msoBalloonButtonSnooze
ERNEUT ERINNERN
msoBalloonButtonTips
TIPPS
msoBalloonButtonYes
JA
msoBalloonButtonYesToAll
ALLE JA
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlBal
'=====================================================
Sub Entscheidung()
Dim OffAss As Balloon
Set OffAss = [Link]
With OffAss
.Heading = "Whlen Sie eine Variante aus"
.Labels(1).Text = "VarianteA"
.Labels(2).Text = "VarianteB"
.Button = msoButtonSetOkCancel
If .Show = msoBalloonButtonOK Then
MsgBox "Schaltflche OK geklickt!"
Else
MsgBox "Schaltflche Abbrechen geklickt!"
End If
End With
End Sub
Listing 185: Schaltflche beim Office-Assistenten auswerten
Konstante Schaltflche
Tabelle 79: Die Rckgabekonstanten der Methode Show (Forts.)
Sandini Bib
220 Die Access-Objekte
164 Datei kopieren
Mithilfe der Methode CopyFile knnen Sie eine oder mehrere Dateien von einem Ort an
einen anderen kopieren. Die Syntax dieser Methode lautet:
[Link] Quelle, Ziel[, berschreiben]
Im folgenden Beispiel aus Listing 186 wird die Excel-Arbeitsmappe [Link] aus dem
Route-Verzeichnis der Festplatte in das Verzeichnis C:\Eigene Dateien kopiert.
Abbildung 99: Die Auswertung der Schaltflche findet direkt nach dem Klick statt.
Teil Beschreibung
Objekt Erforderlich. Das Objekt ist immer der Name eines
FileSystemObject.
Quelle Erforderlich. Zeichenfolge fr die Dateispezifikation fr eine
oder mehrere zu kopierende Dateien, die Platzhalterzeichen
enthalten kann.
Ziel Erforderlich. Zeichenfolge fr das Ziel, an das die Datei(en)
aus Quelle kopiert werden soll(en). Platzhalterzeichen sind
nicht zulssig.
berschreiben Optional. Boolescher Wert, der angibt, ob vorhandene
Dateien berschrieben werden sollen. Wenn er True ist, wer-
den die Dateien berschrieben; ist er False, werden sie nicht
berschrieben. Die Voreinstellung ist True. Beachten Sie, dass
CopyFile unabhngig vom Wert fr berschreiben fehlschlgt,
wenn fr Ziel das schreibgeschtzte Attribut festgelegt
wurde.
Tabelle 80: Die Argumente der Methode CopyFile
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Listing 186: Einzelne Datei kopieren
Sandini Bib
Datei verschieben 221
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Sollen gleich mehrere Dateien, beispielsweise alle Excel-Mappen, von einem Verzeichnis in
ein anderes kopiert werden, dann starten Sie das Makro aus Listing 187.
165 Datei verschieben
Mithilfe der Methode MoveFile knnen Sie eine oder mehrere Dateien von einem Ort an
einen anderen verschieben. Die Syntax dieser Funktion lautet:
[Link] Quelle, Ziel
Sub DateiKopieren()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\[Link]", "C:\Eigene Dateien\"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateienKopieren()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\*.xls", "C:\Eigene Dateien\"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 187: Mehrere Dateien kopieren
Listing 186: Einzelne Datei kopieren (Forts.)
Sandini Bib
222 Die Access-Objekte
Im Makro aus Listing 188 wird die Datei [Link] von einem Verzeichnis in ein anderes
verschoben.
Auch hier knnen wieder mehrere Dateien von einem Verzeichnis in ein anderes verschoben
werden, wie Listing 189 zeigt.
Teil Beschreibung
Objekt
Erforderlich. Immer der Name eines FileSystemObject.
Quelle
Erforderlich. Der Pfad der zu verschiebenden Datei(en). Die
Zeichenfolge des Arguments Quelle kann nur in der letzten
Pfadkomponente Platzhalterzeichen enthalten.
Ziel
Erforderlich. Der Pfad zu dem Ort, an den die Datei(en) ver-
schoben werden soll(en). Das Argument Ziel kann keine Platz-
halterzeichen enthalten.
Tabelle 81: Die Argumente der Methode MoveFile
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiVerschieben()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\[Link]", "C:\Eigene Dateien\"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 188: Einzelne Datei verschieben
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Listing 189: Mehrere Dateien verschieben
Sandini Bib
Datei lschen 223
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
166 Datei lschen
ber den Einsatz der Methode DeleteFile knnen Sie eine angegebene Datei lschen. Die
Syntax dieser Methode lautet:
[Link] Dateispez[, erzwingen]
Im Makro aus Listing 190 wird eine Datei ohne Rckfrage von der Festplatte entfernt.
Sub DateienVerschieben()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\*.xls", "C:\Eigene Dateien\"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Teil Beschreibung
Objekt
Erforderlich. Immer der Name eines FileSystemObject.
Dateispez
Erforderlich. Der Name der zu lschenden Datei. Die Dateispez
kann in der letzten Pfadkomponente Platzhalterzeichen ent-
halten.
Erzwingen
Optional. Boolescher Wert, der True ist, wenn Dateien mit
Schreibschutzattribut gelscht werden sollen, bzw. False
(Voreinstellung), wenn sie nicht gelscht werden sollen.
Tabelle 82: Die Argumente der Methode DeleteFile
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiEntfernen()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\Eigene Dateien\[Link]"
Exit Sub
Listing 190: Einzelne Datei lschen
Listing 189: Mehrere Dateien verschieben (Forts.)
Sandini Bib
224 Die Access-Objekte
Im folgenden Beispiel aus Listing 191 werden alle Dateien aus dem temporren Verzeichnis
C:\Windows\Temp gelscht.
167 Dateiexistenz prfen
Mithilfe der Methode FileExists knnen Sie berprfen, ob eine bestimmte Datei in einem
Verzeichnis berhaupt existiert.
Im Beispiel aus Listing 192 wird berprft, ob die Datei [Link] im Verzeichnis C:\Eigene
Dateien enthalten ist.
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateienEntfernen()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\Windows\Temp\*.*"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 191: Alle Dateien in einem Verzeichnis lschen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DateiDa()
Dim fs As Object
Set fs = CreateObject("[Link]")
Listing 192: Dateiexistenz berprfen
Listing 190: Einzelne Datei lschen (Forts.)
Sandini Bib
Dateiinfo abfragen 225
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Methode FileExists meldet den Wert True zurck, wenn die Datei im angegebenen Ver-
zeichnis gefunden werden kann.
168 Dateiinfo abfragen
Im folgenden Beispiel aus Listing 193 ermitteln Sie mithilfe des FileSystem-Objekts die Datei-
eigenschaften Erstellungsdatum, letzte nderung und letzter Zugriff auf die Datei. Dabei kom-
men die Eigenschaften DateCreated, DateLastModified und DateLastAccessed zum Einsatz.
If [Link]("C:\Eigene Dateien\[Link]") = True Then
MsgBox "Datei existiert!"
Else
MsgBox "Datei existiert nicht!"
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub DatenbankInfosErmitteln()
Dim fs As Object
Dim f As Object
Dim strDatei As String
strDatei = "C:\Eigene Dateien\[Link]"
Set fs = CreateObject("[Link]")
Set f = [Link](strDatei)
[Link] "Erstellt : " & [Link]
[Link] "Letzter Zugriff: " & [Link]
[Link] "Letzte nderung: " & [Link]
End Sub
Listing 193: Dateiinformationen abfragen
Abbildung 100: Die wichtigsten Informationen zur Datei
Listing 192: Dateiexistenz berprfen (Forts.)
Sandini Bib
226 Die Access-Objekte
169 Verzeichnis anlegen
ber die Methode CreateFolder knnen Sie ein neues Verzeichnis anlegen. Im Makro aus
Listing 194 wird der neue Ordner Kopie angelegt.
170 Verzeichnis lschen
Die Methode DeleteFolder lscht einen angegebenen Ordner und seinen Inhalt. Die Syntax
dieser Methode lautet:
[Link] Ordnerspez[, erzwingen]
Im folgenden Beispiel aus Listing 195 wird der Ordner Kopie ohne Rckfrage entfernt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub OrdnerErstellen()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\Eigene Dateien\Kopie"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 194: Neuen Ordner anlegen
Teil Beschreibung
Objekt
Erforderlich. Immer der Name eines FileSystemObject.
Ordnerspez
Erforderlich. Der Name des zu lschenden Ordners. Die Ordnerspez
kann in der letzten Pfadkomponente Platzhalterzeichen enthalten.
Erzwingen
Optional. Boolescher Wert, der True ist, wenn Ordner mit Schreib-
schutzattribut gelscht werden sollen, bzw. False (Voreinstellung),
wenn sie nicht gelscht werden sollen
Tabelle 83: Die Argumente der Methode DeleteFolder
Sandini Bib
Ordnerexistenz prfen 227
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
171 Ordnerexistenz prfen
ber den Einsatz der Methode FolderExists knnen Sie testen, ob ein Verzeichnis existiert.
Die Methode gibt den Wert True zurck, wenn ein angegebener Ordner vorhanden ist, bzw.
den Wert False, wenn dies nicht der Fall ist. Die Syntax dieser Methode lautet:
[Link](Ordnerspez)
Im Makro aus Listing 196 wird berprft, ob der Ordner C:\Eigene Dateien\Kopie existiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub OrdnerEntfernen()
Dim fs As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
[Link] "C:\Eigene Dateien\Kopie"
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 195: Ordner entfernen
Teil Beschreibung
Objekt
Erforderlich. Immer der Name eines FileSystemObject.
Ordnerspez
Erforderlich. Der Name des Ordners, von dem Sie wissen mch-
ten, ob er existiert. Sie mssen eine (entweder absolute oder
relative) vollstndige Pfadangabe machen, wenn Sie davon aus-
gehen, dass der Ordner nicht im aktuellen Ordner vorhanden
ist.
Tabelle 84: Die Argumente der Methode FolderExists
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Listing 196: Ordnerexistenz berprfen
Sandini Bib
228 Die Access-Objekte
172 Ordnergre ermitteln
Soll die Gre eines Ordners ermittelt werden, um beispielsweise festzustellen, ob der Inhalt
des Ordners auf eine Diskette bzw. einen Datenstick passt, dann setzen Sie die Eigenschaft
Size ein.
Im Beispiel aus Listing 197 wird die Gre des Ordners C:\Eigene Dateien in Mbyte ermittelt.
Die Grenangabe wird in Byte ausgegeben. Um daraus Kilobyte zu machen, teilen Sie das
Ergebnis durch 1024. Sollen daraus Mbyte gemacht werden, dann teilen Sie wiederum durch
1024. Runden Sie das Ergebnis auf zwei Stellen hinter dem Komma, indem Sie die Funktion
Round einsetzen.
Sub OrdnerDa()
Dim fs As Object
Set fs = CreateObject("[Link]")
If [Link]("C:\Eigene Dateien\Kopie") = True Then
MsgBox "Ordner existiert!"
Else
MsgBox "Ordner existiert nicht!"
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub OrdnerGreErmitteln()
Dim fs As Object
Dim fsOrdner As Object
On Error GoTo fehler
Set fs = CreateObject("[Link]")
Set fsOrdner = [Link]("C:\Eigene Dateien\Kopie")
MsgBox "Der Ordner hat eine Gre von " & _
Round([Link] / 1024 / 1024, 2) & " MByte", vbInformation
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 197: Die Ordnergre ermitteln
Listing 196: Ordnerexistenz berprfen (Forts.)
Sandini Bib
Ordner listen 229
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
173 Ordner listen
Wenn Sie mit Verzeichnissen arbeiten, dann sollten Sie auch eine Makrolsung haben, die
berprft, ob in einem Verzeichnis noch weitere Unterverzeichnisse existieren. Diese Auf-
gabe knnen Sie beispielsweise ber eine Funktion erledigen. bergeben Sie dieser Funktion
den Namen des Verzeichnisses, das Sie auslesen mchten und schreiben Sie alle Namen der
Unterverzeichnisse in den Direktbereich der Entwicklungsumgebung von Access. Sehen Sie
sich dazu das Listing 198 an.
ber das Makro VerzeichnisstrukturAuslesen wird die Funktion OrdnerDuchsuchen aufgeru-
fen. Dabei wird das gewnschte Verzeichnis an die Funktion bergeben. Innerhalb der Funk-
tion wird eine Schleife durchlaufen, in der jedes Unterverzeichnis ermittelt wird. Mit der
Anweisung [Link] wird der Name des jeweiligen Unterverzeichnisses in den Direkt-
bereich der Entwicklungsumgebung geschrieben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Function OrdnerDurchsuchen(strV As String) As Boolean
Dim fs As Object
Dim objOrdner As Object
Dim Ordner As Object
Dim intz As Integer
intz = 0
Set fs = CreateObject("[Link]")
Set objOrdner = [Link](strV)
For Each Ordner In [Link]
[Link] "Ordner " & intz & ": " & [Link]
intz = intz + 1
Next
Set objOrdner = Nothing
Set objFSO = Nothing
End Function
Sub VerzeichnisStrukturAuslesen()
Dim b As Boolean
b = OrdnerDurchsuchen("C:\windows")
End Sub
Listing 198: Unterordner aus einem Verzeichnis auflisten lassen
Sandini Bib
230 Die Access-Objekte
174 Dateien auflisten
Mchten Sie alle Dateien eines Verzeichnisses ermitteln, dann erfassen Sie das Makro aus
Listing 199.
Abbildung 101: Alle Windows-Unterordner werden aufgelistet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Function OrdnerDurchsuchen2(strV As String) As Boolean
Dim fs As Object
Dim objOrdner As Object
Dim Datei As Object
Dim intz As Integer
intz = 1
Set fs = CreateObject("[Link]")
Set objOrdner = [Link](strV)
For Each Datei In [Link]
[Link] "Datei " & intz & ": " & [Link]
Listing 199: Alle Dateien aus einem Ordner auflisten
Sandini Bib
Laufwerke auslesen 231
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber das Makro DateienListen wird die Funktion OrdnerDurchsuchen2 aufgerufen. Dabei wird
das gewnschte Verzeichnis an die Funktion bergeben. Innerhalb der Funktion wird eine
Schleife durchlaufen, in der jede Datei ermittelt wird. Mit der Anweisung [Link] wird
der Name des jeweiligen Unterverzeichnisses in den Direktbereich der Entwicklungsumge-
bung geschrieben.
175 Laufwerke auslesen
Neben einer API-Funktion, die Sie im vorherigen Kapitel nachschlagen knnen, gibt es auch
die Mglichkeit, die Laufwerkstypen ber das Objekt FileSystemObject zu ermitteln.
intz = intz + 1
Next
Set objOrdner = Nothing
Set objFSO = Nothing
End Function
Sub DateienListen()
Dim b As Boolean
b = OrdnerDurchsuchen2("C:\windows")
End Sub
Abbildung 102: Alle Dateien werden aufgelistet.
Listing 199: Alle Dateien aus einem Ordner auflisten (Forts.)
Sandini Bib
232 Die Access-Objekte
Im Makro aus Listing 200 werden alle Laufwerke Ihres Computers ausgelesen und deren
Laufwerkstypen festgestellt.
Mithilfe der Auflistung Drives, in der alle Laufwerke Ihres PCs automatisch verzeichnet sind,
knnen Sie mittels einer For each next-Schleife den Laufwerkstyp des jeweiligen Laufwerks
ber die Eigenschaft DriveType ermitteln. Dabei gelten folgende Zuordnungen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub LaufwerkeAuslesen()
Dim fs As Object
Dim fsObj As Object
Dim strText As String
On Error GoTo fehler
Set fs = CreateObject("[Link]")
For Each fsObj In [Link]
Select Case [Link]
Case 1
strText = "Disketten-Laufwerk/USB-Datenstick"
Case 2
strText = "Festplatte"
Case 3
strText = "Netzlaufwerk"
Case 4
strText = "CDROM-Laufwerk"
Case 5
strText = "RAM-Disk"
Case Else
strText = "nicht ermittelbar"
End Select
[Link] [Link] & " ist ein(e) " & strText
Next fsObj
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 200: Laufwerkstypen ermitteln und ausgeben
Sandini Bib
Weitere Laufwerkseigenschaften 233
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Eigenschaft DriveLetter knnen Sie den Laufwerksbuchstaben abfragen. Geben
Sie diese beiden Informationen ber die Anweisung [Link] im Direktfenster der Ent-
wicklungsumgebung aus.
176 Weitere Laufwerkseigenschaften
Im Makro aus Listing 201 knnen Sie weitere Laufwerkseigenschaften wie beispielsweise der
verfgbare bzw. der Gesamtspeicherplatz Ihrer Festplatte ermitteln.
Nummer Beschreibung
1 Diskette, USB-Datenstick oder etwas hnlich Auswechsel-
bares
2 Festplatte (fest eingebaut)
3 Netzlaufwerk
4 CD-ROM
5 RAM-Disk
Tabelle 85: Die DriveType-Eigenschaften im berblick
Abbildung 103: Die Laufwerkstypen wurden ermittelt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub LaufwerksEigenschaften()
Dim fs As Object
Dim fsObj As Object
Dim strText As String
On Error GoTo fehler
Set fs = CreateObject("[Link]")
For Each fsObj In [Link]
With fsObj
Listing 201: Weitere Laufwerkseigenschaften abfragen
Sandini Bib
234 Die Access-Objekte
Den Namen des Laufwerks, sofern einer vergeben wurde, knnen Sie ber die Eigenschaft
VolumeName abfragen. Die Gesamtkapazitt der Festplatte ermitteln Sie mithilfe der Eigen-
schaft TotalSize. Den momentan freien Speicher liefert die Eigenschaft FreeSpace. Beide
Angaben werde in Byte ausgegeben. Diese knnen Sie in Mbyte umrechnen, indem Sie das
Ergebnis durch 1048576 teilen. Da das Ergebnis noch diverse Nachkommastellen aufweist,
runden Sie dieses auf zwei Stellen hinter dem Komma mithilfe der Funktion Round. Das
Stammverzeichnis Ihrer Festplatte knnen Sie ber die Eigenschaft RootFolder abfragen. Die
Info ber das Dateisystem liefert Ihnen die Eigenschaft FileSystem.
Select Case .DriveType
Case 1
strText = "Disketten-Laufwerk/USB-Datenstick"
Case 2
strText = "Festplatte"
Case 3
strText = "Netzlaufwerk"
Case 4
strText = "CDROM-Laufwerk"
Case 5
strText = "RAM-Disk"
Case Else
strText = "nicht ermittelbar"
End Select
If .DriveType = 2 Then
[Link] "Laufwerksbuchstabe: " & _
.DriveLetter & " ----> " & strText
[Link] "Laufwerksname: " & .VolumeName
[Link] "Verfgbarer Speicher: " & _
Round(.TotalSize / 1048576, 2) & " MByte"
[Link] "Freier Speicher: " & _
Round(.FreeSpace / 1048576, 2) & " MByte"
[Link] "Stammverzeichnis: " & .RootFolder
[Link] "Dateisystem: " & .FileSystem
End If
End With
Next fsObj
Exit Sub
fehler:
MsgBox [Link] & vbTab & [Link]
End Sub
Listing 201: Weitere Laufwerkseigenschaften abfragen (Forts.)
Sandini Bib
Textdatei einlesen 235
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
177 Textdatei einlesen
ber das FileSystemObject lassen sich auch Textdateien einlesen. Im folgenden Beispiel aus
Listing 202 wird die Textdatei [Link] in das Direktfenster der Entwicklungsumgebung
Zeile fr Zeile eingelesen.
Mithilfe der Methode OpenTextFile ffnen Sie die Textdatei. Die so geffnete Textdatei steht
Ihnen danach in der Objektvariablen objts zur Verfgung. In einer Schleife lesen Sie nun zei-
lenweise die Textstream-Variable aus. bertragen Sie dabei den Inhalt eines Satzes zunchst
in das Direktfenster der Entwicklungsumgebung. ber die Eigenschaft AtEndOfStream kn-
nen Sie dabei abfragen, wann das Ende der eingelesenen Textdatei erreicht ist. ber die
Methode Close schlieen Sie die noch geffnete Textdatei.
Abbildung 104: Die wichtigsten Eigenschaften der Festplatte
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub TextdateiEinlesen()
Dim fs As Object
Dim objts As Object
Dim strSatz As String
Set fs = CreateObject("[Link]")
Set objts = [Link]("C:\Eigene Dateien\[Link]")
Do Until [Link]
strSatz = [Link]
[Link] strSatz
Loop
[Link]
End Sub
Listing 202: Textdatei in das Direktfenster einlesen
Sandini Bib
236 Die Access-Objekte
178 Textdatei schreiben
Mithilfe der Methode CreateTextfile knnen Sie eine Textdatei anlegen und ber die
Methode WriteLine erfassen Sie einzelne Zeilen. Die Syntax der Methode CreateFile sieht wie
folgt aus:
[Link](Dateiname[, berschreiben[, Unicode]])
Im Makro aus Listing 203 wird eine Textdatei angelegt und eine Zeile erfasst. Dabei werden
das aktuelle Datum sowie die aktuelle Uhrzeit ber die Funktion Now festgehalten.
Abbildung 105: Die Textdatei wurde komplett eingelesen.
Teil Beschreibung
Objekt
Erforderlich. Immer der Name eines FileSystemObject oder
Folder-Objekts.
Dateiname
Erforderlich. Zeichenfolge, die die zu erstellende Datei identi-
fiziert.
berschreiben
Optional. Boolescher Wert, der angibt, ob eine vorhandene
Datei berschrieben werden kann. Wenn er True ist, kann die
Datei berschrieben werden; ist er False, kann sie nicht ber-
schrieben werden. Wenn er ausgelassen wird, werden vorhan-
dene Dateien nicht berschrieben.
Unicode
Optional. Boolescher Wert, der angibt, ob die Datei als Uni-
code- oder ASCII-Datei erstellt wird. Der Wert ist True, wenn
die Datei als Unicode-Datei erstellt wird, bzw. False, wenn sie
als ASCII-Datei erstellt wird. Wird fr den Wert keine Angabe
gemacht, wird von einer ASCII-Datei ausgegangen.
Tabelle 86: Die Argumente der Methode CreateTextFile
Sandini Bib
Das FileSearch-Objekt 237
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
179 Das FileSearch-Objekt
VBA stellt mit dem FileSearch-Objekt ein sehr mchtiges Objekt fr Suchfunktionen zur
Verfgung.
Bevor Sie an das Programmieren dieser Aufgabe herangehen, binden Sie die Bibliothek
MICROSOFT SCRIPTING RUNTIME in der Entwicklungsumgebung ein. Diese Bibliothek wird
dazu bentigt, die Datumsinformationen der Datenbanken abzufragen. Das vorherige Ein-
binden einer zustzlichen Bibliothek, um an zustzliche Befehle zu kommen, wird als early-
binding bezeichnet. In Kapitel 10 erfahren Sie mehr zu diesem Thema.
Im nchsten Beispiel aus Listing 204 soll Ihre Festplatte nach Datenbanken abgesucht wer-
den. Die Ergebnisse der Suche werden in das Direktfenster der Entwicklungsumgebung aus-
gegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFile
'=====================================================
Sub TextdateiSchreiben()
Dim fs As Object
Dim obj As Object
Set fs = CreateObject("[Link]")
Set obj = [Link]("C:\[Link]", True)
[Link] (Now)
[Link]
End Sub
Listing 203: Eine Textdatei anlegen und fllen
Abbildung 106: Eine Ini-Datei anlegen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlFileS
'=====================================================
Listing 204: Datenbanken finden und Dokumenteigenschaften auslesen
Sandini Bib
238 Die Access-Objekte
ber die Eigenschaft Name ermitteln Sie den Namen der jeweils gefundenen Datenbank.
Mithilfe der Eigenschaft DateCreated knnen Sie das Anlagedatum einer Datenbank bzw.
auch eines Ordners ermitteln. Die Eigenschaft DateLastModified liefert Ihnen den genauen
Zeitpunkt der letzten nderung einer Datenbank. Die Eigenschaft Size liefert Ihnen die
Gre der Datenbank in Byte.
Mithilfe des Objekts FileSearch kann nach bestimmten Dateien in Verzeichnissen gesucht
werden. Dieses Objekt bietet einige Eigenschaften an, die angegeben werden knnen. Die
Eigenschaft FileName bestimmt, nach welchen Dateien gesucht werden soll. Dabei kann die
Endung von Access-Dateien mdb mit einem Sternchen angegeben werden. Es knnen somit
alle Access-Datenbanken gesucht und gefunden werden, egal, wie diese auch immer heien
mgen. ber die Eigenschaft LookIn kann festgelegt werden, wo Access nach den Dateien
suchen soll. Hier knnen Sie das Laufwerk sowie das Verzeichnis angeben. Dabei drfen Sie
nicht den letzten Backslash nach dem Verzeichnisnamen vergessen, da Access hierauf emp-
findlich reagiert. Sollen noch darunter liegende Verzeichnisse durchsucht werden, dann kann
dies ber die Eigenschaft SearchSubFolders festgelegt werden. Diese Eigenschaft wird auf den
Wert True gesetzt, wenn die angegebene Suche alle Unterordner im durch die LookIn-Eigen-
Function DB_Infos(FileName As Variant, DatNr As Integer) As String
Dim fso As [Link]
Set fso = New [Link]
With [Link](FileName)
If DatNr = 1 Then DB_Infos = .Name
If DatNr = 2 Then DB_Infos = .DateCreated
If DatNr = 3 Then DB_Infos = .DateLastModified
If DatNr = 4 Then DB_Infos = .Size
End With
End Function
Sub DBsSuchen()
With [Link]
.NewSearch
.LookIn = "C:\Eigene Dateien\"
.FileName = "*.mdb"
.SearchSubFolders = True
If .Execute() > 0 Then
For Each varfile In .FoundFiles
[Link] varfile
[Link] DB_Infos(varfile, 1)
[Link] DB_Infos(varfile, 2)
[Link] DB_Infos(varfile, 3)
[Link] DB_Infos(varfile, 4) & vbLf
Next varfile
End If
End With
End Sub
Listing 204: Datenbanken finden und Dokumenteigenschaften auslesen (Forts.)
Sandini Bib
Das CommandBar-Objekt 239
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
schaft angegebenen Ordner einschlieen soll. Die Methode Execute fhrt die jetzt nher spe-
zifizierte Suche anschlieend aus.
Nach der Suche sind alle gefundenen Dateien im Objekt FoundFiles verzeichnet. Diese gefun-
denen Dateien werden in einer anschlieenden Schleife nacheinander verarbeitet. Innerhalb
der Schleife werden die Dateien ausgewertet, indem die Funktion DB_Info eingesetzt wird.
Mit der Methode AddNew wird dabei jeweils ein neuer Datensatz angelegt, danach gefllt und
ber die Methode Update letztendlich gespeichert. Am Ende des Makros schlieen Sie die
Tabelle ber die Methode Close und heben die Objektverweise auf, um den Arbeitsspeicher
wieder freizugeben.
180 Das CommandBar-Objekt
Alle Leisten in Access werden durch das Objekt CommandBars beschrieben. Die einzelnen Leis-
ten knnen Sie ber die Eigenschaft Type unterscheiden; so liefert eine Symbolleiste den
Index 0, eine Menleiste den Index 1 und ein Kontextmen den Index 2. Weiterhin knnen
Leisten ganz gezielt ber einen eindeutigen ID-Wert angesprochen werden.
181 Leisten identifizieren
Das folgende Makro in Listing 205 schreibt alle Leisten von Access mit ihrem eindeutigen ID-
Wert, Namen und Typ in den Direktbereich.
Abbildung 107: Datenbankinformationen ber FileSearch ermitteln
Sandini Bib
240 Die Access-Objekte
Ermitteln Sie im ersten Schritt alle vorhandenen Leisten von Access, indem Sie diese mithilfe
der Methode Count zhlen. ber die Eigenschaft Type geben Sie die Art der Befehlsleiste
zurck. Entnehmen Sie die mglichen Konstanten bzw. Indexwerte der Tabelle 87.
Mit der Eigenschaft Name ermitteln Sie den Namen der Befehlsleiste. Den eindeutigen Index
haben Sie bereits durch das Hochzhlen der Variablen i herausgefunden. ber die Anwei-
sung [Link] geben Sie alle Informationen ber die vorhandenen Befehlsleisten im
Direktbereich aus.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub LeistenIdentifizieren()
Dim intZ As Integer
Dim strText As String
For intZ = 1 To [Link]
Select Case CommandBars(intZ).Type
Case 0
strText = "Symbolleiste"
Case 1
strText = "Menleiste"
Case 2
strText = "Kontextmen"
Case Else
strText = "nicht ermittelbar"
End Select
[Link] intZ & " --> " & _
CommandBars(intZ).Name & " --> " & strText
Next intZ
End Sub
Listing 205: Leisten ber die Eigenschaft Type identifizieren
Index Konstante Befehlsleiste
0
msoBarTypeNormal
Symbolleiste
1
msoBarTypeMenuBar
Menleiste
2
msoBarTypePopup
Kontextmen
Tabelle 87: Die mglichen Typen von Leisten in Access
Sandini Bib
Symbolleiste ein- und ausblenden 241
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
182 Symbolleiste ein- und ausblenden
Im folgenden Makro aus Listing 207 blenden Sie die Symbolleiste DATENBANK ein.
Im folgenden Makro aus Listing 207 blenden Sie die Symbolleiste DATENBANK aus.
Abbildung 108: Alle Access-Leisten im berblick
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleisteDatenbankAnzeigen()
[Link]("Database").Visible = True
End Sub
Listing 206: Symbolleiste einblenden Variante 1
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleisteDatenbankAusblenden()
[Link]("Database").Visible = False
End Sub
Listing 207: Symbolleiste ausblenden Variante 1
Sandini Bib
242 Die Access-Objekte
Mithilfe der Eigenschaft Visible knnen Sie Symbolleisten ein- und ausblenden. Setzen Sie
diese Eigenschaft auf den Wert True, wenn Sie eine Symbolleiste einblenden mchten. Ver-
wenden Sie den Wert False, um eine Symbolleiste auszublenden.
Die Alternative
Alternativ zu der gerade vorgestellten Vorgehensweise knnen Sie auch mit der Methode
ShowToolbar arbeiten, um eine Symbolleiste einzublenden. Im folgenden Beispiel aus Listing
208 blenden Sie die Symbolleiste WEB ein.
Um die Symbolleiste WEB wieder auszublenden, benutzen Sie dieselbe Methode, bergeben
aber eine andere Konstante.
183 Alle Symbolleisten ein- und ausblenden
Mchten Sie sich alle existierenden Symbolleisten anzeigen lassen, gehen Sie noch einen
Schritt weiter. Den Code fr diese Aufgabe sehen Sie in Listing 210.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleisteEinblendenAlternative()
[Link] "Web", acToolbarYes
End Sub
Listing 208: Symbolleiste einblenden Variante 2
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleisteAusblendenAlternative()
[Link] "Web", acToolbarNo
End Sub
Listing 209: Symbolleiste ausblenden Variante 2
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Listing 210: Alle Symbolleisten anzeigen
Sandini Bib
Symbolleisten-IDs ermitteln 243
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Um fast alle Symbolleisten auszublenden, starten Sie das Makro aus Listing 211.
Lassen Sie dabei aber die Symbolleiste DATENBANK unberhrt, indem Sie die Schleife erst mit
dem Index 3 beginnen lassen.
184 Symbolleisten-IDs ermitteln
Jede einzelne Symbolschaltflche in Access hat eine eindeutige ID, ber die Sie die Symbol-
schaltflche ansprechen knnen. Wie aber knnen Sie genau diese ID in Access ermitteln? Im
Makro aus Listing 212 werden alle Symbole der Symbolleiste DATENBANK mit ihrem Namen
und ihrem eindeutigen Men in den Direktbereich geschrieben.
Sub AlleSymbolleistenEinblenden()
Dim intz As Integer
For intz = 1 To [Link]
On Error Resume Next
CommandBars(intz).Visible = True
Next intz
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub AlleSymbolleistenAusblenden()
Dim intz As Integer
For intz = 3 To [Link]
On Error Resume Next
CommandBars(intz).Visible = False
Next intz
End Sub
Listing 211: Fast alle Symbolleisten ausblenden
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Listing 212: Alle Symbol-IDs auflisten
Listing 210: Alle Symbolleisten anzeigen (Forts.)
Sandini Bib
244 Die Access-Objekte
Deklarieren Sie im ersten Schritt eine Objektvariable vom Typ CommandBar. Danach geben Sie
ber die Anweisung Set den Namen der Symbolleiste bekannt, die Sie bearbeiten mchten.
In einer For each next-Schleife durchlaufen Sie alle Symbole der Symbolleiste, ermitteln die
Beschriftung der Symbolleiste, die standardmig nicht angezeigt wird, ber die Eigenschaft
Caption und geben diese ber die Anweisung [Link] im Direktfenster der Entwicklungs-
umgebung aus. Mithilfe der Eigenschaft ID kann das einzelne Symbol direkt angesprochen
und identifiziert werden.
Sub SymbolIDsAuflisten()
Dim intz As Integer
Dim Cmd As CommandBar
Set Cmd = [Link]("Database")
For intz = 1 To [Link]
[Link] [Link](intz).Caption & " --> " & _
[Link](intz).Id
Next intz
End Sub
Abbildung 109: Alle IDs der Symbolleiste Datenbank werden dokumentiert.
Listing 212: Alle Symbol-IDs auflisten (Forts.)
Sandini Bib
Leisten und Befehle ermitteln 245
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
185 Leisten und Befehle ermitteln
Im nchsten Listing 213 schreiben Sie die Namen aller Leisten und ihrer dazugehrigen
Befehle in den Direktbereich.
Im Auflistungsobjekt CommandBars sind alle Leisten automatisch verzeichnet. In einer Schleife
arbeiten Sie nacheinander eine Leiste nach der anderen ab, indem Sie ber die Funktion
Count die Anzahl der insgesamt zur Verfgung stehenden Leisten ermitteln.
In einer weiteren Schleife durchlaufen Sie alle Befehle der jeweiligen Leiste und ermitteln die
Befehlsbeschriftung ber die Eigenschaft Caption.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub CommandBarsAuflisten()
Dim intz As Integer
Dim intSz As Integer
Dim Cmd As Object
Set Cmd = [Link]
For intz = 1 To [Link]
[Link] "Das ist die Leiste: " & Cmd(intz).Name
For intSz = 1 To Cmd(intz).[Link]
[Link] Cmd(intz).Controls(intSz).Caption
Next intSz
[Link] vbLf
Next intz
End Sub
Listing 213: Alle Symbolleisten sowie Symbole werden ermittelt.
Abbildung 110: Die Namen sowie Symbole aller Symbolleisten dokumentieren
Sandini Bib
246 Die Access-Objekte
186 Symbolschaltflchen (de)aktivieren
Einzelne Symbole knnen Sie direkt ansprechen, indem Sie die genaue Anordnung in der
Symbolleiste ber die Eigenschaft Controls angeben.
Im Beispiel von Listing 214 wird in der Symbolleiste DATENBANK das Symbol NEU deakti-
viert.
Deklarieren Sie im ersten Schritt eine Objektvariable vom Typ CommandBarControl. Damit ste-
hen Ihnen alle Methoden und Eigenschaften fr Symbole zur Verfgung, wie auch die Eigen-
schaft Enabled, die Sie auf den Wert False setzen, um das erste Symbol zu deaktivieren.
Um diese Symbolschaltflche wieder zu aktivieren, starten Sie das Makro aus Listing 215.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolDeaktivieren()
Dim cmdCtrl As CommandBarControl
[Link]("Database").Controls(1).Enabled = False
End Sub
Listing 214: Symbol deaktivieren
Abbildung 111: Das Symbol Neu ist deaktiviert worden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolAktivieren()
Dim cmdCtrl As CommandBarControl
Listing 215: Das Symbol Neu wieder aktivieren
Sandini Bib
Neue Symbolleiste erstellen 247
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
187 Neue Symbolleiste erstellen
Wenn Sie Ihre eigene Symbolleiste anlegen mchten, die fr Sie wichtige Funktionen enthlt,
dann knnen Sie eine Symbolleiste zuerst anlegen und spter mit den gewnschten Symbo-
len belegen. Im ersten Schritt legen Sie nun eine neue, noch leere Symbolleiste an. Den Code
fr diese Aufgabe entnehmen Sie Listing 216.
Deklarieren Sie im ersten Schritt eine Objektvariable vom Typ CommandBar. Mit der Methode
Add fgen Sie eine neue Symbolleiste ein und weisen Sie der Objektvariablen ber die Anwei-
sung Set zu. Dabei bestimmen Sie ber die Eigenschaft Visible, dass die Symbolleiste auf
dem Bildschirm angezeigt wird. Mit den Eigenschaften Top und Left legen Sie die exakte
Anzeigeposition (linke obere Ecke) fest. Sollte die Symbolleiste bereits angelegt worden sein,
sorgt die Anweisung On Error Resume Next dafr, dass es zu keinem Makrofehler kommt. Die
Methode Add wird in diesem Fall einfach ignoriert.
188 Symbolleiste lschen
Um eine Symbolleiste zu lschen, setzen Sie die Methode Delete aus Listing 217 ein. Sehen
Sie sich dazu wieder die Anweisung On Error Resume Next an, die einen Makrofehler verhin-
dert, wenn versucht wird, die bereits gelschte Symbolleiste beispielsweise erneut zu lschen.
[Link]("Database").Controls(1).Enabled = True
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub NeueSymbolleisteAnlegen()
Dim cmd As CommandBar
On Error Resume Next
Set cmd = [Link]("Neue Symbolleiste")
With cmd
.Visible = True
.Top = 400
.Left = 70
End With
End Sub
Listing 216: Eine neue Symbolleiste anlegen
Listing 215: Das Symbol Neu wieder aktivieren (Forts.)
Sandini Bib
248 Die Access-Objekte
189 Symbolschaltflchen-FaceIDs ermitteln
Im nchsten Schritt sollten Sie die noch leere Symbolleiste mit Ihren Wunschsymbolen
befllen. Jede einzelne Symbolschaltflche in Access hat eine eindeutige ID, ber die Sie die
Symbolschaltflche ansprechen knnen. Mit dieser ID ist eine eindeutige Funktion hinter-
legt.
Neben der ID gibt es auch noch die so genannte FaceId. Diese FaceId ist ebenso eindeutig
und gibt das Aussehen des Symbols wieder.
Wie aber knnen Sie genau diese FaceId in Access ermitteln? In der folgenden Aufgabe aus
Listing 218 werden Sie die ersten 1000 Symbole in eine eigene Symbolleiste einfgen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleisteLschen()
On Error Resume Next
[Link]("Neue Symbolleiste").Delete
End Sub
Listing 217: Symbolleiste lschen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolFaceIDsErmitteln()
Dim cmd As CommandBar
Dim cmdctrl As CommandBarControl
Dim intz As Integer
On Error Resume Next
Set cmd = [Link]("Symbole", msoBarFloating)
For intz = 1 To 1000
Set cmdctrl = [Link](msoControlButton)
With cmdctrl
.FaceId = intz
.TooltipText = intz
End With
Next intz
Listing 218: Symbolleiste mit Symbolen bestcken
Sandini Bib
Symbolschaltflchen-IDs ermitteln 249
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt zwei Objektvariablen: Die Objektvariable cmd reprsentiert
spter die neue Symbolleiste. ber die Objektvariable cmdCtrl werden spter die einzelnen
Symbole in die Symbolleiste eingefgt. ber die Methode Add wird eine neue Symbolleiste
eingefgt und benannt. Danach wird eine Schleife aufgesetzt, die genau 1000 Mal durchlau-
fen wird. Innerhalb der Schleife wenden Sie die Methode Add an, um die einzelnen Symbole
einzufgen. ber die Eigenschaft FaceId wird das Aussehen des Symbols bestimmt. Mithilfe
der Eigenschaft ToolTipText knnen Sie diese eindeutige Nummer als QuickInfo ausgeben.
190 Symbolschaltflchen-IDs ermitteln
Sie haben nun das Aussehen der einzelnen Symbole ber die FaceId herausgefunden. Es fehlt
Ihnen noch die ID der einzelnen Symbole, die die Funktion der Symbolschaltflche festlegt.
Im folgenden Beispiel aus Listing 219 wird die Symbolleiste DATENBANK untersucht. Alle IDs
der Symbole dieser Schaltflche werden in den Direktbereich geschrieben.
[Link] = True
End Sub
Abbildung 112: Die ersten 1000 Symbole
Listing 218: Symbolleiste mit Symbolen bestcken (Forts.)
Sandini Bib
250 Die Access-Objekte
Mithilfe der Eigenschaft ToolTipText knnen Sie die QuickInfo der einzelnen Symbole der
Symbolleiste DATENBANK ermitteln. Mit der Eigenschaft ID ist die Aktion gemeint, die ausge-
fhrt wird, wenn Sie eine Symbolschaltflche anklicken.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub IDsErmitteln()
Dim cmd As CommandBar
Dim cmdctrl As CommandBarControl
On Error Resume Next
Set cmd = [Link]("Database")
For Each cmdctrl In [Link]
[Link] [Link] & " --> " & [Link]
Next cmdctrl
End Sub
Listing 219: Die eindeutigen IDs von Symbolen ermitteln
Abbildung 113: Die IDs der Symbole wurden dokumentiert.
Sandini Bib
Symbolschaltflchen einfgen 251
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
191 Symbolschaltflchen einfgen
Da Sie nun alle erforderlichen Informationen haben, um die noch leere Symbolleiste mit den
gewnschten Symbolen auszustatten, gehen Sie ans Werk.
Die Symbolleiste soll folgende Symbole enthalten:
Das SPEICHERN-Symbol
Das NEU-Symbol
Das FFNEN-Symbol
Ein benutzerdefiniertes Symbol, dem Sie ein eigenes Makro zuweisen
Im folgenden Makro aus Listing 220 wird die Symbolleiste NEUE SYMBOLLEISTE angelegt und
die gerade beschriebenen Funktionen werden integriert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleisteEinfgenUndFllen()
Dim cmd As CommandBar
Dim cmdctrl As CommandBarControl
On Error GoTo fehler
Set cmd = [Link]("Neue Symbolleiste")
'Speichern-Symbol einfgen
Set cmdctrl = [Link](msoControlButton, 3)
'Symbol Neu einfgen
Set cmdctrl = [Link](msoControlButton, 2936)
'Symbol ffnen einfgen
Set cmdctrl = [Link](msoControlButton, 2937)
'Benutzerdefiniertes Symbol einfgen
Set cmdctrl = [Link](msoControlButton)
With cmdctrl
.FaceId = 125
.TooltipText = "Aktuelles Datum"
.OnAction = "DatumAusgeben"
End With
Set cmd = Nothing
Set cmdctrl = Nothing
Exit Sub
Listing 220: Eine neue Symbolleiste anlegen und mit Symbolen bestcken
Sandini Bib
252 Die Access-Objekte
Geben Sie in der Anweisung Set im Zusammenspiel mit der Methode Add an, um die neue
Symbolleiste anzulegen, in welche Sie die Symbole einfgen mchten. Danach fgen Sie mit
der Methode Add die einzelnen Symbole ein. Um dabei auf bereits fertige Funktionen von
Access zurckzugreifen, gengt es, wenn Sie bei der Methode Add die dazugehrige ID mit
angeben, die Sie vorher bereits ber das Makro aus Listing 219 ermittelt haben. Damit wer-
den das Aussehen sowie die dazugehrige QuickInfo mit der Beschreibung der Funktion
automatisch mit angelegt.
Bei eigenen Symbolen mssen Sie die Eigenschaft FaceId einsetzen, um das Aussehen des Sym-
bols festzulegen. Um eine QuickInfo zu definieren, die angezeigt werden soll, sobald der
Anwender den Mauszeiger auf dem Symbol positioniert, setzen Sie die Eigenschaft ToolTipText
ein. Damit berhaupt etwas passiert, wenn der Anwender auf das benutzerdefinierte Symbol
klickt, legen Sie ber die Eigenschaft OnAction fest, welches Makro beim Klick auf das Symbol
ausgefhrt werden soll. Sie mssen zu diesem Zweck das Makro noch erfassen. Dieses Makro
sehen Sie in Listing 221.
192 Symbolleisten schtzen
Sie knnen Symbolleisten jederzeit anpassen, d.h., Sie knnen neue Symbole in die Symbol-
leiste aufnehmen oder Symbole aus den Leisten herausnehmen. Des Weiteren knnen Sie die
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 114: Die neue Symbolleiste wurde angelegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub DatumAusgeben()
MsgBox "Heute ist der " & Date
End Sub
Listing 221: Das aktuelle Datum ausgeben
Listing 220: Eine neue Symbolleiste anlegen und mit Symbolen bestcken (Forts.)
Sandini Bib
Symbolleisten schtzen 253
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Position von Symbolleisten auf dem Bildschirm frei bestimmen. Mchten Sie all dies verhin-
dern, so haben Sie die Mglichkeit, Ihre Symbolleisten zu schtzen.
Im nchsten Makro aus Listing 222 wird die Symbolleiste DATENBANK geschtzt.
Setzen Sie die Eigenschaft Protection ein, um Ihre Symbolleisten zu schtzen. Die Kon-
stante msoBarNoChangeVisible bewirkt, dass die Symbolleiste nicht im Kontextmen
erscheint, wenn Sie eine beliebige Symbolleiste mit der rechten Maustaste anklicken. Die
Konstante msoBarNoCustomize verhindert ein Anpassen der Symbolleiste. Sie haben dadurch
keine Mglichkeit, neue Symbole hinzuzufgen bzw. Symbole aus der Symbolleiste her-
auszunehmen.
Entnehmen Sie Tabelle 88 die Mglichkeiten, die Sie mit der Eigenschaft Protection haben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleisteSchtzen()
With [Link]("Database")
.Protection = msoBarNoChangeVisible + msoBarNoCustomize
.Visible = True
End With
End Sub
Listing 222: Symbolleisten schtzen
Konstante Bedeutung
msoBarNoChangeDock
Die Symbolleiste kann nicht aus ihrer Verankerung
herausgelst werden.
msoBarNoChangeVisible
Die Symbolleiste knnen Sie weder im Kontextmen der
Symbolleisten noch im Dialogfeld ANPASSEN sehen.
msoBarNoCustomize
Das Hinzufgen bzw. Lschen von Symbolen aus der
Symbolleiste ist nicht mglich, ebenso wenig das Ver-
schieben der Symbole.
msoBarNoHorizontalDock
Die Symbolleiste kann weder am oberen noch am
unteren Bildschirm angedockt werden.
msoBarNoVerticalDock
Die Symbolleiste kann weder rechts noch links am Bild-
schirm angedockt werden.
msoBarNoMove
Die Symbolleiste kann nicht auf dem Bildschirm frei
bewegt werden.
msoBarNoResize
Die Symbolleiste kann in ihrer Form nicht verndert
werden.
Tabelle 88: Die Mglichkeiten zum Schutz von Symbolleisten
Sandini Bib
254 Die Access-Objekte
Heben Sie den Schutz wieder auf, indem Sie das folgende Makro aus Listing 223 starten.
Setzen Sie die Eigenschaft Protection auf den Wert False, um den Schutz der Symbolleiste
wieder aufzuheben.
193 Symbolschaltflchen (de)aktivieren
Sie knnen in Access auch bestimmte Symbolschaltflchen deaktivieren und bei Bedarf wie-
der aktivieren. Dies empfiehlt sich u.a., wenn Sie auf bestimmte Anlsse in Access reagieren
mchten. So knnen Sie z. B. eine Symbolschaltflche standardmig deaktivieren und erst
dann aktivieren, wenn Sie z. B. eine Kopieraktion durchfhren. So sind Sie in der Lage, am
Status eines Symbols abzulesen, ob Sie sich gerade im Kopiermodus befinden.
In der nchsten Aufgabe werden Sie zwei Symbole aus der Symbolleiste NEUE SYMBOLLEISTE
deaktivieren. Es handelt sich um die Symbole SPEICHERN und NEU. Starten Sie fr diese Auf-
gabe das Makro aus Listing 224.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub SymbolleistenschutzAufheben()
With [Link]("Database")
.Protection = False
.Visible = True
End With
End Sub
Listing 223: Symbolleistenschutz wieder aufheben
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub DeaktivierenSymbole()
Dim cmd As CommandBar
Set cmd = CommandBars("Neue Symbolleiste")
[Link] = True
With cmd
.Controls(1).Enabled = False
.Controls(2).Enabled = False
End With
End Sub
Listing 224: Einzelne Symbole deaktivieren
Sandini Bib
Adaptive Mens ausschalten 255
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Deaktivierung einzelner Symbole bewirkt, dass diese abgeblendet dargestellt werden.
Wenn Sie auf eines dieser Symbole klicken, erfolgt keine Reaktion. Damit Sie das richtige
Symbol deaktivieren, arbeiten Sie am besten ber die eindeutige ID. Geben Sie vorher an, in
welcher Symbolleiste Sie das gewnschte Symbol deaktivieren mchten, und deaktivieren Sie
es schlielich, indem Sie die Eigenschaft Enabled auf den Wert False setzen.
Um diese beiden Symbole wieder zu aktivieren, setzen Sie die Eigenschaft Enabled fr diese
Symbole wieder auf True.
194 Adaptive Mens ausschalten
Bei der Ermittlung der korrekten Einfgeposition kann Ihnen aber die seit der Access-Ver-
sion 2000 bestehende Funktion mit den adaptiven Mens einen Strich durch die Rechnung
machen. Bei diesem Feature handelt es sich um ein sich stndig selbst anpassendes System,
nach dem Menleisten angeordnet werden. Die am hufigsten verwendeten Funktionen wer-
den in den Mens ganz oben angeordnet. Die seltener verwendeten Access-Funktionen rut-
schen immer weiter in den Mens nach unten und werden erst nach lngerem Verweilen mit
der Maus im Men dynamisch eingeblendet. Es empfiehlt sich daher, dieses neue Feature
auszuschalten. Das Ausschalten der adaptiven Mens knnen Sie manuell vornehmen,
Abbildung 115: Die ersten beiden Symbole wurden deaktiviert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub AktivierenSymbole()
Dim cmd As CommandBar
Set cmd = CommandBars("Neue Symbolleiste")
[Link] = True
With cmd
.Controls(1).Enabled = True
.Controls(2).Enabled = True
End With
End Sub
Listing 225: Symbole wieder aktivieren
Sandini Bib
256 Die Access-Objekte
indem Sie mit der rechten Maustaste auf eine beliebige Symbolleiste klicken und aus dem
Kontextmen den Befehl ANPASSEN auswhlen. Wechseln Sie danach auf die Registerkarte
OPTIONEN und deaktivieren Sie das Kontrollkstchen MENS ZEIGEN ZULETZT VERWENDETE
BEFEHLE ZUERST AN (Access 2000) bzw. aktivieren Sie das Kontrollkstchen MENS IMMER
VOLLSTNDIG ANZEIGEN (Access 2002 und Access 2003).
Diese manuelle Einstellung knnen Sie aber auch ber das Makro aus Listing 226 deaktivie-
ren.
Setzen Sie die Eigenschaft AdaptiveMenus auf den Wert False, um die personalisierten Mens
abzuschalten. Dadurch werden die Mens wie gewohnt in Access angezeigt.
195 Neues Men einfgen
In der nchsten Aufgabe soll ein zustzliches Men genau vor dem HILFE-Men eingefgt
werden, das ein paar ntzliche Funktionen aufnehmen soll. Denken Sie daran, dass Sie vor-
her die Bibliothek MICROSOFT OFFICE 11 OBJECT LIBRARY in Ihrer Entwicklungsumgebung
einbinden.
Den dazu notwendigen Code knnen Sie aus Listing 227 entnehmen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub AdaptiveMensAusschalten()
[Link] = False
End Sub
Listing 226: Adaptive Mens ausschalten
H
i
n
w
e
i
s
Mchten Sie ausgiebig mit Men- und Symbolleisten arbeiten, mssen Sie noch die
Bibliothek MICROSOFT OFFICE 10 OBJECT LIBRARY fr Office XP bzw. MICROSOFT
OFFICE 11 OBJECT LIBRARY fr Office 2003 ber den Menbefehl EXTRAS/VERWEISE
aktivieren. Damit stehen Ihnen dann alle Methoden und Eigenschaften zur Verfgung,
die Ihnen Office anbietet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Listing 227: Neues Men einfgen
Sandini Bib
Neues Men einfgen 257
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Definieren Sie im ersten Schritt zwei Integer-Variablen, die zum einen die Anzahl der Mens
ermitteln, die momentan in der Menleiste eingebunden sind, und zum anderen die Position
des HILFE-Mens ermitteln. Eine weitere Objektvariable vom Typ CommandBarControl wird
gebraucht, um den neuen Menpunkt einzufgen. ber die Methode Count zhlen Sie die
Anzahl der Mens in der Menleiste und speichern sie in der Variablen intz. Im nchsten
Schritt ermitteln Sie die Position des HILFE-Mens, das standardmig ganz rechts in der
Arbeitsblatt-Menleiste steht. Die Menleiste knnen Sie ber das Objekt CommandBars("Menu
Bar")ansprechen. ber die Eigenschaft Controls bekommen Sie alle Steuerelemente der
angegebenen Menleiste angezeigt.
Mithilfe der Methode Add fgen Sie ein neues Men ein. Die Methode Add hat die Syntax:
Add(Type, Id, Before, Temporary)
Beim Argument Type geben Sie an, um welche Art von Steuerelement es sich handeln soll.
Zur Auswahl stehen die Konstanten aus der folgenden Tabelle.
Sub NeuesMenEinfgen()
Dim intz As Integer
Dim intPosHilfe As Integer
Dim cmdctrl As CommandBarControl
On Error GoTo fehler
intz = [Link]("Menu Bar").[Link]
intPosHilfe = [Link]("Menu Bar").Controls(intz).Index
Set cmdctrl = [Link]("Menu Bar"). _
[Link](Type:=msoControlPopup, Before:=intPosHilfe, Temporary:=True)
[Link] = "&Eigene Funktionen"
Set cmdctrl = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Konstante Beschreibung
msoControlButton
Fgt ein Schaltflchenelement ein.
msoControlEdit
Fgt ein Eingabefeld ein.
msoControlDropdown
Fgt ein Dropdown-Feld ein,
msoControlComboBox
Fgt ebenso ein Dropdown-Feld ein.
msoControlPopup
Fgt ein Dropdown-Men ein.
Tabelle 89: Alle mglichen Konstanten fr Steuerelemente in Menleisten
Listing 227: Neues Men einfgen (Forts.)
Sandini Bib
258 Die Access-Objekte
Beim Argument ID knnen Sie sich entscheiden, ob Sie zustzlich zum Mentext auch noch
ein Symbol anzeigen mchten. Dieses Argument funktioniert jedoch nur innerhalb eines
Mens, also fr einen Menbefehl. Mit dem Argument Before legen Sie die genaue Position
des Mens fest. bergeben Sie dem Argument die vorher ermittelte Position des Hilfe-
Mens. Setzen Sie das letzte Argument Temporary auf den Wert True, wenn das neue Steuer-
element temporr sein soll. Temporre Steuerelemente werden automatisch gelscht, wenn
die Containeranwendung geschlossen wird.
196 Menleiste zurcksetzen
Haben Sie ein wenig mit Ihrer Menleiste herumexperimentiert und mchten Sie diese ganz
schnell wieder in ihren ursprnglichen Zustand zurcksetzen, dann starten Sie das Makro
aus Listing 228.
Die Methode Reset setzt die angegebene, integrierte Befehlsleiste auf die Standardkonfigura-
tion der Steuerelemente zurck.
Abbildung 116: Das neue Men wurde eingefgt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub MenLeisteZurcksetzen()
On Error Resume Next
[Link]("Menu Bar").Reset
End Sub
Listing 228: Menleiste zurcksetzen
Sandini Bib
Men lschen 259
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
197 Men lschen
Wenn Sie noch weitere zustzliche Mens in Ihrer Menleiste haben, dann macht es keinen
Sinn, die komplette Menleiste zurckzusetzen. Manche Hersteller von Access-Tools inte-
grieren ebenso weitere Mens bzw. Menunterpunkte in die Menleiste von Access. Fr den
Fall, dass Sie nun die Methode Reset einsetzen, sind auch diese erwnschten Eintrge weg. In
diesem Fall mssen Sie ganz gezielt Ihr eigenes Men herauslschen. Sehen Sie sich dazu das
Makro aus Listing 229 an.
Wenden Sie die Methode Delete an, um das neu eingefgte Men wieder zu lschen.
198 Menbefehle einfgen
Das gerade eingefgte Men enthlt noch keine Menbefehle. Diese fgen Sie jetzt ein.
Erweitern Sie das vorher bereits erfasste Makro aus Listing 227 wie folgt:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub MenLschen()
On Error Resume Next
[Link]("Menu Bar").Controls("Eigene Funktionen").Delete
End Sub
Listing 229: Men lschen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub NeuesMenEinfgen()
Dim intz As Integer
Dim intPosHilfe As Integer
Dim cmdctrl As CommandBarControl
Dim cmdctrl2 As CommandBarControl
On Error GoTo fehler
Listing 230: Neues Men und Menbefehle einfgen
Sandini Bib
260 Die Access-Objekte
Fr die Menbefehle im Men EIGENE FUNKTIONEN bentigen Sie eine weitere Objektvaria-
ble vom Typ CommandBarControl. Wenden Sie die Methode Add auf das neu eingefgte Men
an, um nun die einzelnen Menbefehle hinzuzufgen. Mit der Anweisung With legen Sie
bersichtlich weitere Eigenschaften der neuen Menbefehle fest.
Mit der Eigenschaft Caption legen Sie die Beschriftung des Menbefehls fest. Verwenden Sie
das kaufmnnische Zeichen &, um den Shortcut fr diesen Befehl zu bestimmen. Ist das
Men einmal aktiviert, knnen Sie durch die Eingabe des unterstrichenen Buchstabens
innerhalb des Menbefehls die dahinter liegende Funktion bzw. das Makro starten.
intz = [Link]("Menu Bar").[Link]
intPosHilfe = [Link]("Menu Bar").Controls(intz).Index
Set cmdctrl = [Link]("Menu Bar"). _
[Link](Type:=msoControlPopup, Before:=intPosHilfe, Temporary:=True)
[Link] = "&Eigene Funktionen"
Set cmdctrl2 = [Link](Type:=msoControlButton)
With cmdctrl2
.Caption = "Speicherort der Datei anzeigen"
.Style = msoButtonIconAndCaption
.OnAction = "Verzeichniszurckgeben"
.FaceId = 23
End With
Set cmdctrl2 = [Link](Type:=msoControlButton)
With cmdctrl2
.Caption = "Wo&chentag, Datum und Uhrzeit anzeigen"
.Style = msoButtonCaption
.OnAction = "DatumUndUhrzeit"
.BeginGroup = True
End With
Set cmdctrl2 = Nothing
Set cmdctrl = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 230: Neues Men und Menbefehle einfgen (Forts.)
Sandini Bib
Menbefehle gruppieren 261
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
199 Menbefehle gruppieren
Fassen Sie Menbefehle optisch zusammen, indem Sie eine Trennlinie zwischen einzelnen
Menbefehlen ziehen. Diesen Effekt erreichen Sie ber die Eigenschaft BeginGroup. Setzen Sie
diese Eigenschaft auf den Wert True, wenn sich der angegebene Menbefehl am Anfang einer
Gruppe von Menbefehlen im Men befindet.
200 Men auslesen
Um speziell die Menleiste von Access auszulesen, setzen Sie den Code aus Listing 231 ein.
Abbildung 117: Das neue Men wurde angelegt und mit Menbefehlen ausgestattet.
H
i
n
w
e
i
s
ber die Eigenschaft FaceId knnen Sie dem Menbefehl auch noch ein Symbol hin-
zufgen. Allerdings muss dabei dann die Eigenschaft Styles mit der Konstante
msoButtonIconAndCaption angegeben werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub MenNamenAusgeben()
Dim cmd As CommandBar
Dim Ctrl As CommandBarControl
Set cmd = [Link]("Menu Bar")
For Each Ctrl In [Link]
[Link] [Link]
Next ctrl
End Sub
Listing 231: Mens auslesen
Sandini Bib
262 Die Access-Objekte
Deklarieren Sie zuerst zwei Objektvariablen eine davon vom Typ CommandBar und die zweite
als CommandBarControl. ber die Anweisung Set weisen Sie der Objektvariablen cmd die Men-
leiste zu. Danach setzen Sie eine For each next-Schleife auf und geben dabei alle Mens der
Menleiste ber die Eigenschaft Caption und die Anweisung [Link] aus.
201 Menbefehle auslesen
Mchten Sie mehr ber ein bestimmtes Men erfahren, hilft Ihnen das Makro aus Listing
232. Es schreibt alle Menbefehle des ersten Mens in den Direktbereich.
Abbildung 118: Die Mennamen wurden dokumentiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub MensAuslesen()
Dim cmdctrl As CommandBarControl
Dim cmdctrl2 As CommandBarControl
Set cmdctrl = [Link]("Menu Bar").Controls(1)
For Each cmdctrl2 In [Link]
[Link] [Link]
Next cmdctrl2
End Sub
Listing 232: Menbefehle eines Mens auslesen
Sandini Bib
Mens (de)aktivieren 263
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Indem Sie die Eigenschaft Controls auf den Wert 1 setzen, bestimmen Sie, dass das Men
DATEI gemeint ist.
202 Mens (de)aktivieren
Neben dem Ansprechen einzelner Mens mit einem Index haben Sie ebenso die Mglichkeit,
ganz gezielt bestimmte Menbefehle zu deaktivieren. Diese Menbefehle werden dann abge-
blendet und knnen nicht mehr ausgewhlt werden.
Im folgenden Listing 233 werden alle Menbefehle im Men EINFGEN deaktiviert.
Abbildung 119: Alle Befehle des ersten Mens wurden dokumentiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Listing 233: Alle Menbefehle deaktivieren
Sandini Bib
264 Die Access-Objekte
Setzen Sie die Eigenschaft Enabled auf den Wert False, um die einzelnen Menbefehle zu
deaktivieren.
Um die Menbefehle wieder zu aktivieren, starten Sie das Makro aus Listing 234.
Sub AlleMenbefehleInLeisteDeaktivieren()
Dim cmdctrl As CommandBarControl
Dim cmdCtrl2 As CommandBarControl
Set cmdctrl = [Link]("Menu Bar").Controls(5)
For Each cmdCtrl2 In [Link]
[Link] = False
Next cmdCtrl2
End Sub
Abbildung 120: Alle Menbefehle im Men Einfgen wurden deaktiviert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub AlleMenbefehleInLeisteAktivieren()
Listing 234: Alle Menbefehle eines Mens wieder aktivieren
Listing 233: Alle Menbefehle deaktivieren (Forts.)
Sandini Bib
Menbefehle (de)aktivieren 265
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
203 Menbefehle (de)aktivieren
Natrlich knnen Sie auch gleich ganz oben im Men den Menpunkt deaktivieren.
Dadurch kann das entsprechende Men nicht mehr heruntergeklappt werden. Den Code fr
diese Anweisung entnehmen Sie Listing 235:
Setzen Sie die Eigenschaft Enabled auf den Wert True, um das Men wieder zur Verfgung zu
stellen.
Dim cmdctrl As CommandBarControl
Dim cmdCtrl2 As CommandBarControl
Set cmdctrl = [Link]("Menu Bar").Controls(5)
For Each cmdCtrl2 In [Link]
[Link] = True
Next cmdCtrl2
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap03
' Dateiname [Link]
' Modul MdlCmd
'=====================================================
Sub MenDeaktivieren()
'Men Einfgen deaktivieren
[Link]("Menu Bar").Controls(5).Enabled = False
End Sub
Listing 235: Ganzes Men deaktivieren
Abbildung 121: Ein ganzes Men wurde deaktiviert.
Listing 234: Alle Menbefehle eines Mens wieder aktivieren (Forts.)
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Tabellen programmieren
Einfachere Aufgaben rund um das Thema Tabellen knnen Sie mithilfe des Objekts DoCmd erle-
digen. Wenn es etwas mehr sein soll, dann greifen Sie auf die Datenzugriffsmethode ADO
(ACTIVEX DATA OBJECTS) zurck. Diese Methode zeichnet sich durch eine hohe Verarbei-
tungsgeschwindigkeit, eine benutzerfreundliche Bedienung sowie wenig Verbrauch an Arbeits-
speicher und Festplattenspeicher aus. Neben dieser Methode gibt es noch eine zweite, etwas
ltere und sehr verbreitete Methode, genannt DAO (DATA ACCESS OBJECTS).
In diesem Kapitel knnen Sie neben ausgewhlten Aufgaben mit dem Objekt DoCmd auch
Objekte, Methoden und Eigenschaften von ADO/DAO nachschlagen und anhand prakti-
scher Beispiele deren Einsatz nachvollziehen.
204 Tabellen ffnen
Als erste Aufgabe ffnen Sie im Makro Listing 236 ber die Methode OpenTable die Tabelle
KUNDEN.
Mithilfe der Methode OpenTable ffnen Sie eine Tabelle in Access. Diese Methode hat fol-
gende Syntax:
OpenTable(Tabellenname, Ansicht, Datenmodus)
Im Argument Tabellenname geben Sie den Namen der Tabelle an, die Sie ffnen mchten.
Beim Argument Ansicht knnen Sie entscheiden, wie Sie Ihre Tabelle anzeigen mchten. Es
stehen Ihnen dabei folgende Konstanten zur Verfgung:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub Tabelleffnen()
On Error GoTo fehler
[Link] "Kunden", acViewNormal
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 236: Tabelle ffnen
Sandini Bib
268 Tabellen programmieren
acViewDesign: ffnet die Tabelle in der Entwurfsansicht.
acViewNormal: ffnet die Tabelle in gewohnter Weise in der Datenblattansicht (Standard-
einstellung).
acViewPivotChart: Stellt die Tabelle fr ein Pivot-Diagramm zur Verfgung.
acViewPivotTable: Hiermit knnen Sie die Felder der Tabelle fr eine Pivot-Tabelle ver-
wenden.
acViewPreview: Zeigt die Tabelle in der Seitenansicht an.
Beim letzten Argument Datenmodus legen Sie fest, ob nderungen an der Tabelle durchge-
fhrt werden drfen oder nicht. Dabei knnen Sie folgende Konstanten festlegen:
acAdd: Der Anwender kann neue Datenstze hinzufgen, jedoch keine bestehenden
Datenstze bearbeiten.
acEdit: Der Anwender kann bestehende Datenstze bearbeiten und neue Datenstze hin-
zufgen.
acReadOnly: Der Anwender kann die Datenstze nur ansehen.
205 Datensatz finden
ber die Methode FindRecord haben Sie die Mglichkeit, schon beim Aufruf der Tabelle
einen bestimmten Datensatz anzeigen zu lassen. Im Makro aus Beispiel Listing 237 wird die
Tabelle Kunden geffnet und der Datensatz
Die Methode FindRecord hat folgende Syntax:
FindRecord(SuchenNach, Vergleichen, GroKlein, Suchen, WieFormatiert,
NurAktuellesFeld, AmAnfangBeginnen)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabelleffnenUndSatzAktivieren()
On Error GoTo fehler
[Link] "Kunden", acViewNormal
[Link] "Ernst Handel", acEntire, True, acSearchAll, True, acAll
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 237: Einen Datensatz aktivieren
Sandini Bib
Datensatz aktivieren 269
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Argument SuchenNach geben Sie an, nach welchem Text Sie in der Tabelle suchen mch-
ten.
Das Argument Vergleichen gibt an, wo sich die Daten im Feld befinden. Sie knnen eine
Suche nach Daten in einem beliebigen Teil des Felds (Teil des Feldinhalts = acAnywhere),
Daten, die das gesamte Feld ausfllen (gesamter Feldinhalt = acEntire), oder Daten, die
sich am Anfang des Felds befinden (Anfang des Feldinhalts = acStart), angeben. Als
Standardeinstellung ist immer der gesamte Feldinhalt, also die Konstante acEntire, vorge-
sehen.
Im Argument GroKlein geben Sie an, ob Access bei der Suche zwischen Gro- und Klein-
schreibung unterscheiden soll. Wenn ja, dann setzen Sie dieses Argument auf den Wert True.
Das Argument Suchen legt die Suchreihenfolge fest. Sie knnen dabei die folgenden Konstan-
ten einsetzen:
acDown: Suche vom aktuellen Datensatz bis zum Ende der Tabelle.
acUp: Suche vom aktuellen Datensatz bis zum Anfang der Tabelle.
acSearchAll: Suche bis zum Ende der Datenstze und dann vom Anfang der Datenstze
bis zum aktuellen Datensatz. Somit werden alle Datenstze durchsucht. Bei dieser Ein-
stellung handelt es sich um die Standardeinstellung.
Mithilfe des Arguments WieFormatiert knnen Sie bestimmen, ob die Suche auch formatierte
Daten umfasst. Setzen Sie dieses Argument auf den Wert True, um nach Daten zu suchen
sowie nach Informationen, wie diese formatiert sind und im Feld angezeigt werden. Setzen
Sie dieses Argument hingegen auf den Wert False, so sucht Access nach Daten, die in der
Datenbank gespeichert sind. Die Standardeinstellung lautet False.
Beim Argument NurAktuellesFeld knnen Sie bestimmen, ob Access seine Suche nur auf die
momentan aktive Spalte beziehen soll. In diesem Fall geben Sie die Konstante acCurrent an.
Mchten Sie den angegebenen Suchbegriff in allen Zellen der Tabelle suchen, dann setzen Sie
die Konstante acAll ein.
Das letzte Argument AmAnfangBeginnen bestimmt, ob die Suche beim ersten Satz oder beim
aktuellen Datensatz beginnen soll. Geben Sie diesem Argument den Wert True, um die Suche
beim ersten Datensatz zu beginnen. Verwenden Sie den Wert False, um die Suche im Daten-
satz zu beginnen, der auf den aktuellen Datensatz folgt. Wenn Sie dieses Argument nicht
angeben, wird der Standardwert (True) verwendet.
206 Datensatz aktivieren
Alternativ zur Methode FindRecord knnen Sie auch die Methode GoToRecord wie in Listing
238 einsetzen, um einen bestimmten Datensatz, im Beispiel den letzten Datensatz der
Tabelle, zu aktivieren.
Sandini Bib
270 Tabellen programmieren
Die Methode GoToRecord hat dabei folgende Syntax:
GoToRecord(Objekttyp, Objektname, Datensatz, Offset)
Im Argument Objekttyp mssen Sie angeben, um welchen Objekttyp es sich handelt. Es ste-
hen Ihnen hierfr folgende Konstanten zur Verfgung:
acActiveDataObject: Bei dieser Konstanten handelt es sich um die Standardeinstellung,
die vorgibt, dass das aktive Objekt verwendet wird. In unserem Beispiel ist hiermit die
Tabelle gemeint.
acDataForm: Die Methode GoToRecord wird in einem Formular eingesetzt.
acDataFunction: Die Methode wird anhand einer Funktion verwendet.
Abbildung 122: Tabelle ffnen und Datensatz vor einstellen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabelleffnenUndSatzAktivierenVar2()
On Error GoTo fehler
[Link] "Kunden", acViewNormal
[Link] acDataTable, "Kunden", acLast
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 238: Den letzten Datensatz aktivieren
Sandini Bib
Tabellen verknpfen 271
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
acDataQuery: Hier kommt die Methode bei einer Abfrage zum Einsatz.
acDataServerView: Einsatz der Methode GoToRecord unter der Serversicht.
acDataStoredProcedure: Die Methode wird anhand einer gespeicherten Prozedur ausge-
fhrt.
AcDatTable: Die Methode wird anhand einer Tabelle ausgefhrt.
Beim Argument Objektname mssen Sie den Namen der Objekte angeben. Auf unser Beispiel
bezogen ist das die Tabelle Artikel.
Im Argument Datensatz bestimmen Sie ber eine Konstante, welcher Datensatz der aktuelle
Datensatz sein soll, d.h., auf welchem Datensatz der Mauszeiger stehen soll. Dabei stehen
Ihnen folgende Konstanten zur Verfgung:
acFirst: Der erste Datensatz wird zum aktuellen Datensatz.
acGoTo: Mit dieser Konstante knnen Sie ber einen numerischen Wert festlegen, auf wel-
chen Datensatz positioniert werden soll.
acLast: Der letzte Datensatz in der Tabelle wird zum aktuell ausgewhlten.
acNewRec: Damit machen Sie den neu eingefgten Datensatz zum aktuellen Datensatz.
acNext: Hierbei handelt es sich um die Standardeinstellung von Access, die vorgibt, dass
der nchste Datensatz zum aktuellen Datensatz gemacht werden soll. Dabei mssen Sie
wie schon bei der Konstanten acGoTo einen numerischen Wert angeben, um die genaue
Position zu bestimmen.
acPrevious: Bei dieser Konstanten wird der vorherige Satz zum aktuellen Datensatz
gemacht. Auch hier muss noch ein numerischer Wert angegeben werden.
Beim letzten Argument Offset geben Sie einen numerischen Wert an. Dieser numerische
Wert nennt die Anzahl der Datenstze, um die vorwrts oder rckwrts geblttert werden
soll, wenn Sie fr das Argument Datensatz acNext oder acPrevious angegeben haben, oder
den Datensatz, zu dem Sie wechseln mchten, wenn Sie fr das Argument Datensatz acGoTo
angegeben haben.
207 Tabellen verknpfen
Wenn Sie eine Tabelle aus einer anderen Datenbank mit Ihrer aktiven Datenbank verknpfen
mchten, dann knnen Sie das ber den Menbefehl DATEI/EXTERNE DATEN/TABELLEN VER-
KNPFEN erledigen oder ein kleines Makro schreiben, das diese Aufgabe schneller durchfhrt.
Im folgenden Makro aus Listing 239 wird die Tabelle Personal aus der Datenbank Nord-
[Link] im Verzeichnis C:\Eigene Dateien in die aktuelle Datenbank verlinkt.
Sandini Bib
272 Tabellen programmieren
Geben Sie bei der Methode TransferDatabase im ersten Argument die Konstante acLink an.
Damit wird festgelegt, dass eine Verknpfung vorgenommen werden soll. Beim zweiten
Argument handelt es sich eigentlich um einen Standardwert, der angibt, dass es sich in die-
sem Fall um eine Access-Datenbank handeln soll. Im dritten Argument geben Sie den Pfad
sowie den Dateinamen der Datenbank an, die die Tabelle enthlt, die Sie in Ihre Datenbank
verknpft einfgen mchten. Im nchsten Argument legen Sie mithilfe der Konstante acTa-
ble fest, dass es sich um eine zu verknpfende Tabelle handelt. Das darauf folgende Argu-
ment bestimmt, wie der Name der Tabelle lautet. Das letzte Argument beinhaltet den Namen
der Tabelle fr Ihre Datenbank.
Abbildung 123: Der letzte Datensatz in der Tabelle wurde aktiviert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabellenLinken()
On Error GoTo fehler
[Link] acLink, "Microsoft Access", _
"C:\Eigene Dateien\[Link]", acTable, "Personal", "PersonalGelinkt"
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 239: Tabelle verlinken
Sandini Bib
Tabellen im HTML/XML-Format speichern 273
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
208 Tabellen im HTML/XML-Format speichern
Access bietet einige Mglichkeiten an, wie Sie Ihre Tabelle in Internetformate berfhren
knnen. Dabei knnen Sie Ihre Tabellen sowohl in das HTML-Format wie auch in das XML-
Format transportieren.
Tabelle ins HTML-Format bertragen
Im folgenden Beispiel aus Listing 240 wird die Tabelle Artikel im HTML-Format gespei-
chert.
Mit der Methode OutPutTo knnen Sie eine Tabelle im HTML-Format speichern, indem Sie
die Konstante acFormatHTML verwenden.
Alle Tabellen der Datenbank ins HTML-Format bertragen
Wenn Sie das Makro aus Listing 240 noch ein wenig erweitern, dann knnen Sie alle Ihre
Tabellen im HTML-Format abspeichern. Dazu starten Sie das Makro aus Listing 241:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabelleInHTMLkonvertieren()
[Link] "Artikel", acViewNormal
[Link] acOutputTable, "Artikel", acFormatHTML, "[Link]"
[Link] acTable, "Artikel"
End Sub
Listing 240: Tabelle ins HTML-Format exportieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub AlleTabellenKonvertieren()
Dim obj As AccessObject
Dim dbs As Object
Set dbs = [Link]
[Link] False
For Each obj In [Link]
[Link] [Link], acViewNormal
[Link] acOutputTable, [Link], acFormatHTML, [Link] & ".htm"
[Link] acTable, [Link]
Listing 241: Alle Tabellen ins HTML-Format umwandeln
Sandini Bib
274 Tabellen programmieren
Setzen Sie das Auflistungsobjekt AllTables ein, um an alle Tabellen heranzukommen, die in
der aktuellen Datenbank angelegt wurden. ffnen Sie danach jede einzelne Tabelle, wandeln
Sie diese um und schlieen Sie die Tabelle wieder. Damit der Bildschirm whrend dieser
Aktion ruhig bleibt, setzen Sie die Methode Echo auf den Wert False.
Tabelle ins XML-Format bertragen
Auch fr das neuere Internetformat XML existiert eine Schnittstelle in Access, ber die Sie
Ihre Tabellen in das XML-Format berfhren knnen.
Im folgenden Beispiel aus Listing 242 wird die Tabelle Artikel im XML-Format gespeichert.
Next obj
[Link] True
End Sub
Abbildung 124: Die Tabelle wurde im HTML-Format gespeichert.
Listing 241: Alle Tabellen ins HTML-Format umwandeln (Forts.)
Sandini Bib
Komplexere Aufgaben mit ADO/DAO und SQL 275
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Methode ExportXML knnen Sie Access-Objekte in das XML-Format umwandeln.
Diese Methode hat eine ganze Reihe optionaler Argumente, die Sie in der Online-Hilfe von
Access-VBA nachlesen knnen.
209 Komplexere Aufgaben mit ADO/DAO und SQL
Um Aufgaben durchzufhren, die ber das ffnen, Filtern und Schlieen von Tabellen hin-
ausgehen, arbeiten Sie ber die Zugriffsmethode ADO/DAO und den Einsatz von SQL-State-
ments, die Sie im Zusammenspiel gerade fr Access-Tabellen gewinnbringend einsetzen
knnen. Auf den folgenden Seiten knnen Sie spezielle Lsungen nachschlagen, die Sie mehr
oder weniger 1:1 fr Ihre eigenen Anwendungen bernehmen knnen.
210 Datenbank ffnen und schlieen (ADO)
Zu Beginn der Lsungsstaffel sehen Sie im Makro aus Listing 243, wie eine Datenbank
ber ADO-Methoden geffnet und wieder geschlossen wird.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabelleInXMLKonvertieren()
[Link] acExportTable, "Artikel", "[Link]", "[Link]"
End Sub
Listing 242: Tabelle ins XML-Format umwandeln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DBUndTabelleStarten()
Dim Conn As [Link]
On Error GoTo fehler
Set Conn = New [Link]
[Link] = "[Link].4.0"
[Link] = _
"Provider=[Link].4.0;" & _
"Data Source=C:\Eigene Dateien\[Link];"
[Link]
Listing 243: Datenbank ffnen und wieder schlieen
Sandini Bib
276 Tabellen programmieren
Das Objekt Connection stellt die Verbindung zur Datenbank bzw. zum Daten-Provider her.
Die Eigenschaft Provider gibt den Namen des Providers fr die Verbindung bekannt. ber
die Eigenschaft ConnectionString knnen Sie die Datenquelle der Verbindung zuweisen. ber
den Einsatz der Methode Open stellen Sie die Verbindung des Providers zur Datenquelle her.
Mithilfe der Methode Close beenden Sie die Verbindung zum Provider.
211 Tabelle ffnen und Dump ziehen (ADO)
Beim folgenden Beispiel aus Listing 244 wird die Tabelle Artikel geffnet und der komplette
Inhalt als Dump im Direktfenster der Entwicklungsumgebung ausgegeben.
'Weitere Aktionen
[Link]
Set Conn = Nothing
Exit Sub
fehler:
Msgbox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub TabelleffnenUndDumpErstellen()
Dim DBS As New [Link]
On Error GoTo fehler
[Link] "Artikel", [Link]
[Link] [Link]
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 244: Tabelle ffnen und auslesen
Listing 243: Datenbank ffnen und wieder schlieen (Forts.)
Sandini Bib
Tabelle ffnen und Dump ziehen (ADO) 277
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber den Einsatz der Methode Open knnen Sie eine Tabelle ffnen. Die Syntax dieser
Methode lautet:
[Link] Source, ActiveConnection, CursorType, LockType, Options
Abbildung 125: Inhalt 1:1 ausgeben
Argument Beschreibung
Source
Optional. Gibt den Namen der Tabelle an, die Sie ffnen mch-
ten. Auch der Einsatz einer SQL-Anweisung ist hier mglich.
ActiveConnection
Optional. Gibt die Verbindung an.
CursorType
Optional. Bestimmt die Art des Cursors. Unter anderem wird
dadurch der Zugriff auf Ihre Daten festgelegt. Dabei stehen
Ihnen folgende Konstanten zur Verfgung:
adOpenForwardOnly (Voreinstellung): ffnet einen Vorwrtscursor.
Mithilfe dieses Cursors knnen Sie nur nach vorne blttern.
adOpenKeyset: ffnet einen Cursor vom Typ Schlsselgruppen.
Dieser Cursor ist vergleichbar mit dem dynamischen Cursor.
Jedoch werden bei diesem Cursor nderungen in der Tabelle, die
von anderen Anwendern durchgefhrt werden, nicht angezeigt.
adOpenDynamic: ffnet einen dynamischen Cursor. Damit haben
Sie die Mglichkeit, Tabelleneintrge anzuzeigen, zu ndern und
zu lschen. Alle nderungen werden regelmig aktualisiert und
angezeigt.
adOpenStatic: ffnet einen statischen Cursor. Bei diesem Cur-
sor knnen die Daten nur angezeigt, jedoch nicht gendert wer-
den. Die Datenansicht ist als Momentaufnahme des Zustands zu
verstehen, der zum Zeitpunkt des ffnens der Tabelle vorgelegen
hat.
Tabelle 90: Die Argumente der Methode Open
Sandini Bib
278 Tabellen programmieren
ber die Methode GetString knnen Sie alle Daten aus der Tabelle abrufen, sofern Sie keine
weiteren Argumente angeben. ber die Methode Close schlieen Sie die Tabelle.
212 Eine bestimmte Anzahl von Stzen extrahieren
Sollen beispielsweise nur die ersten zehn Datenstze der Tabelle als Dump in das Direkt-
fenster der Entwicklungsumgebung geschrieben werden, dann starten Sie das Makro aus
Listing 245.
LockType
Optional. Bestimmt, welches Sperrverfahren der Provider beim
ffnen der Tabelle einsetzen soll. Dabei stehen Ihnen folgende
Konstanten zur Verfgung:
adLockReadOnly: Bei dieser Standardeinstellung knnen Sie die
Daten in der Tabelle nicht ndern.
adLockPessimistic: Der Datensatz wird vollstndig gesperrt.
Dabei wird das erfolgreiche Bearbeiten der Datenstze sicherge-
stellt, indem der Provider Datenstze in der Datenquelle sofort
beim Bearbeiten sperrt.
adLockOptimistic: Diese Einstellung sorgt dafr, dass die Tabelle
teilweise gesperrt wird, d.h., ein Datensatz wird nur dann
gesperrt, wenn Sie die Update-Methode aufrufen.
adLockBatchOptimistic: Diese Einstellung lsst eine teilweise
Stapelaktualisierung zu.
Options
Optional. Legt fest, wie der Provider die Daten auswerten soll.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub TabelleffnenUndDumpErstellen2()
Dim DBS As New [Link]
On Error GoTo fehler
[Link] "Artikel", [Link]
[Link] [Link](NumRows:=10, ColumnDelimeter:=";"))
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 245: Nur eine Auswahl von Stzen schreiben
Argument Beschreibung
Tabelle 90: Die Argumente der Methode Open (Forts.)
Sandini Bib
Nur bestimmte Felder einer Tabelle ausgeben (ADO) 279
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber das Argument NumRows der Methode GetString knnen Sie festlegen, wie viele Daten-
stze Sie ausgeben mchten. Wenn dieses Argument nicht angegeben wird oder mehr Daten-
stze angegeben werden, als die Tabelle berhaupt enthlt, dann werden standardmig alle
Datenstze der Tabelle ausgegeben.
Im Argument ColumnDelimeter knnen Sie das Trennzeichen zwischen den einzelnen Feldern
angeben. Wird dieses Argument nicht angegeben, dann wird standardmig ein Tabulator-
schritt zwischen den einzelnen Feldern eingefgt.
213 Nur bestimmte Felder einer Tabelle ausgeben (ADO)
Die Abfrage aus Listing 244 lsst sich noch weiter einschrnken, indem Sie mithilfe der SQL-
Anweisung Select nur bestimmte Felder ausgeben.
Im Beispiel aus Listing 246 werden im Direktfenster der Entwicklungsumgebung nur die
Datenfelder LAND, FIRMA und KONTAKTPERSON ausgegeben.
Abbildung 126: Ein anderes Trennzeichen sowie eine Vorauswahl an Stzen treffen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub NurBestimmteDatenExtrahieren()
Dim DBS As New [Link]
Set DBS = New [Link]
On Error GoTo fehler
[Link] "SELECT Land, Firma, Kontaktperson " & _
" FROM Kunden ORDER BY Land", _
[Link]
Listing 246: Nur bestimmte Felder ausgeben
Sandini Bib
280 Tabellen programmieren
Geben Sie bei der SQL-Anweisung die gewnschten Informationen an, jeweils getrennt
durch ein Komma. ber die SQL-Klausel ORDER BY knnen Sie eine Sortierreihenfolge fest-
legen. Durch diese Vorauswahl greift die Methode GetSting nur noch die so angegebenen
Felder ab.
214 Tabelle ffnen und Daten ausgeben (DAO)
Sollen Daten aus einer Tabelle ber DAO ausgelesen werden, dann greifen Sie auf die DAO-
Objekte Database und RecordSet zu.
Beim folgenden Beispiel aus Listing 247 wird die Tabelle Kunden geffnet und einige Felder
werden in das Direktfenster der Entwicklungsumgebung eingelesen.
[Link] [Link]
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 127: Es werden nur die Felder Land, Format und Kontaktperson ausgegeben.
Listing 246: Nur bestimmte Felder ausgeben (Forts.)
Sandini Bib
Tabelle ffnen und Daten ausgeben (DAO) 281
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt zwei Objekte: eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Die CurrentDb-Methode gibt eine Objektvariable des Typs Database
zurck, die der Datenbank entspricht, die momentan im Microsoft Access-Fenster geffnet
ist.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub TabelleStartenUndAuslesenDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("Kunden", dbOpenTable, dbReadOnly)
[Link]
Do Until [Link]
[Link] [Link]("Firma").Value
[Link] [Link]("Kontaktperson").Value
[Link] [Link]("Strae").Value
[Link] [Link]("Ort").Value
[Link] [Link]("Land").Value & vbLf
[Link]
Loop
[Link]
Set rs = Nothing
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 247: Tabelle ffnen und auslesen (DAO)
H
i
n
w
e
i
s
Befindet sich die Tabelle nicht in der aktuellen Datenbank, dann setzen Sie beispiels-
weise folgende Codezeile ein:
Set DBS = OpenDataBase("c:\Eigene Dateien\[Link]")
Fhren Sie danach die Methode OpenRecordSet durch, um die Tabelle zu ffnen. Wen-
den Sie die Methode MoveFirst an, um den ersten Satz in der Tabelle zu aktivieren.
Sandini Bib
282 Tabellen programmieren
In einer Do Until-Schleife durchlaufen Sie alle Datenstze der Tabelle so lange, bis die Eigen-
schaft EOF (End of File) erfllt ist. Innerhalb der Schleife greifen Sie ber die Auflistung
Fields auf die einzelnen Felder zu und geben sie ber den Befehl [Link] im Direktfens-
ter der Entwicklungsumgebung aus. ber die Methode MoveNext stellen Sie nach jedem
Schleifendurchlauf jeweils den nchsten Datensatz ein.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf,
indem Sie den Objektvariablen das Schlsselwort Nothing zuweisen. Dadurch erfolgt die
Trennung der Objektvariablen vom Objekt.
215 Datenstze in Datenfeld einlesen (ADO)
Sollen nur bestimmte Spalten und Zeilen einer Tabelle ausgelesen werden, dann wenden Sie
die Methode GetRows an. ber diese Methode knnen Sie mehrere Datenstze einer Tabelle in
ein Datenfeld einlesen. Die Syntax dieser Methode lautet:
array = [Link](Rows, Start, Fields )
Abbildung 128: Alle Datenstze wurden ausgelesen.
Argument Beschreibung
recordset
Gibt ein Recordset-Objekt zurck.
Rows
Optional. Legt die Anzahl an Datenstzen fest, die eingelesen werden
sollen.
Tabelle 91: Die Argumente der Methode GetRows
Sandini Bib
Datenstze in Datenfeld einlesen (ADO) 283
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 248 werden aus der Tabelle Artikel die ersten zehn Daten-
stze mit den ersten drei Spalteninhalten ausgelesen.
Nach dem ffnen der Tabelle Artikel bergeben Sie der Methode GetRows die Anzahl der
gewnschten Zeilen. Danach durchlaufen Sie zwei Schleifen, in denen Sie neben den ersten
zehn Zeilen auch noch die ersten drei Spalten in ein zweidimensionales Datenfeld einlesen.
Start
Optional. Legt die Startposition fest, ab der Datenstze eingelesen werden
sollen.
Fields
Legt die Spalten fest, die eingelesen werden sollen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenInFeldEinlesen()
Dim dbs As New [Link]
Dim varDat As Variant
Dim intZeilen As Integer
Dim IntSpalten As Integer
Dim IntGesamtZeilen As Integer
IntGesamtZeilen = 10
On Error GoTo fehler
[Link] "Artikel", [Link]
varDat = [Link](IntGesamtZeilen)
For intZeilen = 0 To IntGesamtZeilen 1
For IntSpalten = 0 To 2
[Link] varDat(IntSpalten, intZeilen) & " ";
Next IntSpalten
[Link] vbLf
Next intZeilen
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 248: Datenstze in ein Datenfeld einlesen (ADO)
Argument Beschreibung
Tabelle 91: Die Argumente der Methode GetRows (Forts.)
Sandini Bib
284 Tabellen programmieren
216 Datenstze in Datenfeld einlesen (DAO)
Die Methode GetRows ist ebenso auch in DAO einsetzbar. Im Makro aus Listing 249 werden
die ersten zehn Datenstze sowie die ersten drei Spalten der Tabelle Artikel ausgelesen.
Abbildung 129: Die ersten zehn Datenstze einlesen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenInFeldEinlesenDAO()
Dim DBS As [Link]
Dim rs As [Link]
Dim varDat As Variant
Dim intZeilen As Integer
Dim IntSpalten As Integer
Dim IntGesamtZeilen As Integer
IntGesamtZeilen = 10
On Error GoTo fehler
Set DBS = CurrentDb()
Set rs = [Link]("Artikel", dbOpenSnapshot)
varDat = [Link](IntGesamtZeilen)
Listing 249: Datenstze in ein Datenfeld einlesen (DAO)
Sandini Bib
SQL-Statements absetzen (ADO) 285
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Beim Makro aus Listing 249 wurde fr die Bekanntgabe der aktuellen Datenbank die Kurz-
form
Set DBS = CurrentDb()
gewhlt. Diese Kurzform ist gleichbedeutend mit der etwas lngeren Form
Set DBS = [Link].
217 SQL-Statements absetzen (ADO)
ber die Methode Execute knnen Sie eine SQL-Anweisung oder eine beliebige andere
Abfrage absetzen. Die Syntax dieser Methode lautet:
[Link] CommandText, RecordsAffected, Options
Im folgenden Beispiel aus Listing 250 werden alle Datenstze aus der Tabelle Kunden extra-
hiert, bei denen die Kunden aus Deutschland kommen.
For intZeilen = 0 To IntGesamtZeilen 1
For IntSpalten = 0 To 2
[Link] varDat(IntSpalten, intZeilen) & " ";
Next IntSpalten
[Link] vbLf
Next intZeilen
[Link]
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Argument Beschreibung
Connection Optional. Gibt ein Connection-Objekt zurck.
CommandText Erforderlich. Enthlt den Text der SQL-Abfrage, der
gespeicherten Prozedur, der Abfrage oder der URL.
RecordsAffected Optional. Gibt die Anzahl der Datenstze zurck,
die davon betroffen sind.
Options Optional. Gibt an, wie der Provider das Argument
CommandText behandeln soll.
Tabelle 92: Die Argumente der Methode Execute
Listing 249: Datenstze in ein Datenfeld einlesen (DAO) (Forts.)
Sandini Bib
286 Tabellen programmieren
Beim Makro aus Listing 250 werden mithilfe der SQL-Anweisung SELECT die Felder Firma,
Kontaktperson und Land aus der Tabelle Kunden ausgelesen. ber das Schlsselwort WHERE kann
dabei die Auswahl eingeschrnkt werden. Die SQL-Anweisung wird an die Methode Execute
bergeben. Das Ergebnis steht danach im Recordset-Objekt dbs zur Verfgung und kann aus-
gelesen werden. Das Auslesen erfolgt ber eine Do Until-Schleife, bei der ber die Eigenschaft
EOF der letzte gefundene Satz im Recordset-Objekt festgestellt werden kann. ber die
Methode MoveNext wird jeweils der nchste Datensatz im Recordset-Objekt ermittelt und
ber den Befehl [Link] im Direktfenster der Entwicklungsumgebung ausgegeben.
218 Unikatsliste aus Tabelle erstellen (ADO)
Um eine Unikatsliste aus einer Tabelle zu erstellen, bei der jeder Eintrag nur einmal vor-
kommt, setzen Sie den SQL-Befehl SELECT DISTINCT ein.
Im folgenden Beispiel aus Listing 251 wird die Tabelle Kunden ausgewertet. Ziel ist es, eine
Liste zu erstellen, in der alle Lnder der Tabelle nur einmal vorkommen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeAuslesen()
Dim dbs As [Link]
Set dbs = _
[Link] _
("SELECT * FROM Kunden Where Land ='Deutschland'" _
, , adCmdText)
Do Until [Link]
[Link] dbs!Firma & vbTab & _
dbs!Kontaktperson & _
vbTab & dbs!Land
[Link]
Loop
[Link]
Set dbs = Nothing
End Sub
Listing 250: Datenstze auslesen
Sandini Bib
Unikatsliste aus Tabelle erstellen (ADO) 287
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Anweisung DISTINCT, welche Sie vor dem Feld angeben, wird sichergestellt, dass im
Ergebnis jeder Satz nur einmal auftaucht.
Abbildung 130: Einige Datenstze auslesen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub KeineDoppelten()
Dim DBS As [Link]
On Error Goto fehler
Set DBS = _
[Link] _
("SELECT DISTINCT LAND FROM KUNDEN" _
, , adCmdText)
Do Until [Link]
[Link] DBS!Land
[Link]
Loop
[Link]
Set DBS = Nothing
Exit Sub
fehler:
Msgbox [Link] & " " & [Link]
End Sub
Listing 251: Eine Unikatsliste erstellen (ADO)
Sandini Bib
288 Tabellen programmieren
Im Makro aus Listing 251 wurde sichergestellt, dass jedes Land aus der Tabelle Kunden nur
einmal im Direktfenster ausgegeben wird. Dieses Makro lsst sich insofern erweitern, als die
Einmaligkeit fr das Land sowie die Stadt gelten soll. Im Makro aus Listing 252 werden also
nur Datenstze ausgegeben, die in Land und Stadt keine Dopplungen aufweisen.
Die Anweisung DISTINCT lsst sich erweitern, indem alle folgenden Felder, getrennt durch ein
Komma, aufgefhrt werden.
Abbildung 131: Die Unikatslnderliste wurde erstellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub KeineDoppelten2()
Dim DBS As [Link]
Set DBS = _
[Link] _
("SELECT DISTINCT LAND, ORT FROM KUNDEN" _
, , adCmdText)
Do Until [Link]
[Link] DBS!Land & vbTab & DBS!Ort
[Link]
Loop
[Link]
Set DBS = Nothing
End Sub
Listing 252: Keine doppelten Lnder und Orte (ADO)
Sandini Bib
Unikatsliste aus Tabelle erstellen (DAO) 289
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
219 Unikatsliste aus Tabelle erstellen (DAO)
Um eine Unikatsliste ber ein DAO-Makro zu erstellen, verwenden Sie ebenso das SQL-
Schlsselwort Distinct.
Im folgenden Makro aus Listing 253 wird die Tabelle Kunden angezapft und alle Ortsnamen
werden ausgelesen. Dabei darf kein Ortsnamen doppelt im Ergebnis vorkommen.
Abbildung 132: Jeder Ort in einem Land wird nur einmal genannt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub KeineDoppeltenDAO()
Dim DBS As [Link]
Dim rs As [Link]
Set DBS = [Link]
Set rs = [Link]("SELECT DISTINCT ORT FROM KUNDEN", dbOpenSnapshot)
With rs
Do Until .EOF
[Link] .Fields("Ort")
.MoveNext
Loop
Listing 253: Eine Unikatsliste erstellen (DAO)
Sandini Bib
290 Tabellen programmieren
Deklarieren Sie im ersten Schritt zwei Objekte eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Die CurrentDb-Methode gibt eine Objektvariable des Typs Database
zurck, die der Datenbank entspricht, die momentan im Microsoft Access-Fenster geffnet
ist.
Fhren Sie die Methode OpenRecordSet durch, um die Tabelle zu ffnen. ber die SQL-
Anweisung "SELECT DISTINCT ORT FROM KUNDEN" wird jeder Ort nur einmal aus der Tabelle
KUNDEN extrahiert..
In einer Do Until-Schleife durchlaufen Sie alle Datenstze, die jetzt als Ergebnis im RecordSet-
Objekt rs zur Verfgung stehen, so lange, bis die Eigenschaft EOF (End of File) erfllt ist.
Innerhalb der Schleife greifen Sie ber die Auflistung Fields auf die einzelnen Felder zu.
ber die Methode MoveNext stellen Sie nach jedem Schleifendurchlauf jeweils den nchsten
Datensatz im RecordSet-Objekt ein.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
220 Datenstze sortieren (ADO)
Um Datenstze sortiert auszugeben, setzen Sie die SQL-Klausel ORDER BY ein. ber das
Schlsselwort ASC (aufsteigend) bzw. DESC (absteigend) knnen Sie die Sortierreihenfolge
festlegen. Wenn Sie aufsteigend sortieren mchten, dann knnen Sie dieses Schlsselwort
auch weglassen.
Im Beispiel aus Listing 254 wird die Tabelle Artikel geffnet und es werden alle Datenstze
ermittelt, die einen Einzelpreis von mehr als 20 Euro aufweisen. Die Ausgabe der Datenstze
erfolgt aufsteigend nach dem Einzelpreis.
.Close
End With
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 253: Eine Unikatsliste erstellen (DAO) (Forts.)
Sandini Bib
Datenstze sortieren (ADO) 291
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 133: Jeder Ort taucht nur einmal auf.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeSortiertAuslesen()
Dim DBS As [Link]
On Error Goto fehler
Set DBS = [Link] _
("SELECT * FROM Artikel Where Einzelpreis > 20 ORDER BY Einzelpreis ASC" _
, , adCmdText)
Do Until [Link]
[Link] DBS!Artikelname & vbLf & _
DBS!Einzelpreis & vbLf & _
DBS!Lagerbestand & vbLf
[Link]
Loop
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 254: Datenstze sortiert ausgeben
Sandini Bib
292 Tabellen programmieren
Eine alternative Mglichkeit, eine Liste zu sortieren, bietet der Einsatz der Eigenschaft Sort.
Dabei haben Sie die Mglichkeit, Datenstze in einer Tabelle zu sortieren.
Im folgenden Beispiel aus Listing 255 wird die Tabelle Artikel geffnet und die Datenstze
werden nach dem Artikelnamen sortiert.
Abbildung 134: Der billigste Artikel steht ganz oben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeSortieren()
Dim Conn As [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
With DBS
.CursorLocation = adUseClient
Listing 255: Datenstze sortieren ber die Eigenschaft Sort
Sandini Bib
Datenstze sortieren (DAO) 293
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Ganz wichtig ist beim Sortiervorgang, dass Sie die Eigenschaft CursorLocation mit der
Konstanten adUseClient angeben. Damit wird der clientbasierte Cursor verwendet, der
unter anderem den Sortiervorgang von Datenstzen untersttzt. Wenden Sie danach die
Eigenschaft Sort an und geben Sie vor, nach welchen Kriterien sortiert werden soll. Haben
Sie mehrere Sortierkriterien zur Auswahl, dann geben Sie diese entsprechend der Sortier-
reihenfolge getrennt durch Kommata ein. Bei der Sortierreihenfolge selbst knnen Sie ent-
weder ASC fr aufsteigende Sortierung oder DESC fr absteigende Sortierung angeben.
Dabei erfassen Sie nach dem Feldnamen ein Leerzeichen und hngen die gewnschte Sor-
tierkonstante an. Wenn Sie diese Konstante nicht angeben, wird standardmig absteigend
sortiert.
221 Datenstze sortieren (DAO)
Auch beim Anwenden von DAO mssen Sie auf SQL-Anweisungen nicht verzichten. Um
Datenstze sortiert auszugeben, setzen Sie die SQL-Klausel ORDER BY ein. ber das Schlssel-
wort ASC (aufsteigend) bzw. DESC (absteigend) knnen Sie die Sortierreihenfolge festlegen.
Wenn Sie aufsteigend sortieren mchten, dann knnen Sie dieses Schlsselwort auch weglas-
sen.
Im Beispiel aus Listing 256 wird die Tabelle Artikel sortiert nach Einzelpreis im Direkt-
fenster der Entwicklungsumgebung ausgegeben.
.Open "Artikel", Conn, adOpenKeyset, adLockOptimistic
.Sort = "Artikelname ASC"
Do While Not .EOF
[Link] .Fields("Artikel-Nr.").Value & _
" " & .Fields("Artikelname").Value
.MoveNext
Loop
.Close
End With
[Link]
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 255: Datenstze sortieren ber die Eigenschaft Sort (Forts.)
Sandini Bib
294 Tabellen programmieren
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Anschlieend verwenden Sie die Methode OpenRecordSet, um die Tabelle
zu ffnen. Dabei erfassen Sie direkt schon beim ffnen der Tabelle die SQL-Anweisung, die
die Filterung und Sortierung herstellt. Als Ergebnis stehen nun alle Datenstze der Tabelle im
RecordSet-Objekt rs und knnen dort abgegriffen werden.
In einer Do Until-Schleife durchlaufen Sie alle Datenstze des RecordSet so lange, bis die
Eigenschaft EOF (End of File) erfllt ist. Innerhalb der Schleife greifen Sie ber die Auflistung
Fields auf die einzelnen Felder zu. ber die Methode MoveNext stellen Sie nach jedem Schlei-
fendurchlauf jeweils den nchsten Datensatz des RecordSet-Objekts ein.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzeSortiertAuslesenDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link] _
("SELECT * FROM Artikel Where Einzelpreis>20 ORDER BY Einzelpreis ASC", _
dbOpenSnapshot)
With rs
Do Until .EOF
[Link] "Artikelname: " & .Fields("Artikelname").Value & vbLf & _
"Einzelpreis: " & .Fields("Einzelpreis").Value & vbLf & _
"Lagerbestand: " & .Fields("Lagerbestand").Value & vbLf
.MoveNext
Loop
.Close
End With
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 256: Datenstze sortieren und ausgeben (DAO)
Sandini Bib
Tabellen zusammenfassen (ADO) 295
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
222 Tabellen zusammenfassen (ADO)
Mit der SQL-Anweisung UNION knnen Sie mehrere Tabellen zusammenfassen.
Das nachfolgende Makro aus Listing 257 liest aus den beiden Tabellen KUNDEN und LIEFERANTEN
die Informationen ORT, FIRMA und KONTAKTPERSON heraus.
Abbildung 135: Der billigste Artikel steht ganz oben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MehrereTabellenAbfragen()
Dim DBS As New [Link]
Set DBS = New [Link]
On Error GoTo fehler
With DBS
.Open "SELECT Ort, Firma, Kontaktperson " & _
"FROM Kunden UNION SELECT Ort, Firma, " & _
"Kontaktperson FROM " & _
"Lieferanten ORDER BY Ort, Firma", _
[Link]
Do Until .EOF
[Link] "Ort: " & .Fields("Ort").Value & _
" Firma: " & .Fields("Firma").Value & _
Listing 257: Mehrere Tabellen abfragen
Sandini Bib
296 Tabellen programmieren
ber das Schlsselwort UNION verbinden Sie die zwei Tabellen Kunden und Lieferanten.
223 Verknpfte Tabellen abfragen (ADO)
Wenn Sie beispielsweise im Men EXTRAS den Befehl BEZIEHUNGEN auswhlen, dann werden
Sie feststellen, dass einige Tabellen wie die Tabelle Artikel sowie die Lieferanten ber die
Lieferanten_Nr verknpft sind.
Wenn Sie nun beispielsweise die Tabelle Artikel auslesen, dann bekommen Sie als Lieferant
nicht den Namen des Lieferanten, sondern eben eine Lieferantennummer. Mit dieser Num-
mer kann dann in der Tabelle Lieferanten der Name des Lieferanten ermittelt werden.
Sollen daher Informationen aus beiden Tabellen in eine Auswertung einflieen, dann ms-
sen beide Tabellen in die SELECT-Anweisung integriert werden. Sehen Sie sich das Makro aus
Listing 258 einmal etwas nher an.
" Kontaktperson: " & .Fields("Kontaktperson")
[Link]
Loop
.Close
End With
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 136: Das Ergebnis enthlt Daten aus zwei Tabellen.
Listing 257: Mehrere Tabellen abfragen (Forts.)
Sandini Bib
Verknpfte Tabellen abfragen (ADO) 297
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 137: Die Tabelle Artikel ist mit der Artikel Lieferanten verknpft.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MehrereVerknpfteTabellenAbfragen()
Dim dbs As New [Link]
Set dbs = New [Link]
On Error GoTo fehler
With dbs
.Open "SELECT [Link], [Link], " & _
"[Link] " & _
"FROM Artikel, Lieferanten " & _
"WHERE Artikel.Lieferanten_Nr=Lieferanten.Lieferanten_Nr", _
[Link]
Do Until .EOF
[Link] "Ort: " & .Fields("Artikelname").Value
[Link] "Firma: " & .Fields("Firma").Value
Listing 258: Verknpfte Tabellen abfragen (ADO)
Sandini Bib
298 Tabellen programmieren
Geben Sie bei der SELECT-Anweisung vor jedem Feld auch den Namen der Tabelle an, aus der
das Feld stammt. Nach der FROM-Klausel geben Sie die Namen beider Tabellen an, aus denen
Sie Daten ziehen mchten. In der WHERE-Klausel geben Sie den Namen des verknpften Felds
an, ber das die beiden Tabellen miteinander verbunden sind.
224 Verknpfte Tabellen abfragen (DAO)
Die gleiche Aufgabe aus Listing 258 wird jetzt in DAO ber den Einsatz des Makros aus
Listing 259 gelst.
[Link] "Kontaktperson: " & .Fields("Kontaktperson") & vbLf
[Link]
Loop
.Close
End With
Set dbs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 138: Der Lieferantenname wird korrekt angezeigt.
Listing 258: Verknpfte Tabellen abfragen (ADO) (Forts.)
Sandini Bib
Verknpfte Tabellen abfragen (DAO) 299
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Dann fhren Sie die Methode OpenRecordSet durch, um die Tabelle zu ff-
nen. Geben Sie beim ffnen der Tabelle in der SELECT-Anweisung vor jedem Feld auch den
Namen der Tabelle an, aus der das Feld stammt. Nach der FROM-Klausel geben Sie die Namen
beider Tabellen an, aus denen Sie Daten ziehen mchten. In der WHERE-Klausel geben Sie den
Namen des verknpften Felds an, ber das die beiden Tabellen miteinander verbunden sind.
In einer Do Until-Schleife durchlaufen Sie alle Datenstze der Tabelle so lange, bis die Eigen-
schaft EOF (End of File) erfllt ist. Innerhalb der Schleife greifen Sie ber die Auflistung
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub MehrereVerknpfteTabellenAbfragenDAO()
Dim dbs As [Link]
Dim rs As [Link]
Set dbs = [Link]
On Error GoTo fehler
Set rs = [Link] _
("SELECT [Link], [Link], " & _
"[Link] FROM Artikel, Lieferanten " & _
"WHERE Artikel.Lieferanten_Nr=Lieferanten.Lieferanten_Nr", dbOpenSnapshot)
With rs
Do Until .EOF
[Link] "Ort: " & .Fields("Artikelname").Value
[Link] "Firma: " & .Fields("Firma").Value
[Link] "Kontaktperson: " & .Fields("Kontaktperson") & vbLf
.MoveNext
Loop
.Close
End With
Set dbs = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 259: Verknpfte Tabellen abfragen (DAO)
Sandini Bib
300 Tabellen programmieren
Fields auf die einzelnen Felder zu. ber die Methode MoveNext stellen Sie nach jedem Schlei-
fendurchlauf jeweils den nchsten Datensatz ein.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
225 Minimal- und Maximalwerte ermitteln (ADO)
Mit der Anweisung TOP knnen Sie die wertmig grten/kleinsten Feldinhalte einer Tabelle
ermitteln.
Je nachdem, wie die Tabelle sortiert ist bzw. sortiert wird, werden bei der SQL-Anweisung
TOP entweder die grten oder die kleinsten Werte angezeigt.
Negativ Top 5 nach Preis
Im folgenden Beispiel aus Listing 260 werden die fnf billigsten Artikel aus dem Sortiment
der Tabelle Artikel ermittelt und angezeigt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MinWerteFinden()
Dim DBS As New [Link]
Dim strSQL As String
strSQL = "SELECT TOP 5 Einzelpreis, Artikelname, " & _
"Lagerbestand FROM Artikel ORDER BY Einzelpreis"
Set DBS = New [Link]
On Error GoTo fehler
With DBS
.Open strSQL, [Link]
Do Until [Link]
[Link] "Artikelname: " & _
.Fields("Artikelname").Value & vbLf & _
"Lagerbestand: "; .Fields("Lagerbestand").Value & _
vbLf & "Einzelpreis: " & _
.Fields("Einzelpreis").Value & vbLf
[Link]
Loop
.Close
End With
Set DBS = Nothing
Listing 260: Minimalwerte aus einer Tabelle ermitteln
Sandini Bib
Minimal- und Maximalwerte ermitteln (ADO) 301
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die SQL-Anweisung SELECT TOP 5 erhalten Sie die fnf billigsten Artikel im Sortiment,
wenn die Sortierreihenfolge aufsteigend eingestellt ist.
Top 3 nach Lagerbestand
Sollten hingegen die drei Artikel mit dem grten Lagerbestand ermittelt werden, dann star-
ten Sie das Makro aus Listing 261.
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 139: Die fnf billigsten Artikel im Sortiment
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MaxWerteFinden()
Dim DBS As New [Link]
Dim strSQL As String
Listing 261: Die Maximalwerte aus einer Tabelle ermitteln
Listing 260: Minimalwerte aus einer Tabelle ermitteln (Forts.)
Sandini Bib
302 Tabellen programmieren
Eine weitere Mglichkeit, um bestimmte Datenstze in einer Tabelle aufzuspren, ist der
Einsatz von Funktionen wie Max, Min oder Avg (Mittelwert), die Sie auch in SQL-Anweisungen
einsetzen knnen.
strSQL = "SELECT TOP 3 Einzelpreis, Artikelname, " & _
"Lagerbestand FROM Artikel ORDER BY Lagerbestand DESC"
Set DBS = New [Link]
On Error GoTo fehler
With DBS
.Open strSQL, [Link]
Do Until [Link]
[Link] "Artikelname: " & _
.Fields("Artikelname").Value & vbLf & _
"Lagerbestand: "; .Fields("Lagerbestand").Value & _
vbLf & "Einzelpreis: " & _
.Fields("Einzelpreis").Value & vbLf
[Link]
Loop
.Close
End With
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 140: Die Ladenhter im Sortiment
Listing 261: Die Maximalwerte aus einer Tabelle ermitteln (Forts.)
Sandini Bib
Minimal- und Maximalwerte ermitteln (ADO) 303
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Der billigste Artikel
Im folgenden Makro aus Listing 262 wird der billigste Artikel der Tabelle Artikel wertmig
abgefragt.
Fgen Sie die Funktion Min gleich nach der Anweisung SELECT ein und setzen Sie das Feld in
Klammern, aus welchem Sie den niedrigsten Wert ermitteln mchten. Nach der Suche wen-
den Sie die Methode MoveFirst an, um diesen Wert anzusteuern. ber die Fields-Auflistung
knnen Sie diesen Wert ausgeben.
Ladenhter ermitteln
Um den grten Ladenhter im Sortiment zu ermitteln, starten Sie das Makro aus Listing
263.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MinWertFinden()
Dim DBS As New [Link]
Dim strSQL As String
strSQL = _
"SELECT Min(Einzelpreis) FROM Artikel"
Set DBS = New [Link]
On Error GoTo fehler
With DBS
.Open strSQL, [Link]
.MoveFirst
MsgBox "Der niedigste Preis ist " & .Fields(0).Value
.Close
End With
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 262: Der niedrigste Preis wird ermittelt.
Sandini Bib
304 Tabellen programmieren
Neben den Aggregatfunktionen Min und Max gibt es in Tabelle 93 weitere Funktionen, die Sie
einsetzen knnen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MaxWertFinden()
Dim DBS As New [Link]
Dim strSQL As String
strSQL = "SELECT Max(Lagerbestand) FROM Artikel"
Set DBS = New [Link]
On Error GoTo fehler
With DBS
.Open strSQL, [Link]
.MoveFirst
MsgBox "Die hchste Lagermenge ist " & .Fields(0).Value
.Close
End With
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 263: Den grten Ladenhter ermitteln
Funktion Kurzbeschreibung
Avg
Mittelwertsberechnung
Count
Datensatzanzahl wird ermittelt
First
Meldet den ersten gefundenen Datensatz
Last
Meldet den letzten gefundenen Datensatz
Max
Ermittelt den grten Datensatz
Min
Ermittelt den kleinsten Datensatz
StDev
Errechnet die Standardabweichung
Sum
Bildet die Summe
Tabelle 93: Die verfgbaren Aggregatfunktionen
Sandini Bib
Minimal- und Maximalwerte ermitteln (ADO) 305
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Lagerbestandsdurchschnitt errechnen
Im folgenden Beispiel aus Listing 264 werden der durchschnittliche Lagerbestand und der
durchschnittliche Preis aller Artikel errechnet und im Direktfenster ausgegeben.
Eine weitere Mglichkeit zur Ermittlung von Extremwerten, bietet der Einsatz der D-Funk-
tionen, die Sie in Tabelle 94 einsehen knnen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub AVGWerteFinden()
Dim DBS As New [Link]
Dim strSQL As String
strSQL = _
"SELECT AVG(Lagerbestand), AVG(Einzelpreis) FROM Artikel"
Set DBS = New [Link]
On Error GoTo fehler
With DBS
.Open strSQL, [Link]
[Link] .GetString
.Close
End With
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 264: Durchschnittsberechnungen durchfhren (ADO)
Abbildung 141: Der durchschnittliche Lagerbestand liegt so um die 40.
Sandini Bib
306 Tabellen programmieren
Den ltesten Mitarbeiter ermitteln
Im folgenden Beispiel aus Listing 265 wird das Geburtsdatum des ltesten Mitarbeiters in der
Tabelle Personal ermittelt.
Funktion Kurzbeschreibung
DAvg
Mittelwertsberechnung.
DCount
Datensatzanzahl wird ermittelt.
DLookUp
Zeigt einen Wert eines Felds an, das sich nicht in
der Datenquelle Ihres Formulars oder Berichts
befindet.
DFirst
Meldet den ersten gefundenen Datensatz.
DLast
Meldet den letzten gefundenen Datensatz.
DMin
Ermittelt den kleinsten Datensatz.
DMAx
Ermittelt den grten Datensatz.
DstDev
Errechnet die Standardabweichung (Stich-
probe).
DStDevP
Errechnet die Standardabweichung
(Population).
DSum
Bildet die Summe.
DVar
Errechnet die Varianz (Stichprobe).
DVarP
Errechnet die Varianz (Population).
Tabelle 94: Die D-Funktionen im berblick
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MinWertFindenVar2()
MsgBox "Der lteste Mitarbeiter ist am : " & _
DMin("Geburtsdatum", "Personal") & _
" geboren!", vbInformation
End Sub
Listing 265: Das am weitesten zurckliegende Datum wird ber die Funktion Min ermittelt.
Abbildung 142: Auch Altersberechnungen sind mglich.
Sandini Bib
Minimal- und Maximalwerte ermitteln (DAO) 307
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Soll das Alter in Jahren berechnet werden, dann erweitern Sie das Makro aus Listing 265 wie
in Listing 236 angegeben.
226 Minimal- und Maximalwerte ermitteln (DAO)
Sie knnen auch beim Einsatz von DAO beispielsweise ber das SQL-Schlsselwort TOP die
hchsten bzw. niedrigsten Werte aus einer Tabelle ziehen.
Beim folgenden Beispiel aus Listing 267 werden die fnf billigsten Artikel aus der Tabelle
Artikel ermittelt und im Direktfenster ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub MinWertFindenVar2Erweitert()
MsgBox DateDiff("YYYY", DMin("Geburtsdatum", "Personal"), Date)
End Sub
Listing 266: Rechnen ist auch mit DMin mglich.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub MinWerteFindenDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link] _
("SELECT TOP 5 Einzelpreis, Artikelname, " & _
"Lagerbestand FROM Artikel ORDER BY Einzelpreis", dbOpenSnapshot)
With rs
Do Until .EOF
[Link] "Artikelname: " & _
.Fields("Artikelname").Value & vbLf & _
"Lagerbestand: "; .Fields("Lagerbestand").Value & _
vbLf & "Einzelpreis: " & .Fields("Einzelpreis").Value & vbLf
.MoveNext
Loop
.Close
Listing 267: Die fnf billigsten Artikel ermitteln (DAO)
Sandini Bib
308 Tabellen programmieren
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Dann fhren Sie die Methode OpenRecordSet durch, um die Tabelle zu ff-
nen. Dabei wenden Sie eine SQL-Anweisung schon beim ffnen der Tabelle an, indem Sie
die SQL-Anweisung ("SELECT TOP 5 Einzelpreis, Artikelname, Lagerbestand FROM Artikel
ORDER BY Einzelpreis") ausfhren. Danach stehen die fnf billigsten Artikel im RecordSet-
Objekt rs. Dieses Objekt lesen Sie jetzt mithilfe einer Do until-Schleife aus und bertragen
die einzelnen Datenfelder ber die Auflistung Fields und die Anweisung [Link] in das
Direktfenster der Entwicklungsumgebung. Schlieen Sie die Tabelle ber die Methode Close
und heben Sie die Objektverweise auf.
227 Daten gruppieren (ADO)
Um komplexe Tabellen auszuwerten und dabei nach bestimmten Kriterien die Daten zu
gruppieren, setzen Sie die Klausel GROUP BY ein.
Die folgenden beiden Beispiele gehen von der Tabelle Gruppen aus, in der Mitarbeiter, Gehl-
ter und Arbeitsgruppenzugehrigkeit festgehalten werden. Den Aufbau dieser Tabelle ent-
nehmen Sie Abbildung 143.
Mchten Sie jetzt eine Auswertung haben, welche die Summen der Gehlter einer jeden
Arbeitsgruppe ermittelt, dann starten Sie das Makro aus Listing 268.
End With
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 143: Die Ausgangstabelle frs Gruppieren
Listing 267: Die fnf billigsten Artikel ermitteln (DAO) (Forts.)
Sandini Bib
Daten gruppieren (ADO) 309
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Soll das Ergebnis noch weiter eingeschrnkt werden, beispielsweise, dass nur Arbeitsgruppen
aufgelistet werden, die eine Gesamtsumme des Gehalts > 3000 haben, dann integrieren Sie
die SQL-Klausel HAVING. Die Umsetzung dieser Klausel knnen Sie in Listing 269 sehen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeGruppieren()
Dim DBS As [Link]
On Error GoTo fehler
Set DBS = [Link] _
("SELECT Arbeitsgruppe, sum(Gehalt) FROM Gruppen GROUP BY Arbeitsgruppe" _
, , adCmdText)
[Link] [Link]
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 268: Die Gehlter nach Arbeitsgruppe summieren und gruppieren
Abbildung 144: Die Gesamtgehlter pro Arbeitsgruppe
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Listing 269: Die Gruppierung einschrnken
Sandini Bib
310 Tabellen programmieren
228 Datenstze in einer Tabelle finden (ADO)
Die Methode Find sucht in der Tabelle nach dem Datensatz, der den angegebenen Kriterien
entspricht. Ist das Kriterium erfllt, wird der gefundene Datensatz zum aktuellen Datensatz
der Tabelle. Andernfalls wird der Zeiger auf das Ende des Tabelle festgelegt. Die Syntax dieser
Methode lautet:
Find (criteria, SkipRows, searchDirection, start)
Sub DatenstzeGruppieren2()
Dim DBS As [Link]
On Error GoTo fehler
Set DBS = _
[Link] _
("SELECT Arbeitsgruppe, sum(Gehalt) FROM Gruppen " & _
" GROUP BY Arbeitsgruppe HAVING SUM(Gehalt)> 3000" _
, , adCmdText)
[Link] [Link]
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 145: Es werden nur noch bestimmte Arbeitsgruppen angezeigt.
Argument Beschreibung
Criteria
In diesem Argument mssen Sie angeben, was Sie konkret in der
Tabelle suchen mchten.
SkipRows
ber dieses Argument knnen Sie den Abstand vom aktuellen
Datensatz oder vom Argument start angeben.
Tabelle 95: Die Argumente der Methode Find
Listing 269: Die Gruppierung einschrnken (Forts.)
Sandini Bib
Datenstze in einer Tabelle finden (ADO) 311
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 270 wird eine Artikelbezeichnung ber eine Inputbox
erfasst. Danach ffnen Sie die Tabelle ARTIKEL und durchsuchen Sie diese Tabelle. Wird der
gesuchte Artikel gefunden, dann wird der entsprechende Artikel im Direktfenster ausgege-
ben.
SearchDirection
Dieses Argument gibt an, wie in der Tabelle gesucht werden soll.
Dazu stehen Ihnen folgende Varianten zur Verfgung:
adSearchForward: fhrt die Suche vorwrts durch. Die Suche ist am
Ende der Tabelle beendet, sofern kein entsprechender Datensatz
gefunden wurde.
adSearchBackward: fhrt die Suche rckwrts durch. Die Suche hrt
am Anfang der Tabelle auf, sofern kein entsprechender Datensatz
gefunden wurde.
Start
Bei diesem Argument knnen Sie einen numerischen Wert nennen,
der angibt, bei welchem Datensatz die Suche in der Tabelle beginnen
soll.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatensatzFinden()
Dim DBS As [Link]
Dim strEingabe As String
strEingabe = _
InputBox("Geben Sie den Artikel ein!")
If strEingabe = "" Then Exit Sub
strEingabe = "Artikelname='" & strEingabe & "'"
On Error GoTo fehler
Set DBS = New [Link]
With DBS
.Open Source:="Artikel", _
ActiveConnection:=[Link], _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
.Find Criteria:=strEingabe, SearchDirection:=adSearchForward
If Not .EOF Then
Do While Not .EOF
Listing 270: Datensatz finden
Argument Beschreibung
Tabelle 95: Die Argumente der Methode Find (Forts.)
Sandini Bib
312 Tabellen programmieren
Im ersten Schritt fragen Sie ber eine Eingabemaske die Artikelbezeichnung ab, nach der in
der Tabelle Artikel gesucht werden soll. Bilden Sie den Suchbegriff im Anschluss daran. Ach-
ten Sie darauf, dass der Suchbegriff sowohl aus dem eigentlichen Suchbegriff als auch dem
Feldnamen der Tabelle gebildet werden muss.
ffnen Sie die Access-Datenbank mithilfe des Objekts Connection. Zum ffnen einer Access-
Datenbank brauchen Sie die Jet-Datenbank-Engine. Geben Sie daher mit der Eigenschaft
Provider die Engine Microsoft Jet 4.0 OLE DB-Provider an.
Im Argument ConnectionString geben Sie den Namen der Datenbank an, die Sie ffnen
mchten.
Definieren Sie daraufhin ein RecordSet-Objekt, das spter den gesuchten Datensatz enthalten
soll. ffnen Sie jetzt ber die Methode Open die Tabelle Artikel. Diese Methode hat folgende
Syntax:
[Link] Source, ActiveConnection, CursorType, LockType, Options
Im Argument Source geben Sie den Namen der Tabelle an, die Sie ffnen mchten. Im Argu-
ment ActiveConnection verweisen Sie auf das Connection-Objekt Conn, welches Sie vorher
angegeben haben.
ber das Argument CursorType bestimmen Sie die Art des Cursors. Unter anderem wird
dadurch der Zugriff auf Ihre Daten festgelegt. Dabei stehen Ihnen folgende Konstanten zur
Verfgung:
adOpenForwardOnly (Voreinstellung): ffnet einen Vorwrtscursor. Mithilfe dieses Cursors
knnen Sie nur nach vorne blttern.
[Link] "Artikelname:" & _
.Fields("Artikelname").Value
[Link] "Einzelpreis :" & _
.Fields("Einzelpreis").Value
[Link] "Lagerbestand: " & _
.Fields("Lagerbestand").Value
.Find Criteria:=strEingabe, SkipRecords:=1
Loop
Else
MsgBox "Datensatz nicht gefunden"
End If
.Close
End With
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 270: Datensatz finden (Forts.)
Sandini Bib
Datenstze in einer Tabelle finden (ADO) 313
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
adOpenKeyset: ffnet einen Cursor vom Typ Schlsselgruppen. Dieser Cursor ist ver-
gleichbar mit dem dynamischen Cursor. Jedoch werden bei diesem Cursor nderungen
in der Tabelle, die von anderen Anwendern durchgefhrt werden, nicht angezeigt.
adOpenDynamic: ffnet einen dynamischen Cursor. Damit haben Sie die Mglichkeit,
Tabelleneintrge zu anzuzeigen, zu ndern und zu lschen. Alle nderungen werden
regelmig aktualisiert und angezeigt.
adOpenStatic: ffnet einen statischen Cursor. Bei diesem Cursor knnen die Daten nur
angezeigt, jedoch nicht gendert werden. Die Datenansicht ist als Momentaufnahme des
Zustands zu verstehen, der zum Zeitpunkt des ffnens der Tabelle vorgelegen hat.
ber das Argument LockType bestimmen Sie, welches Sperrverfahren der Provider beim ff-
nen der Tabelle einsetzen soll. Dabei stehen Ihnen folgende Konstanten zur Verfgung:
adLockReadOnly: Bei dieser Standardeinstellung knnen Sie die Daten in der Tabelle nicht
ndern.
adLockPessimistic: Der Datensatz wird vollstndig gesperrt. Dabei wird das erfolgreiche
Bearbeiten der Datenstze sichergestellt, indem der Provider Datenstze in der Daten-
quelle sofort beim Bearbeiten sperrt.
adLockOptimistic: Diese Einstellung sorgt dafr, dass die Tabelle teilweise gesperrt wird,
d.h., ein Datensatz wird nur dann gesperrt, wenn Sie die Update-Methode aufrufen.
adLockBatchOptimistic: Diese Einstellung lsst eine teilweise Stapelaktualisierung zu.
Im letzten Argument Options knnen Sie festlegen, wie der Provider die Daten auswerten
soll.
Setzen Sie jetzt die Methode Find ein. Diese Methode sucht in der Tabelle nach dem Daten-
satz, der den angegebenen Kriterien entspricht. Ist das Kriterium erfllt, wird der gefundene
Datensatz zum aktuellen Datensatz der Tabelle. Andernfalls wird der Zeiger auf das Ende des
Tabelle festgelegt.
In der ersten Verzweigung fragen Sie direkt nach, ob der gesuchte Satz gefunden wurde. Ist
dies nicht der Fall, wird die Bedingung EOF (End Of File) erreicht. Wurde der gesuchte Daten-
satz gefunden, stehen alle Informationen hierber in der Objektvariablen DBS.
Da es mglich ist, dass der gesuchte Artikel mehrfach in der Tabelle vorkommt, setzen Sie
eine Schleife auf, die so lange durchlaufen wird, bis das Ende der Tabelle erreicht wird.
Danach knnen Sie die einzelnen Werte ber das Auflistungsobjekt Fields abrufen. In die-
sem Objekt stehen alle Feldinhalte, die Sie mithilfe der Eigenschaft Value ausgeben knnen.
Achten Sie bei der Ausgabe darauf, dass Sie den Feldnamen, den Sie im Entwurfsmodus der
Tabelle ansehen knnen, mit angeben.
Sandini Bib
314 Tabellen programmieren
229 Datenstze in einer Tabelle finden (DAO)
Das Suchen von Daten unter DAO wird ber die Methoden FindFirst, FindNext, FindLast
und FindPrevious durchgefhrt. Die Unterschiede der einzelnen Methoden sind in der
Tabelle 96 dargestellt. Alle Find-Methoden knnen Sie fr die RecordSet-Typen SnapShot und
DynaSet verwenden.
Ein Suchtreffer
Beim Beispiel aus Listing 271 wird die Tabelle Kunden nach einer bestimmten Kontaktperson
durchsucht.
Abbildung 146: Der Datensatz Outback Lager wurde gefunden.
Methode Suche beginnt am Bis zum
FindFirst
Beginn der Datensatzgruppe Ende der Datensatzgruppe
FindLast
Ende der Datensatzgruppe Beginn der Datensatzgruppe
FindNext
Aktuellen Datensatz Ende der Datensatzgruppe
FindPrevious
Aktuellen Datensatz Beginn der Datensatzgruppe
Tabelle 96: Die Unterschiede der Find-Methoden
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzeFindenDAO()
Dim DBS As [Link]
Dim rs As [Link]
Set DBS = [Link]
Set rs = [Link]("Kunden", dbOpenDynaset)
[Link] "Kontaktperson = 'Victoria Ashworth'"
If [Link] = True Then
Listing 271: Datensatz finden ber DAO
Sandini Bib
Datenstze in einer Tabelle finden (DAO) 315
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt zwei Objekte: eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Danach fhren Sie die Methode OpenRecordSet durch, um die Tabelle zu
ffnen.
Wenden Sie die Methode FindFirst an, um den gewnschten Datensatz in der Tabelle zu fin-
den. bergeben Sie dazu den Namen der Kontaktperson. ber die Eigenschaft NoMatch kann
festgestellt werden, ob berhaupt ein passender Datensatz gefunden werden konnte. Bei
einer erfolgreichen Suche greifen Sie auf die einzelnen Felder ber die Auflistung Fields zu
und geben Sie ber die Anweisung [Link] im Direktfenster der Entwicklungsumgebung
aus.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
MsgBox "Kontaktperson konnte nicht gefunden werden!"
Else
[Link] [Link]("Firma").Value
[Link] [Link]("Kontaktperson").Value
[Link] [Link]("Strae").Value
[Link] [Link]("Ort").Value
[Link] [Link]("Land").Value & vbLf
End If
[Link]
Set rs = Nothing
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 147: Die Kontaktperson konnte gefunden werden.
Listing 271: Datensatz finden ber DAO (Forts.)
Sandini Bib
316 Tabellen programmieren
Mehrere Suchtreffer
Selbstverstndlich gibt es auch Suchdurchlufe, bei denen mehrere Datenstze gefunden
werden knnen. So wird beim folgenden Beispiel aus Listing 272 eine Suche in der Tabelle
Kunden durchgefhrt, bei der alle Kunden aus Deutschland gefunden und im Direktfenster der
Entwicklungsumgebung ausgegeben werden.
Bei der Suche nach mehreren Datenstzen finden Sie den ersten Satz ber die Methode
FindFirst. Dabei bergeben Sie im Suchbegriff sowohl den Feldnamen als auch den gesuch-
ten Feldinhalt. Danach setzen Sie eine Schleife auf, die so lange durchlaufen wird, bis kein
Datensatz mehr gefunden werden kann. In diesem Fall meldet die Eigenschaft NoMatch den
Wert True. Innerhalb der Schleife bertragen Sie die einzelnen Feldinhalte ber die Aufli-
stung Fields und geben diese im Direktfenster aus. Mit der Methode FindNext finden Sie
jeweils den nchsten Datensatz, der den Suchkriterien entspricht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub MehrereDatenstzeFindenDAO()
Dim DBS As [Link]
Dim rs As [Link]
Set DBS = [Link]
Set rs = [Link]("Kunden", dbOpenDynaset)
[Link] "Land = 'Deutschland'"
Do Until [Link] = True
[Link] [Link]("Firma").Value
[Link] [Link]("Kontaktperson").Value
[Link] [Link]("Strae").Value
[Link] [Link]("Ort").Value
[Link] [Link]("Land").Value & vbLf
[Link] "Land = 'Deutschland'"
Loop
[Link]
Set rs = Nothing
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 272: Mehrere Datenstze suchen ber DAO
Sandini Bib
Datenstze in einer Tabelle finden (DAO) 317
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
Mehrere Bedingungen bei der Suche bercksichtigen
Wenn Sie nach mehreren Bedingungen suchen mchten, die zutreffen sollen, dann arbeiten
Sie mit den Operatoren AND bzw. OR.
Im folgenden Beispiel aus Listing 273 werden in der Tabelle Kunden alle Kunden aus Deutschland
gesucht, die in Stuttgart ansssig sind.
Abbildung 148: Alle Kunden aus Deutschland wurden gefunden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub MehrereDatenstzeFindenDAO2()
Dim DBS As [Link]
Dim rs As [Link]
Set DBS = [Link]
Set rs = [Link]("Kunden", dbOpenDynaset)
[Link] "Land = 'Deutschland' AND Ort = 'Stuttgart'"
Do Until [Link] = True
[Link] [Link]("Firma").Value
[Link] [Link]("Kontaktperson").Value
[Link] [Link]("Strae").Value
Listing 273: Mehrere Suchkriterien bercksichtigen (DAO)
Sandini Bib
318 Tabellen programmieren
ber die Methode FindFirst finden Sie den ersten Datensatz, der dem angegebenen Krite-
rium entspricht. Danach setzen Sie eine Do Until-Schleife auf, in der Sie die Suche so lange
wiederholen, bis kein Datensatz mehr gefunden werden kann, der dem Suchkriterium aus
der Methode FindNext entspricht. In diesem Fall meldet die Eigenschaft NoMatch den Wert
True.
230 Datenstze verndern (ADO)
Mithilfe der Methode Update knnen Sie eine nderung an einem Datensatz speichern.
Im folgenden Beispiel aus Listing 274 werden in der Tabelle Gruppen die Gehlter um 2,5%
erhht.
[Link] [Link]("Ort").Value
[Link] [Link]("Land").Value & vbLf
[Link] "Land = 'Deutschland' AND Ort = 'Stuttgart'"
Loop
[Link]
Set rs = Nothing
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub GehlterAnpassungVornehmen()
Dim DBS As [Link]
Set DBS = New [Link]
On Error GoTo fehler
[Link] "Gruppen", [Link], _
adOpenKeyset, adLockOptimistic
Do Until [Link]
DBS("Gehalt") = DBS("Gehalt") * 1.025
[Link]
[Link]
Listing 274: Gehaltsanpassung per Makro vornehmen
Listing 273: Mehrere Suchkriterien bercksichtigen (DAO) (Forts.)
Sandini Bib
Datenstze verndern (ADO) 319
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Da die Methoden zum ffnen einer Tabelle bereits beschrieben wurden, gehen wir gleich
mitten in die Schleife. Die Gehaltserhhung fhren Sie durch, indem Sie das Feld Gehalt mit
dem Faktor 1.025 multiplizieren. Gleich danach wenden Sie die Methode Update an, um diese
nderung wirksam werden zu lassen. Mit der Methode MoveNext gehen Sie zum nchsten
Datensatz der Tabelle. Diese Vorgehensweise fhren Sie so lange durch, bis Sie am letzten
Satz der Tabelle angelangt sind. Dann tritt die Schleifenbedingung EOF ein und die Schleife
wird verlassen. Vergessen Sie dann nicht, die Tabelle ber die Methode Close zu schlieen
und die Objektverweise wieder aufzuheben.
Eine zweite Variante, diese Aufgabe zu lsen, fhrt ber die Methode Execute. Dabei wird die
SQL-Anweisung dieser Methode bergeben. Sehen Sie sich dazu das Makro aus Listing 275
an.
Loop
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub GehaltsanpassungExtDB()
Dim Conn As [Link]
Dim intZ As Long
Dim strSQL As String
strSQL = "UPDATE Gruppen SET Gehalt = Gehalt * 1.025"
On Error GoTo fehler
Set Conn = New [Link]
With Conn
.Provider = "[Link].4.0"
.ConnectionString = _
"C:\Eigene Dateien\[Link]"
.Open
End With
Listing 275: Gehaltsanpassung in einer anderen Datenbank vornehmen (ADO)
Listing 274: Gehaltsanpassung per Makro vornehmen (Forts.)
Sandini Bib
320 Tabellen programmieren
Formulieren Sie in der Variablen strSQL Ihre SQL-Anweisung. Nach dem ffnen der Daten-
bank bergeben Sie den Inhalt der Variablen strSQL der Methode Execute. Die Konstante
RecordsAffected gibt Ihnen die Anzahl der genderten Stze bekannt.
231 Datenstze verndern (DAO)
Sollen Datenstze ber DAO verndert werden, dann sehen Sie sich das Beispiel aus Listing
276 an. In diesem Beispiel werden alle Artikel der Tabelle ARTIKEL3 im Feld EINZELPREIS um
10% erhht.
[Link] CommandText:=strSQL, RecordsAffected:=intZ
[Link] "Ersetzte Datenstze: " & intZ
[Link]
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzendernDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("Artikel3", dbOpenDynaset)
With rs
.MoveFirst
Do Until [Link]
[Link]
[Link]("Einzelpreis").Value = [Link]("Einzelpreis").Value * 1.1
[Link]
.MoveNext
Loop
Listing 276: Datenfelder verndern mit DAO
Listing 275: Gehaltsanpassung in einer anderen Datenbank vornehmen (ADO) (Forts.)
Sandini Bib
Whrungsumrechnungen vornehmen (ADO) 321
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. ffnen Sie im Anschluss mithilfe der Methode OpenRecordSet die Tabelle.
Wenden Sie die Methode MoveFirst an, um den ersten Satz in der Tabelle zu aktivieren.
In einer Do Until-Schleife durchlaufen Sie alle Datenstze der Tabelle so lange, bis die Eigen-
schaft EOF (End of File) erfllt ist. Innerhalb der Schleife wenden Sie die Methode Edit an, um
den Datensatz zu ndern. ber die Auflistung Fields greifen Sie auf das Feld Einzelpreis zu
und weisen diesem Feld einen neuen Wert zu. Danach setzen Sie die Methode Update ein, um
den Datensatz zu speichern. ber die Methode MoveNext stellen Sie nach jedem Schleifen-
durchlauf jeweils den nchsten Datensatz ein.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
232 Whrungsumrechnungen vornehmen (ADO)
Fr Whrungsumrechnungen stellt Ihnen Access eine eigene Funktion zur Verfgung. Mit-
hilfe der Funktion EuroConvert knnen Sie viele gngige Whrungen in den Euro umrech-
nen.
Die Funktion EuroConvert hat folgende Syntax:
EuroConvert(Zahl, Quellwhrung, Zielwhrung, [VolleGenauigkeit,
Trianguliergenauigkeit])
Das Argument Zahl enthlt den Wert, den Sie umrechnen mchten.
Im Argument Quellwhrung geben Sie die Whrung an, in der Ihr Ursprungswert vorliegt.
Hier mssen Sie den ISO-Code angeben, den Sie in der folgenden Tabelle sehen knnen.
.Close
End With
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Whrung ISO-Code Berechnungsgenauigkeit Anzeige
Belgische Franc BEF 0 0
Luxemburgische Franc LUF 0 0
Tabelle 97: Die Tabelle mit den ISO-Codes (Quelle: Online-Hilfe)
Listing 276: Datenfelder verndern mit DAO (Forts.)
Sandini Bib
322 Tabellen programmieren
Im Argument Zielwhrung geben Sie den ISO-Code der gewnschten Endwhrung an.
Beim Argument VolleGenauigkeit handelt es sich um ein optionales Argument. Setzen Sie
dieses Argument auf den Wert True, wenn die whrungsspezifischen Rundungsvorschriften
ignoriert und der Umwandlungsfaktor mit sechs signifikanten Ziffern ohne anschlieende
Rundung verwendet werden sollen. Setzen Sie dieses Argument auf den Wert False, um die
whrungsspezifischen Rundungsvorschriften anzuwenden. Wird der Parameter nicht ange-
geben, ist der Standardwert False.
Im letzten Argument Trianguliergenauigkeit knnen Sie einen Wert grer als oder gleich 3
angeben. Damit wird die Anzahl der signifikanten Ziffern in der Berechnungsgenauigkeit
bestimmt, die fr den Euro-Zwischenwert verwendet wird, wenn zwischen zwei nationalen
Whrungen umgewandelt wird.
Um diese Funktion in einem praktischen Beispiel zu ben, wird die Tabelle BestellungenAlt,
in der die Whrungsangaben noch in DM erfasst sind, in die neue Whrung Euro umgewan-
delt.
Deutsche Mark DEM 2 2
Spanische Peseten ESP 0 0
Franzsische Franc FRF 2 2
Irisches Pfund IEP 2 2
Italienische Lire ITL 0 0
Niederlndische Gulden NLG 2 2
sterreichische Schilling ATS 2 2
Portugiesische Escudos PTE 1 2
Finnische Mark FIM 2 2
Euro EUR 2 2
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub EuroUmrechnen()
Dim Conn As [Link]
Dim DBS As [Link]
Listing 277: Whrungsumrechnungen durchfhren (ADO)
Whrung ISO-Code Berechnungsgenauigkeit Anzeige
Tabelle 97: Die Tabelle mit den ISO-Codes (Quelle: Online-Hilfe) (Forts.)
Sandini Bib
Whrungsumrechnung vornehmen (DAO) 323
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ffnen Sie die Tabelle BestellungenAlt ber die Methode Open. Danach durchlaufen Sie in
einer Schleife alle darin enthaltenen Datenstze. Innerhalb der Schleife wenden Sie die Funk-
tion EuroConvert an, um die Whrungsumrechnung durchzufhren. bergeben Sie dabei
dieser Funktion das Datenfeld, welches umgerechnet werden soll, sowie die momentane und
die gewnschte Whrung.
233 Whrungsumrechnung vornehmen (DAO)
Die Funktion EuroConvert kann auch mit DAO eingesetzt werden.
Im folgenden Makro aus Listing 278 werden alle Einzelpreise der Tabelle ARTIKEL1 von DM
auf Euro umgestellt.
On eror GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
[Link] "BestellungenAlt", Conn, adOpenKeyset, adLockOptimistic
Do While Not [Link]
DBS![Einzelpreis] = EuroConvert(DBS![Einzelpreis], "DEM", "EUR")
[Link]
Loop
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub EuroUmrechnenDAO()
Dim DBS As [Link]
Dim rs As [Link]
Listing 278: Whrungsumstellung vornehmen (DAO)
Listing 277: Whrungsumrechnungen durchfhren (ADO) (Forts.)
Sandini Bib
324 Tabellen programmieren
Der nderungsprozess geht so vor sich, dass zuerst der entsprechende Satz ber die Methode
Edit in den Editiermodus versetzt wird. Danach wenden Sie die Funktion EuroConvert an, um
die Umrechnung im Feld EINZELPREIS durchzufhren. Anschlieend speichern Sie die nde-
rung, indem Sie die Methode Update einsetzen. In einer Do until-Schleife arbeiten Sie so alle
Datenstze der Tabelle ab, bis die Eigenschaft EOF erfllt ist.
234 Datenstze filtern (ADO)
Um Daten aus einer Tabelle zu filtern, setzen Sie die Eigenschaft Filter ein. Als Argumente
knnen Sie dabei problemlos auch mehrere Bedingungen angeben, die Sie dann ber die
Operatoren And oder Or miteinander verbinden
Filtern nach bestimmten Artikeln
Im nchsten Beispiel aus Listing 269 werden in der Tabelle Artikel alle Artikel im Direkt-
bereich ausgegeben, deren Lagerbestand > 20 und deren Einzelpreis >= 30 ist.
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("Artikel1", dbOpenTable, dbOpenDynaset)
With rs
.MoveFirst
Do While Not .EOF
.Edit
.Fields("Einzelpreis").Value = _
EuroConvert(.Fields("Einzelpreis").Value, "DEM", "EUR")
.Update
.MoveNext
Loop
.Close
End With
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 278: Whrungsumstellung vornehmen (DAO) (Forts.)
Sandini Bib
Datenstze filtern (ADO) 325
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Eigenschaft Filter das Filterkriterium. Dabei arbeiten Sie bei numeri-
schen Feldern mit den Zeichen =, < und >. In einer Do While-Schleife geben Sie danach die
gefundenen Artikel im Direktfenster der Entwicklungsumgebung aus.
Filtern nach bestimmten Kunden
Im Makro aus Listing 280 werden aus der Tabelle Kunden alle Kunden gefiltert, die aus den USA
oder Kanada kommen. Beachten Sie dabei die Schreibweise des Filterkriteriums.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeFiltern()
Dim Conn As [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
With DBS
.Open "Artikel", Conn, adOpenKeyset, adLockOptimistic
.Filter = "Lagerbestand > 20 AND Einzelpreis >= 30"
Do While Not .EOF
[Link] .Fields("Artikelname").Value
.MoveNext
Loop
.Close
End With
[Link]
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 279: Datenstze ber den Filter nher einschrnken
Sandini Bib
326 Tabellen programmieren
Abbildung 149: Alle Artikel, die dem Filterkriterium entsprechen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeFiltern2()
Dim Conn As [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
With DBS
.Open "Kunden", Conn, adOpenKeyset, adLockOptimistic
.Filter = "Land = 'USA' OR Land = 'Kanada'"
Do While Not .EOF
[Link] .Fields("Kontaktperson").Value
[Link] .Fields("Ort").Value & vbLf
.MoveNext
Loop
.Close
End With
[Link]
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
Listing 280: Das Filtern von alphanumerischen Feldern (ADO)
Sandini Bib
Datenstze filtern (DAO) 327
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Bei alphanumerischen Feldern mssen Sie darauf achten, dass Sie die Filterkriterien in Apo-
strophe setzen.
235 Datenstze filtern (DAO)
Soll eine Filterung von Daten aus einer Tabelle ber den Einsatz von DAO durchgefhrt wer-
den, dann knnen Sie auch hier auf SQL-Anweisungen zugreifen.
Im Beispiel aus Listing 281 werden in der Tabelle Artikel alle Datenstze gefiltert, die einen
Einzelpreis von ber 30 Euro und einen Lagerbestand von ber 10 Stck aufweisen.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 150: Kunden aus den USA oder Kanada
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzeFilternDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Listing 281: Datenstze filtern (DAO)
Listing 280: Das Filtern von alphanumerischen Feldern (ADO) (Forts.)
Sandini Bib
328 Tabellen programmieren
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Anschlieend ffnen Sie mithilfe der Methode OpenRecordSet die Tabelle.
Dabei erfassen Sie bereits direkt beim ffnen der Tabelle die SQL-Anweisung. Als Ergebnis
stehen nun alle Datenstze der Tabelle im RecordSet-Objekt rs und knnen dort abgegriffen
werden.
In einer Do While-Schleife durchlaufen Sie alle Datenstze des RecordSet so lange, wie die
Eigenschaft EOF (End of File) noch nicht erfllt ist. Innerhalb der Schleife greifen Sie ber die
Auflistung Fields auf die einzelnen Felder zu. ber die Methode MoveNext stellen Sie nach
jedem Schleifendurchlauf jeweils den nchsten Datensatz des RecordSet-Objekts ein.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
236 Datenstze zhlen (ADO)
Mchten Sie ermitteln, wie viele Stze sich in Ihrer Tabelle befinden, dann setzen Sie die
Eigenschaft RecordCount ein. Diese Eigenschaft gibt die Anzahl der Datenstze einer angege-
benen Tabelle aus.
Zhlen ber die Eigenschaft RecordCount
Im folgenden Beispiel aus Listing 282 wird die Anzahl der Datenstze der Tabelle Kunden
ermittelt.
Set DBS = [Link]
Set rs = [Link]("SELECT * " & _
"FROM Artikel WHERE Einzelpreis>30 and Lagerbestand > 10", dbOpenSnapshot)
With rs
Do While Not .EOF
[Link] "Artikel-Nr: " & .Fields("Artikel-Nr").Value & vbLf & _
"Artikelname: " & .Fields("Artikelname").Value & vbLf & _
"Einzelpreis: " & .Fields("Einzelpreis").Value & vbLf & _
"Lagerbestand: " & .Fields("Lagerbestand").Value & vbLf
.MoveNext
Loop
.Close
End With
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 281: Datenstze filtern (DAO) (Forts.)
Sandini Bib
Datenstze zhlen (ADO) 329
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 151: Die Daten wurden gefiltert und ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeZhlen()
Dim Conn As [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
With DBS
.Open "Kunden", Conn, adOpenKeyset, adLockOptimistic
MsgBox "In der Tabelle befinden sich " & [Link] & " Datenstze"
.Close
End With
[Link]
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
Listing 282: Datenstze zhlen Variante 1 (ADO)
Sandini Bib
330 Tabellen programmieren
Zhlen ber die Funktion DCount
Eine etwas krzere Variante bietet die Funktion DCount aus Listing 283.
bergeben Sie der Funktion DCount als erstes Argument das Feld, das Sie zhlen mchten. Im
zweiten Argument geben Sie den Namen der Tabelle an, auf die Sie zugreifen mchten.
Gefilterte Datenstze zhlen
Bei den letzten beiden Makros wurden jeweils alle Datenstze der Tabelle Kunden gemeldet.
Die Eigenschaft RecordCount knnen Sie beispielsweise auch auf eine begrenzte Gruppe von
Datenstzen anwenden. Stellen Sie sich einmal vor, Sie mchten die Anzahl der Kunden
bestimmen, die aus Grobritannien oder Frankreich kommen. Sehen Sie sich die Lsung die-
ser Aufgabe in Listing 284 an.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeZhlenVar2()
MsgBox "Es befinden sich : " & _
DCount("Firma", "Kunden") & _
" Datenstze in der Tabelle!", vbInformation
End Sub
Listing 283: Datenstze zhlen Variante 2 (ADO)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeFilternUndZhlen()
Dim Conn As [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
Listing 284: Datenstze filtern und zhlen (ADO)
Listing 282: Datenstze zhlen Variante 1 (ADO) (Forts.)
Sandini Bib
Datenstze zhlen (ADO) 331
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Nachdem Sie das Filterkriterium eingestellt haben, durchlaufen Sie in einer Do While-Schleife
alle gefundenen Datenstze und geben Sie ber die Auflistung Fields und die Anweisung
[Link] im Direktfenster der Entwicklungsumgebung aus. Am Ende ermitteln Sie die
Gesamtzahl der gefundenen Datenstze ber die Eigenschaft RecordCount.
With DBS
.Open "Kunden", Conn, adOpenKeyset, adLockOptimistic
.Filter = "Land = 'Grobritannien' or Land='Frankreich'"
Do While Not .EOF
[Link] .Fields("Kontaktperson").Value
[Link] .Fields("Land").Value
[Link] .Fields("Ort").Value & vbLf
.MoveNext
Loop
MsgBox "In der Tabelle befinden sich " & _
[Link] & " Datenstze"
.Close
End With
[Link]
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 152: Kunden aus Grobritannien und Frankreich
Listing 284: Datenstze filtern und zhlen (ADO) (Forts.)
Sandini Bib
332 Tabellen programmieren
237 Datenstze zhlen (DAO)
Auch die Zhlung von Datenstzen einer Tabelle funktioniert bei DAO ber die Eigenschaft
RecordCount.
Einfache Zhlung vornehmen
Im folgenden Beispiel aus Listing 285 werden die Datenstze der Tabelle ARTIKEL gezhlt.
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Anschlieend ffnen Sie mithilfe der Methode OpenRecordSet die Tabelle.
Danach knnen Sie ber die Eigenschaft RecordCount die Anzahl der Datenstze in der
Tabelle zhlen. Am Ende des Makros schlieen Sie die Tabelle und heben die Objektverweise
wieder auf.
Zhlung nach Filterung durchfhren
Beim folgenden Beispiel aus Listing 286 werden in der Tabelle Kunden vorher alle Kunden aus
den USA und Kanada gefiltert und danach im Direktfenster ausgegeben und gezhlt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzeZhlenDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("Artikel", dbOpenTable, dbReadOnly)
With rs
MsgBox "In der Tabelle befinden sich " & _
.RecordCount & " Datenstze"
.Close
End With
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 285: Datenstze zhlen (DAO)
Sandini Bib
Datenstze zhlen (DAO) 333
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. ffnen Sie die Tabelle anschlieend mithilfe der Methode OpenRecordSet.
Dabei wenden Sie eine SQL-Anweisung schon beim ffnen der Tabelle an, indem Sie die
Kunden aus den USA und Kanada herausfiltern.
Jetzt knnen Sie ber die Eigenschaft RecordCount die Anzahl der Datenstze in der Tabelle
feststellen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzeFilternUndZhlenDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("SELECT * " & _
"FROM Kunden WHERE Land = 'Kanada' OR Land= 'USA'", dbOpenSnapshot)
With rs
Do While Not .EOF
[Link] .Fields("Kontaktperson").Value
[Link] .Fields("Land").Value
[Link] .Fields("Ort").Value & vbLf
.MoveNext
Loop
MsgBox "In der Tabelle befinden sich " & .RecordCount & " Datenstze"
.Close
End With
Set DBS = Nothing
Set rs = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 286: Datenstze filtern und zhlen (DAO)
Sandini Bib
334 Tabellen programmieren
238 Datenstze summieren
Zum Summieren von Datenstzen steht Ihnen die Funktion Dsum zur Verfgung. Diese Funk-
tion kann sowohl fr ADO als auch fr DAO eingesetzt werden.
Im Beispiel aus Listing 287 wird die Tabelle Bestelldetails ausgewertet. Dabei soll der
Gesamtwert aller Bestellungen ermittelt werden.
Mit der Funktion DSum knnen Sie die Summe einer Gruppe von Werten in einer bestimmten
Datensatzgruppe (Domne) berechnen. bergeben Sie der Funktion den Namen der Tabelle
sowie des Datenfelds, dessen Summe Sie berechnen mchten. Im Anhang knnen Sie eine
Auflistung weiterer D-Funktionen einsehen.
239 Datenstze klonen (ADO)
Die Methode Clone erstellt eine Kopie eines Recordset-Objekts, die auf das Original des
Recordset-Objekts verweist. Die Syntax dieser Methode lautet:
Set Kopie = [Link]
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub GesamtsummeErmitteln()
On Error GoTo fehler
MsgBox "Die Gesamtsumme aller Bestellungen betrgt: " & _
DSum("[Bestelldetails]![Einzelpreis]", "[Bestelldetails]")
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 287: Die Gesamtsumme aller Bestellungen ermitteln
Argument Beschreibung
Kopie
Erforderlich. Eine Objektvariable, die die Kopie des zu erstellen-
den Recordset-Objekts kennzeichnet.
Original
Erforderlich. Eine Objektvariable, die das zu kopierende
Recordset-Objekt kennzeichnet.
Tabelle 98: Die Argumente der Methode Clone
Sandini Bib
Datenstze klonen (ADO) 335
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 288 wird ein bestimmter Datensatz in der Tabelle Artikel
gesucht, dieser danach geklont und am Ende der Tabelle unter Vergabe einer neuen Artikel-
Nr eingefgt.
Im ersten Schritt geben Sie die SQL-Anweisung in einer String-Variablen bekannt. Danach
wenden Sie die Methode OpenRecordSet an, um ein neues RecordSet-Objekt zu erstellen. Der
gefundene Satz steht anschlieend in der Objektvariablen rst1 fr eine weitere Verarbeitung
bereit. ber die Methode Clone wird dieser Satz dupliziert und in der Objektvariablen rst2
zur Verfgung gestellt. Mithilfe der Methode AddNew wird ein neuer Datensatz der Tabelle
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatensatzClonen()
Dim rst1 As Recordset
Dim rst2 As Recordset
Dim strSql As String
Dim lngNr As Long
Dim intZ As Integer
On Error GoTo fehler
strSql = "Select * from Artikel where Artikelname='Outback Lager'"
Set rst1 = [Link](strSql)
Set rst2 = [Link]
With rst2
.AddNew
'bertragen der Felder
For intZ = 1 To .[Link] 1
rst2(intZ) = rst1(intZ)
Next intZ
'Ermitteln der letzten Artikel-Nr
lngNr = DMax("[Artikel-Nr]", "[Artikel]") + 1
[Link](0).Value = lngNr
.Update
.Close
End With
Set rst1 = Nothing
Set rst2 = Nothing
Exit Sub
fehler:
Msgbox [Link] & " " & [Link]
End Sub
Listing 288: Datensatz klonen und am Ende der Tabelle anhngen (ADO)
Sandini Bib
336 Tabellen programmieren
angefgt. Im Anschluss daran werden die Feldinhalte von rst1 nach rst2 bertragen. Mit-
hilfe der Funktion DMax wird die letzte vergebene Artikelnummer in der Tabelle gesucht und
um den Wert 1 erhht. Die Methode Update sorgt dafr, dass dieser neue Datensatz gespei-
chert wird.
240 Datenstze klonen (DAO)
Das Beispiel aus Listing 288 wird im Makro aus Listing 289 ber den Einsatz von DAO gelst.
Abbildung 153: Der geklonte Datensatz wurde am Ende der Tabelle eingefgt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatensatzClonenDAO()
Dim DBS As [Link]
Dim rst1 As [Link]
Dim rst2 As [Link]
Dim lngNr As Long
Dim intZ As Integer
On Error GoTo fehler
Set DBS = [Link]
Set rst1 = [Link] _
("Select * from ARTIKEL where ARTIKELNAME='Outback Lager'", dbOpenDynaset)
Set rst2 = [Link]
With rst2
.AddNew
'bertragen der Felder
Listing 289: Datensatz klonen und am Ende der Tabelle anhngen (DAO)
Sandini Bib
Lesezeichen setzen (ADO) 337
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
241 Lesezeichen setzen (ADO)
Wenn Sie durch Ihre Tabelle navigieren, verndern Sie laufend die aktuelle Position des
Datenzeigers. Mit der Eigenschaft Bookmark knnen Sie die Position des aktuellen Datensatzes
speichern und zu einem beliebigen Zeitpunkt zu diesem Datensatz zurckgehen. Dabei spei-
chern Sie diese Position in einer Variablen vom Typ Variant. Wie das genau funktioniert,
sehen Sie in Listing 290. Dort lesen Sie alle Datenstze aus der Tabelle Personal der Datenbank
[Link]. Dann setzen Sie ein Lesezeichen auf den ersten und den letzten Datensatz.
For intZ = 1 To .[Link] 1
rst2(intZ) = rst1(intZ)
Next intZ
'Ermitteln der letzten Artikel-Nr
lngNr = DMax("[Artikel-Nr]", "[Artikel]") + 1
[Link](0).Value = lngNr
.Update
.Close
End With
Set rst1 = Nothing
Set rst2 = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub LesezeichenSetzen()
Dim Conn As [Link]
Dim DBS As [Link]
Dim varLZ1 As Variant
Dim varLZ2 As Variant
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
With DBS
.Open Source:="SELECT Nachname,Vorname FROM Personal " & _
"ORDER BY Nachname", ActiveConnection:=[Link], _
Listing 290: Lesezeichen setzen
Listing 289: Datensatz klonen und am Ende der Tabelle anhngen (DAO) (Forts.)
Sandini Bib
338 Tabellen programmieren
ffnen Sie im ersten Schritt die Tabelle Personal und verwenden Sie dabei eine SELECT-
Anweisung. Whlen Sie alle Datenstze der Tabelle aus und sortieren Sie diese mithilfe des
Arguments ORDER BY. Danach springen Sie ber die Methode MoveLast zum letzten Datensatz
der Tabelle. Dort angekommen speichern Sie die augenblickliche Position in der Variablen
VarLZ1 und geben diese Position und den dazugehrigen Nachnamen des Mitarbeiters im
Direktbereich aus. Wenden Sie jetzt die Methode MoveFirst an, um zum ersten Datensatz in
der Tabelle zu gelangen. Speichern Sie auch hier die aktuelle Position in einer Variablen mit
dem Namen varLZ2. Geben Sie diese Position und den dazugehrigen Namen wiederum zur
Kontrolle im Direktbereich aus.
Mit der Anweisung [Link] = varLZ1 springen Sie direkt wieder an Ihr vorher gesetztes
Lesezeichen und geben die Position und den Nachnamen im Direktfenster aus.
242 Datenstze lschen (ADO)
ber den Einsatz der Methode Delete knnen Sie Datenstze aus einer Tabelle lschen. Die
Syntax dieser Methode lautet:
[Link] AffectRecords
CursorType:=adOpenStatic, Options:=adCmdText
.MoveLast
varLZ1 = .Bookmark
[Link] "Letzter gefundener Satz: " & varLZ1
[Link] .Fields("Nachname") & Chr(13)
.MoveFirst
varLZ2 = .Bookmark
[Link] "Erster gefundener Satz:" & varLZ2
[Link] .Fields("Nachname") & Chr(13)
[Link] = varLZ1
[Link] "Wieder zurck zu:" & varLZ1
[Link] .Fields("Nachname") & Chr(13)
.Close
End With
[Link]
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 290: Lesezeichen setzen (Forts.)
Sandini Bib
Datenstze lschen (ADO) 339
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 291 werden alle Datenstze aus der Tabelle Artikel ent-
fernt, die einen Lagerbestand von 0 aufweisen.
Abbildung 154: Lesezeichen setzen und aktivieren
Argument Beschreibung
recordset
Gibt ein Recordset-Objekt zurck.
AffectRecords
Optional. Hier knnen die zu lschenden Stze gezhlt werden.
Tabelle 99: Die Argumente der Methode Delete
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenstzeLschen()
Dim Conn As New [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
[Link] _
"Select * FROM Artikel2 where (Lagerbestand = 0)", _
Conn, adOpenKeyset, adLockOptimistic
Do Until [Link]
[Link]
[Link]
Loop
Listing 291: Datenstze lschen
Sandini Bib
340 Tabellen programmieren
Beim Lschen von Datenstzen aus einer Tabelle mssen Sie darauf achten, dass Sie mithilfe
der Methode MoveNext jeweils zum nchsten Datensatz springen.
243 Datenstze lschen (DAO)
Die Lschung von Datenstzen erfolgt bei DAO ber die Methode Delete.
Bestimmte Kunden lschen
Im Beispiel aus Listing 292 werden aus der Tabelle Kunden2 alle Kunden aus Deutschland
gelscht.
[Link]
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzeLschenDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("Kunden2", dbOpenDynaset)
With rs
.FindFirst "Land = 'Deutschland'"
Do Until .NoMatch = True
.Delete
.FindNext "Land = 'Deutschland'"
Loop
.Close
End With
Set DBS = Nothing
Listing 292: Datenstze lschen (DAO)
Listing 291: Datenstze lschen (Forts.)
Sandini Bib
Datenstze lschen (DAO) 341
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. ffnen Sie anschlieend die Tabelle mithilfe der Methode OpenRecordSet.
Wenden Sie die Methode FindFirst an, um den ersten Satz in der Tabelle zu finden, der dem
Suchkriterium entspricht.
In einer Do Until-Schleife durchlaufen Sie alle Datenstze der Tabelle so lange, bis kein
Datensatz mehr gefunden werden kann, der dem Suchkriterium entspricht. In diesem Fall
meldet die Eigenschaft NoMatch den Wert True. Innerhalb der Schleife wenden Sie die
Methode Delete an, um alle die Datenstze zu lschen, die dem Suchkriterium entsprechen.
ber die Methode FindNext finden Sie jeweils den nchsten Datensatz, der den Suchkriterien
entspricht.
Schlieen Sie am Ende des Makros die Tabelle ber die Methode Close und heben Sie die
Objektverweise auf.
Lager bereinigen
Im folgenden Beispiel aus Listing 293 werden in der Tabelle Artikel3 alle Datenstze
gelscht, die einen Lagerbestand von 0 haben.
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatenstzeLschenDAO2()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("Artikel3", dbOpenDynaset)
With rs
.MoveFirst
Listing 293: Datenstze mit Nullbestand lschen (DAO)
Listing 292: Datenstze lschen (DAO) (Forts.)
Sandini Bib
342 Tabellen programmieren
Deklarieren Sie im ersten Schritt zwei Objekte, eines vom Typ Database und eines vom Typ
Recordset. Danach weisen Sie die aktuelle Datenbank der Objektvariablen DBS ber die
Anweisung Set zu. Anschlieend fhren Sie die Methode OpenRecordSet durch, um die
Tabelle zu ffnen. Wenden Sie die Methode MoveFirst an, um den ersten Satz in der Tabelle
zu aktivieren.
In einer Do Until-Schleife durchlaufen Sie alle Datenstze der Tabelle so lange, bis die Eigen-
schaft EOF (End of File) erfllt ist. Innerhalb der Schleife wenden Sie die Methode Delete an,
um die Datenstze zu lschen, die einen Lagerbestand von 0 haben. ber die Methode Move-
Next stellen Sie nach jedem Schleifendurchlauf jeweils den nchsten Datensatz ein.
Schlieen Sie die Tabelle ber die Methode Close und heben Sie die Objektverweise auf.
244 Datenstze hinzufgen (ADO)
Durch den Einsatz der Methode AddNew knnen Sie einer Tabelle einen neuen Datensatz hin-
zufgen. Alles, was Sie dazu wissen mssen, sind die genauen Feldbezeichnungen, die Sie in
der Entwurfsansicht der Tabelle einsehen knnen.
Im folgenden Beispiel aus Listing 294 wird ein neuer Satz in die Tabelle Personal eingefgt.
Do Until [Link]
If [Link]("Lagerbestand").Value = 0 Then [Link]
.MoveNext
Loop
.Close
End With
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Listing 294: Neuen Datensatz hinzufgen und fllen (ADO)
Listing 293: Datenstze mit Nullbestand lschen (DAO) (Forts.)
Sandini Bib
Datenstze hinzufgen (ADO) 343
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Das erste Feld, die Personal-Nr brauchen Sie brigens nicht zu fllen. Dieses Feld weist den
Felddatentyp AUTOWERT auf, was bedeutet, dass Access selbst einen gltigen Wert vergibt. ber
die Methode AddNew wird ein neuer, noch leerer Datensatz in die Tabelle geschrieben. Danach
werden die Felder ber die Auflistung Fields gefllt. ber den Einsatz der Methode Update
wird der Datensatz gesichert. Die Methode Close schliet die Tabelle wieder.
Neue Daten aus Excel beziehen
Beim folgenden Beispiel aus Listing 295 wird die vorherige Aufgabe aus Listing 294 erweitert.
Dabei liegen die neuen Mitarbeiterdaten in einer Excel-Tabelle vor, die jetzt Zeile fr Zeile in
die Tabelle Personal eingelesen werden soll.
Die Excel-Tabelle mit dem Namen Mitarbeiter sieht dabei wie in Abbildung 156 gezeigt aus.
Sub DatensatzHinzufgen()
Dim Conn As New [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
With DBS
.Open "Personal", Conn, adOpenKeyset, adLockOptimistic
.AddNew
.Fields("Nachname") = "Held"
.Fields("Vorname") = "Bernd"
.Fields("Position") = "Externer Berater"
.Fields("Anrede") = "Herr"
.Fields("Geburtsdatum") = "02.04.1969"
.Fields("Einstellung") = "17.01.2002"
.Fields("Strae") = "Maybachstr. 35"
.Fields("Ort") = "Stuttgart"
.Fields("Region") = "BW"
.Fields("PLZ") = "70469"
.Fields("Land") = "Deutschland"
.Update
.Close
End With
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 294: Neuen Datensatz hinzufgen und fllen (ADO) (Forts.)
Sandini Bib
344 Tabellen programmieren
Abbildung 155: Der neue Mitarbeiter wurde am Ende der Tabelle eingefgt.
Abbildung 156: Die neuen Mitarbeiter liegen in einer Excel-Tabelle vor.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub DatenAusExcelTabelleHinzufgen()
Dim Conn As New [Link]
Dim DBS As [Link]
Dim xlApp As Object
Dim xlMappe As Object
Dim intz As Integer
On Error GoTo fehler
Set xlApp = CreateObject("[Link]")
Listing 295: Personaldaten aus einer Excel-Tabelle importieren
Sandini Bib
Datenstze hinzufgen (ADO) 345
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Funktion CreateObject erstellen Sie einen Verweis auf die Excel-Bibliothek. So
erhalten Sie Zugriff auf alle Methoden und Eigenschaften, die fr Excel-Objekte zur Verf-
gung stehen. Bei diesem Vorgang spricht man brigens vom Late-Binding. Nheres dazu
erfahren Sie in Kapitel 10 dieses Buchs.
ffnen Sie die Excel-Arbeitsmappe ber die Methode Open. Arbeiten Sie in einer Schleife Satz
fr Satz ab und bertragen Sie die Datenstze in die Access-Tabelle.
Set xlMappe = _
[Link]([Link] & "\[Link]")
Set Conn = [Link]
Set DBS = New [Link]
[Link] "Personal", Conn, adOpenKeyset, adLockOptimistic
For intz = 2 To [Link]("Personal").[Link]
With DBS
.AddNew
.Fields("Nachname") = [Link](1).cells(intz, 2).Value
.Fields("Vorname") = [Link](1).cells(intz, 3).Value
.Fields("Position") = [Link](1).cells(intz, 4).Value
.Fields("Anrede") = [Link](1).cells(intz, 5).Value
.Fields("Geburtsdatum") = [Link](1).cells(intz, 6).Value
.Fields("Einstellung") = [Link](1).cells(intz, 7).Value
.Fields("Strae") = [Link](1).cells(intz, 8).Value
.Fields("Ort") = [Link](1).cells(intz, 9).Value
.Fields("Region") = [Link](1).cells(intz, 10).Value
.Fields("PLZ") = [Link](1).cells(intz, 11).Value
.Fields("Land") = [Link](1).cells(intz, 12).Value
.Update
End With
Next intz
[Link]
[Link]
[Link]
Set DBS = Nothing
Set Conn = Nothing
Set xlMappe = Nothing
Set xlApp = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 295: Personaldaten aus einer Excel-Tabelle importieren (Forts.)
Sandini Bib
346 Tabellen programmieren
245 Datenstze hinzufgen (DAO)
Die Neuanlage von Datenstzen funktioniert in DAO ganz hnlich wie bei ADO. Im folgen-
den Beispiel aus Listing 296 wird ebenso ein neuer Satz der Tabelle Personal hinzugefgt.
Abbildung 157: Die neuen Daten wurden der Access-Tabelle hinzugefgt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub DatensatzHinzufgenDAO()
Dim DBS As [Link]
Dim rs As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set rs = [Link]("Personal", dbOpenDynaset)
With rs
.AddNew
.Fields("Nachname") = "Held"
.Fields("Vorname") = "Bernd"
.Fields("Position") = "Externer Berater"
.Fields("Anrede") = "Herr"
.Fields("Geburtsdatum") = "02.04.1969"
.Fields("Einstellung") = "17.01.2002"
.Fields("Strae") = "Maybachstr. 35"
.Fields("Ort") = "Stuttgart"
.Fields("Region") = "BW"
.Fields("PLZ") = "70469"
.Fields("Land") = "Deutschland"
.Update
.Close
End With
Listing 296: Neuen Datensatz anlegen (DAO)
Sandini Bib
Der Einsatz von ADOX und DAO 347
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Methode AddNew wird ein neuer, noch leerer Datensatz in die Tabelle geschrieben.
Danach werden die Felder ber die Auflistung Fields gefllt. ber den Einsatz der Methode
Update wird der Datensatz gesichert. Die Methode Close schliet die Tabelle wieder.
246 Der Einsatz von ADOX und DAO
Mchten Sie noch tiefer in die Materie einsteigen und an Tabellenstrukturen herumbasteln,
dann bentigen Sie die Bibliothek ADO EXTENSIONS FOR DDL AND SECURITY (ADOX). Die-
ses Objektmodell enthlt Objekte, Eigenschaften und Methoden zum Erstellen, Bearbeiten
und Anzeigen des Aufbaus von Tabellen. Binden Sie diese Bibliothek in der Entwicklungs-
umgebung ein, indem Sie aus dem Men EXTRAS den Befehl VERWEISE auswhlen, die Biblio-
thek aktivieren und mit OK besttigen.
247 Tabellennamen ermitteln
ber die Eigenschaft Type knnen Sie ermitteln, ob es sich bei einer Tabelle um eine System-
tabelle, eine normale Tabelle oder eine Ansicht handelt. Fr den Fall, dass es sich um eine
Tabelle handelt, gibt diese Eigenschaft den Text Table zurck.
Im folgenden Beispiel aus Listing 297 werden die unterschiedlichen Tabellentypen im
Direktfenster der Entwicklungsumgebung ausgegeben.
Set rs = Nothing
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub TabellenAusgeben()
Dim Katalog As [Link]
Dim TabInfo As [Link]
On Error GoTo fehler
Set Katalog = New [Link]
Listing 297: Alle Tabellentypen ermitteln
Listing 296: Neuen Datensatz anlegen (DAO) (Forts.)
Sandini Bib
348 Tabellen programmieren
Deklarieren Sie im ersten Schritt zwei ADOX-Objektvariablen. Im Catalog-Objekt sind unter
anderem alle Tabellen der Datenbank verzeichnet. Arbeiten Sie diese Tabellen mithilfe einer
For each Next-Schleife ab und ermitteln Sie den Namen sowie den Tabellentyp ber die
Eigenschaften Name und Type.
[Link] = _
"Provider=[Link].4.0;" & _
"Data Source= C:\Eigene Dateien\[Link]"
For Each TabInfo In [Link]
With TabInfo
[Link] "Name: " & vbTab & .Name & vbLf & _
"Typ:" & vbTab & .Type & vbLf
End With
Next TabInfo
Set TabInfo = Nothing
Set Katalog = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 158: Tabelle oder Abfrage
Listing 297: Alle Tabellentypen ermitteln (Forts.)
Sandini Bib
Tabelleneigenschaften auslesen 349
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
248 Tabelleneigenschaften auslesen
ber die ADOX-Bibliothek haben Sie Zugriff auf Tabelleneigenschaften wie beispielsweise
das Erstellungs- sowie das letzte nderungsdatum der Tabelle.
Im folgenden Beispiel aus Listing 298 wird das Erstellungsdatum sowie das letzte nderungs-
datum der Tabelle Artikel aus der Datenbank [Link] ermittelt und am Bildschirm
angezeigt.
Definieren Sie im ersten Schritt ein Objekt vom Typ Catalog. ber dieses Objekt knnen Sie
unter anderem auf alle Tabellen Ihrer Datenbank zugreifen. Danach geben Sie die Daten-
quelle ber die Eigenschaft ActiveConnection bekannt. Setzen Sie eine Schleife auf und
durchlaufen Sie alle Tabellen, die sich in Ihrer Datenbank befinden. Innerhalb der Schleife
ermitteln Sie den Namen, das Erstellungsdatum sowie das letzte nderungsdatum jeder
Tabelle und geben diese im Direktfenster aus. Heben Sie die Objektverknpfung am Ende
des Makros mithilfe der Anweisung Set Katalog = Nothing wieder auf.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub TabellenInfosAusgeben()
Dim Katalog As [Link]
Dim TabInfo As [Link]
On Error GoTo fehler
Set Katalog = New [Link]
[Link] = _
"Provider=[Link].4.0;" & _
"Data Source= C:\Eigene Dateien\[Link]"
Set TabInfo = [Link]("Artikel")
With TabInfo
MsgBox "Name:" & .Name & vbLf & _
"Erstellungsdatum: " & .DateCreated & vbLf & _
"nderungsdatum: " & .DateModified
End With
Set TabInfo = Nothing
Set Katalog = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 298: Tabelleninfos ausgeben
Sandini Bib
350 Tabellen programmieren
249 Tabellenstrukturen auslesen
Um die Struktur der einzelnen Felder einer Tabelle auszulesen, gibt es einige Eigenschaften,
die Sie ber das ADOX-Objekt Column ansprechen knnen.
Im folgenden Beispiel aus Listing 299 werden die Felddatentypen der Tabelle Artikel ausge-
lesen.
Abbildung 159: Zugriff auf Tabelleneigenschaften ber ADOX
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub TabellenStrukturenAuslesen()
Dim ADOKAT As New [Link]
Dim TabDef As [Link]
Dim strText As String
Dim intz As Integer
On Error GoTo fehler
[Link] = [Link]
Set TabDef = [Link]("Artikel")
With TabDef
For intz = 0 To .[Link] 1
[Link] .Columns(intz).Name
Select Case .Columns(intz).Type
Case 202
strText = "Text"
Case 2
strText = "Zahl - Integer"
Case 3
strText = "Zahl - Long Integer"
Case 6
strText = "Whrung"
Case 7
strText = "Datum/Uhrzeit"
Case 11
strText = "Ja/Nein"
Listing 299: Datenfeldtypen ermitteln
Sandini Bib
Tabellenstrukturen auslesen 351
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe einer Select Case-Anweisung knnen Sie den numerischen Wert, den Ihnen die
Eigenschaft Type meldet, in einen Text umwandeln.
Case Else
strText = "noch nicht erfasst"
End Select
[Link] "Felddatentyp: " & _
.Columns(intz).Type & " ---> " & strText & vbLf
Next intz
End With
Set ADOKAT = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 160: Die Feldtypen wurden ausgelesen.
Listing 299: Datenfeldtypen ermitteln (Forts.)
Sandini Bib
352 Tabellen programmieren
250 Tabelleneigenschaften abfragen
Um die Struktur der einzelnen Felder einer Tabelle auszulesen, gibt es einige Eigenschaften,
die Sie ber das Objekt Column ansprechen knnen.
Im folgenden Beispiel aus Listing 300 lesen Sie alle Datenfelddefinitionen der Tabelle Artikel
aus der Datenbank [Link] aus.
ber die Eigenschaft Name knnen Sie den Namen des Felds ermitteln. Den Datentyp des
Datenfelds finden Sie ber die Eigenschaft Type heraus. Mit der Eigenschaft Attributes kn-
nen Sie bestimmen, ob die Spalte eine feste Lnge hat bzw. ob sie Nullwerte enthalten darf.
Die maximale Gre der Spalte legen Sie mit der Eigenschaft DefinedSize fest. Bei numeri-
schen Werten existiert die Skalierung ber die Eigenschaft NumericScale, die Sie abfragen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub FeldInfosAuslesen()
Dim ADOKAT As New [Link]
Dim TabDef As [Link]
Dim intz As Integer
On Error GoTo fehler
[Link] = [Link]
Set TabDef = [Link]("Artikel")
With TabDef
For intz = 0 To .[Link] 1
[Link] .Columns(intz).Name
[Link] .Columns(intz).Properties("Description")
[Link] .Columns(intz).DefinedSize
[Link] .Columns(intz).Type
[Link] .Columns(intz).NumericScale
[Link] .Columns(intz).Precision
[Link] .Columns(intz).Attributes
Next intz
End With
Set ADOKAT = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 300: Tabelleneigenschaften auslesen
Sandini Bib
Tabelleneigenschaften abfragen 353
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
knnen. Fr numerische Datenwerte knnen Sie die maximale Przision mithilfe der Eigen-
schaft Precision angeben.
Mit der Eigenschaft ParentCatalog geben Sie das Catalog-Objekt an, das Eigentmer der
Spalte ist. Die Eigenschaft RelatedColumn liefert fr Schlsselspalten den Namen der verbun-
denen Spalte in der verbundenen Tabelle. Fr Indexspalten knnen Sie ber die Eigenschaft
SortOrder ermitteln, ob die Sortierreihenfolge aufsteigend oder absteigend ist. Auf provider-
spezifische Eigenschaften beispielsweise die Feldbeschreibung des Datenfelds knnen Sie
mit der Properties-Auflistung zugreifen.
Geben Sie im Auflistungsobjekt Tables an, welche Tabelle Sie auslesen mchten. Dazu
verwenden Sie die Anweisung Set. Danach wenden Sie das Auflistungsobjekt Columns an,
das alle Datenfelder der Tabelle enthlt. Diese Datenfelder durchlaufen Sie mit einer
Schleife, die den Startwert 0 hat. ber die Eigenschaft Count ermitteln Sie die Anzahl
der definierten Datenfelder in der Tabelle. Von diesem ermittelten Wert mssen Sie den
Wert 1 subtrahieren, damit es zu keinem Makroabsturz kommt. Innerhalb der Schleife
fragen Sie die einzelnen Felder ber die vorher beschriebenen Eigenschaften ab und geben
diese im Direktfenster aus. Heben Sie am Ende des Makros die Objektverweise auf den
Katalog ber das Schlsselwort Nothing wieder auf, um den Arbeitsspeicher wieder frei-
zugeben.
Abbildung 161: Die Tabelleneigenschaften wurden dokumentiert.
Sandini Bib
354 Tabellen programmieren
251 Tabellen erstellen
Mithilfe der Methode Append knnen Sie fr eine Tabelle einzelne Datenfelder definieren. Die
Syntax dieser Methode lautet:
[Link] Column [, Type] [, DefinedSize]
Mit dem Argument Column geben Sie den Namen der Spalte an, die erstellt und angehngt
werden soll.
ber das Argument Type geben Sie den Datentyp der Spalte ber eine Konstante oder einen
numerischen Wert an. Entnehmen Sie die wichtigsten Konstanten aus der folgenden Tabelle.
Neue Tabelle in aktueller Datenbank anlegen
Im folgenden Beispiel aus Listing 301 wird eine neue Tabelle mit dem Namen Waren erstellt.
Dazu werden einige Felder definiert.
Konstante Beschreibung
adSingle
Gleitkommazahl mit einzelner Genauigkeit
adDouble
Gleitkommazahl mit doppelter Genauigkeit
adCurrency
Whrungstyp
adDecimal
Dezimaler Varianttyp
adInteger
Integer Typ
adBoolean
Boolescher Varianttyp
adChar
Zeichenfolge mit fester Lnge
adVarChar
Zeichenfolge mit variabler Lnge
adVarWChar
Zeichenfolge mit Wide-variabler Lnge
adLongVarChar
Zeichenfolge mit Long-variabler Lnge
Tabelle 100: Die wichtigsten Datentypen der Methode Append
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub TabelleErstellen()
Dim ADOKAT As [Link]
Dim tabDef As [Link]
On Error GoTo fehler
Set ADOKAT = New [Link]
[Link] = [Link]
Listing 301: Neue Tabelle mit Feldern erstellen
Sandini Bib
Tabellen erstellen 355
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Eine Alternative zur Methode Append bietet die Methode CreateField.
Set tabDef = New [Link]
With tabDef
.Name = "Waren"
Set .ParentCatalog = ADOKAT
With .Columns
.Append "WarenNr", adGUID
.Item("WarenNr").Properties("Jet OLEDB:AutoGenerate") = True
.Append "Bezeichnung", adVarWChar, 255
.Append "Menge", adInteger
.Append "Preis", adCurrency
End With
End With
[Link] tabDef
[Link] = Nothing
Set ADOKAT = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 162: Die neue Tabelle wurde angelegt.
Listing 301: Neue Tabelle mit Feldern erstellen (Forts.)
Sandini Bib
356 Tabellen programmieren
Neue Tabelle in neuer Datenbank anlegen
Im folgenden Beispiel aus Listing 302 werden eine neue Datenbank sowie eine Tabelle ange-
legt, die folgende Felder aufweist: Firma, Nachname, Vorname, E-Mail-Adresse und Telefonnum-
mer.
Erstellen Sie im ersten Schritt ein Access-Objekt. [Link].11 bedeutet hier, dass
die Access-2003-Objektbibliothek angesprochen wird. ber die Versionsnummer knnen Sie
festlegen, welche Access-Bibliothek verwendet werden soll. So wird Access 2002 beispiels-
weise durch [Link].10 und Access 2003 durch [Link].11 identifi-
ziert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub NeueDBAnlegenUndTabelleErstellen()
Dim AccessObj As Object
Dim DBS As Object
Dim TabDef As Object
Dim varTabfeld As Variant
Set AccessObj = _
CreateObject("[Link].11")
[Link] "C:\Eigene Dateien\[Link]"
Set DBS = [Link]
Set TabDef = [Link]("Kontakte")
Set varTabfeld = [Link]("Firma", 10, 20)
[Link] varTabfeld
Set varTabfeld = [Link]("Nachname", 10, 30)
[Link] varTabfeld
Set varTabfeld = [Link]("Vorname", 10, 20)
[Link] varTabfeld
Set varTabfeld = [Link]("E-Mail", 10, 30)
[Link] varTabfeld
Set varTabfeld = [Link]("Telefon", 10, 25)
[Link] varTabfeld
[Link] TabDef
Set AccessObj = Nothing
End Sub
Listing 302: Neue Datenbank und neue Tabelle anlegen
Sandini Bib
Tabellen verknpfen 357
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mit der Methode NewCurrentDatabase erstellen Sie eine neue Access-Datenbank. Dabei ms-
sen Sie den Pfad und den Dateinamen angeben. Im nchsten Schritt speichern Sie den
Namen dieser neuen Datenbank in der Objektvariablen DBS. Setzen Sie fr diesen Zweck die
Methode CurrentDb ein. Erstellen Sie danach im Objekt TabDef eine neue Tabelle ber die
Methode CreateTableDef. Geben Sie dabei den Namen der Tabelle an.
Legen Sie die einzelnen Datenfelder fr die Tabelle an und verwenden Sie fr diese Aufgabe
die Methode CreateField. Geben Sie dieser Methode bekannt, wie das Feld heien soll, wel-
chen Datentyp es bekommen soll und wie gro das Datenfeld werden darf. ber
die Methode Append fgen Sie die so angelegten Tabellenfelder in Ihre Tabelle ein. Am Ende
des Makros bauen Sie die Tabelle in Ihre Datenbank ein. Damit ist die Tabelle fest verankert.
Heben Sie zuletzt die Objektvariablen ber die Anweisung Set AccessObj = Nothing auf.
252 Tabellen verknpfen
ber die Properties-Auflistung knnen Sie auf Tabelleneigenschaften zugreifen. Unter ande-
rem knnen Sie diese Auflistung auch ntzen, um externe Tabellen in Ihre Datenbank zu ver-
linken. Im folgenden Beispiel aus Listing 303 wird die externe Tabelle Artikel in die aktuell
geffnete Datenbank unter dem Namen Kunden_Verknpft verknpft.
Abbildung 163: Die neue Tabelle wurde erfolgreich angelegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Listing 303: Eine Tabelle verknpfen
Sandini Bib
358 Tabellen programmieren
Geben Sie im Argument Link Datasource den Namen sowie den Pfad der Datenbank an, in
der sich die Tabelle befindet, die Sie verlinken mchten. Danach geben Sie den eigentlichen
Namen der Tabelle im Argument Remote Table Name an. Im letzten Argument Create Link tei-
len Sie Ihre Absicht mit, die Tabelle zu verknpfen. ber den Einsatz der Methode Append
hngen Sie die Tabelle als Verknpfung in die Datenbank.
Sub VerknpfteTabelleffnen()
Dim ADOKAT As New [Link]
Dim TabDef As New [Link]
On Error GoTo fehler
[Link] = [Link]
[Link] = "Kunden_Verknpft"
Set [Link] = ADOKAT
[Link]("Jet OLEDB:Link Datasource") = _
"C:\Eigene Dateien\[Link]"
[Link]("Jet OLEDB:Remote Table Name") = "Kunden"
[Link]("Jet OLEDB:Create Link") = True
[Link] TabDef
Set TabDef = Nothing
Set ADOKAT = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 164: Die Tabelle Kunden wurde verknpft und umbenannt.
Listing 303: Eine Tabelle verknpfen (Forts.)
Sandini Bib
Tabellen lschen 359
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
253 Tabellen lschen
ber den Einsatz der Methode Delete knnen Sie eine Tabelle lschen.
Im folgenden Beispiel aus Listing 304 wird die Tabelle Waren gelscht.
254 Tabellenfeld anhngen (DAO)
Sie haben jederzeit die Mglichkeit, ber ein Makro einer bestehenden Tabelle ein weiteres
Feld hinzuzufgen. Im folgenden Beispiel aus Listing 305 wird der Tabelle Personal das Feld
Alter hinzugefgt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub TabelleEntfernen()
Dim ADOKAT As [Link]
Dim TabDef As [Link]
Set ADOKAT = New [Link]
[Link] = [Link]
On Error GoTo fehler
[Link] "Waren"
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 304: Eine Tabelle entfernen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub FeldAnhngen()
Dim DBS As Database
Dim FeldDef As TableDef
Dim Feld As Field
On Error GoTo fehler
Set DBS = CurrentDb
Listing 305: Ein zustzliches Feld anhngen
Sandini Bib
360 Tabellen programmieren
Mithilfe der Methode CurrentDb knnen Sie den Namen der aktiven Datenbank ermitteln.
Greifen Sie danach auf das Objekt TabDef der Tabelle Personal zu und erzeugen Sie ber die
Methode CreateField ein neues Tabellenfeld. Geben Sie dieser Methode bekannt, wie das
Feld heien und welchen Datentyp es bekommen soll. ber die Methode Append fgen Sie
die so angelegten Tabellenfelder der Tabelle hinzu.
Set FeldDef = [Link]!Personal
Set Feld = [Link]("Alter")
[Link] = dbDouble
[Link] Feld
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 165: Das Feld wurde hinzugefgt.
Listing 305: Ein zustzliches Feld anhngen (Forts.)
Sandini Bib
Verlinken und Verknpfen (DAO) 361
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
255 Verlinken und Verknpfen (DAO)
Welche Tabellen in eine Access-Datenbank verlinkt eingebunden sind, knnen Sie ganz
schnell erkennen, wenn Sie im Register TABELLEN eine Tabelle mit einem Blockpfeil sehen
(siehe Abbildung 166). Mchten Sie aber ber ein Makro anzeigen lassen, welche Tabellen in
Ihrer Datenbank eigentlich aus einer anderen Datenbank stammen und nur in Ihre eigene
Datenbank verknpft eingefgt wurden, dann starten Sie das Makro aus Listing 306.
Abbildung 166: An den Blockpfeilen knnen verlinkte Tabellen erkannt werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub VerlinkteTabellenAnzeigen()
Dim DBS As Database
Dim intz As Integer
Dim tdf As TableDef
On Error GoTo fehler
Set DBS = CurrentDb
For intz = 0 To [Link] 1
Set tdf = [Link](intz)
If Len([Link]) > 0 Then
[Link] [Link]
End If
Next intz
Set DBS = Nothing
Exit Sub
Listing 306: Ermitteln, welche Tabellen extern verlinkt sind
Sandini Bib
362 Tabellen programmieren
Mithilfe des Objekts TableDefs haben Sie die Mglichkeit, alle in der Datenbank befindlichen
Tabellen zu ermitteln. ber die Eigenschaft Connect knnen Sie herausbekommen, ob diese
Tabellen verknpft sind. Ist dies der Fall, dann erhalten Sie einen Wert > 0 zurck. In diesem
Fall schreiben Sie diese Tabellen ber den Befehl [Link] in den Direktbereich.
256 Verknpfte Tabellen aktualisieren
Mchten Sie alle verlinkten Tabellen der aktuellen Datenbank aktualisieren, knnen Sie diese
Aufgabe ber das Makro aus Listing 307 lsen.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 167: Die verlinkten Dateien wurden ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub VerlinkteTabellenAnktualisieren()
Dim DBS As Database
Dim intz As Integer
Dim tdf As TableDef
On Error GoTo fehler
Set DBS = CurrentDb
For intz = 0 To [Link] 1
Set tdf = [Link](intz)
If Len([Link]) > 0 Then
[Link]
End If
Next intz
Set DBS = Nothing
Exit Sub
Listing 307: Verlinkte Tabellen aktualisieren
Listing 306: Ermitteln, welche Tabellen extern verlinkt sind (Forts.)
Sandini Bib
Verknpfungsadresse anpassen 363
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Wenden Sie die Methode RefreshLink an, um die verknpften Tabellen zu aktualisieren.
257 Verknpfungsadresse anpassen
ndert sich der Pfad bzw. das Laufwerk einer Datenbank, dann knnen Sie ber folgendes
Makro aus Listing 308 diese Pfade leicht anpassen. Hier soll das alte Verzeichnis C:\Eigene
Dateien in C:\Daten gendert werden.
Mithilfe der Methode RefreshLink knnen Sie die Pfade der verlinkten Tabellen anpassen.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap04
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub PfadVerlinkterTabellenndern()
Dim DBS As Database
Dim tdf As TableDef
On Error GoTo fehler
Set DBS = CurrentDb
For Each tdf In [Link]
If Len([Link]) > 0 Then
[Link] = ";DATABASE=" & "C:\Daten\[Link]"
[Link]
End If
Next tdf
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 308: Pfade von verknpften Tabellen anpassen
Listing 307: Verlinkte Tabellen aktualisieren (Forts.)
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abfragen programmieren
Im vorherigen Kapitel haben Sie komplexere Auswertungen von Tabellen vorgenommen und
die Ergebnisse im Direktfenster der Entwicklungsumgebung ausgegeben. Wenn Sie Abfragen
programmieren oder auch manuell erstellen, dann knnen Sie die Ergebnisse in so genann-
ten Views oder Abfragetabellen speichern. Wie Sie Abfragen per VBA erstellen, das erfah-
ren Sie in diesem Kapitel.
Bei der Programmierung von Abfragen steht Ihnen das Objekt DoCmd mit den Methoden Open-
Query und RunSQL zur Verfgung oder die Methode Execute des ADO-Objekts Command. Mchten
Sie Abfragen auch als Abfragen speichern, dann knnen Sie auf das ADOX-Objekt Catalog
zurckgreifen. Auch in diesem Kapitel kommen Abfragen auf Basis von DAO nicht zu kurz.
Die Abfragetypen von Access
Access bietet eine ganze Reihe von verschiedenen Abfragen an, die Sie manuell erstellen oder
auch programmieren knnen. Sie verwenden Abfragen, um Daten auf mehrere Arten anzu-
zeigen, zu ndern und zu analysieren. Sie knnen sie auch als Datenquellen fr Formulare,
Berichte und Datenzugriffsseiten verwenden.
In Access unterscheidet man zwischen folgenden Abfragetypen:
1. AUSWAHLABFRAGEN: Mithilfe einer Auswahlabfrage rufen Sie Daten aus einer oder meh-
reren Tabellen ab und zeigen die Ergebnisse in einem Datenblatt an. Dort knnen Sie die
Datenstze aktualisieren. Mit einer Auswahlabfrage knnen Sie auch Datenstze gruppie-
ren und Summen, Anzahl, Durchschnittswerte und andere Werte berechnen.
2. PARAMETERABFRAGEN: Eine Parameterabfrage ist eine Abfrage, die beim Ausfhren ein
Dialogfeld zur Eingabe von Informationen anzeigt. Dies knnen Kriterien zum Abrufen
von Datenstzen oder auch Werte sein, die in ein Feld eingefgt werden sollen. Sie kn-
nen die Abfrage auch so entwerfen, dass nach mehreren Informationen gefragt wird.
3. KREUZTABELLENABFRAGEN: Sie verwenden Kreuztabellenabfragen, um Daten zur Verein-
fachung von Analysen zu berechnen und neu zu strukturieren. Kreuztabellenabfragen
berechnen eine Summe, einen Durchschnitt, eine Anzahl oder eine andere Funktion fr
Daten, die nach zwei Informationstypen gruppiert sind: entlang der linken Seite des
Datenblatts und entlang der oberen Seite.
4. AKTIONSABFRAGEN: Diese Abfragen fhren in nur einer Operation nderungen an einer
Vielzahl von Datenstzen durch bzw. verschieben diese. Unter den Aktionsabfragen
unterscheidet man zwischen folgenden Typen:
1. LSCHABFRAGEN: Mithilfe einer Lschabfrage lschen Sie eine Gruppe von Datenst-
zen aus einer oder mehreren Tabellen. Lschabfragen lschen immer vollstndige
Datenstze, nicht die in Datenstzen markierten Felder.
Sandini Bib
366 Abfragen programmieren
2. AKTUALISIERUNGSABFRAGEN: Eine Aktualisierungsabfrage fhrt globale nderungen
an Gruppen von Datenstzen in einer oder mehreren Tabellen durch. Mit einer
Aktualisierungsabfrage knnen Sie Daten in vorhandenen Tabellen ndern.
3. ANFGEABFRAGEN: Eine Anfgeabfrage fgt eine Gruppe von Datenstzen aus einer
oder mehreren Tabellen am Ende einer anderen Tabelle oder mehrerer Tabellen an.
4. TABELLENERSTELLUNGSABFRAGEN: Eine Tabellenerstellungsabfrage erstellt eine Tabelle
aus allen oder einem Teil der Daten in einer oder mehreren Tabellen.
5. SQL-ABFRAGEN: Eine SQL-Abfrage ist eine Abfrage, die unter Verwendung einer
SQL-Anweisung erstellt wird. Mit der Structured Query Language (SQL) knnen Sie
relationale Datenbanken, wie z. B. Access, abfragen, aktualisieren und verwalten.
258 Abfragen starten mit OpenQuery
ber die Methode OpenQuery knnen Sie eine Auswahl- oder Kreuztabellenabfrage in der
Datenblattansicht, Entwurfsansicht oder Seitenansicht ffnen. Diese muss natrlich schon in
der Datenbank angelegt sein. Die Syntax dieser Funktion lautet:
OpenQuery(Abfragename, Ansicht, Datenmodus)
Argument Beschreibung
Abfragename Erforderlich. Legt den Namen der Abfrage fest, die Sie durchfh-
ren mchten.
Ansicht Optional. Legt die Ansicht der Abfrage fest. Es stehen Ihnen dabei
folgende Konstanten zur Verfgung:
acViewDesign: ffnet die Abfrage in der Entwurfsansicht.
acViewNormal: ffnet die Abfrage in gewohnter Weise in der
Tabellenansicht (Standardeinstellung).
acViewPivotChart: Stellt die Abfrage fr ein Pivot-Diagramm zur
Verfgung.
acViewPivotTable: Hiermit knnen Sie die Felder der Abfrage fr
eine Pivot-Tabelle verwenden.
acViewPreview: Zeigt die Abfrage in der Seitenansicht an.
Datenmodus Optional. Legt fest, ob nderungen an der Abfrage durchgefhrt
werden drfen oder nicht. Dabei knnen Sie folgende Konstanten
festlegen:
acAdd: Der Anwender kann neue Datenstze hinzufgen, jedoch
keine bestehenden Datenstze bearbeiten.
acEdit: Der Anwender kann bestehende Datenstze bearbeiten
und neue Datenstze hinzufgen (Standardeinstellung).
acReadOnly: Der Anwender kann die Datenstze nur ansehen.
Tabelle 101: Die Argumente der Methode OpenQuery
Sandini Bib
Abfragen starten mit OpenQuery 367
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 309 wird die Abfrage mit dem Namen Artikel nach Kate-
gorie ausgefhrt.
Die Methode OpenQuery greift auf die hinterlegten Tabellen Artikel und Kategorie zurck
und liefert das Ergebnis der Abfrage in einer Tabelle, die unter der Rubrik ABFRAGEN hinter-
legt ist.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub AbfrageStarten()
On Error GoTo fehler
[Link] "Artikel nach Kategorie", acViewNormal, acReadOnly
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 309: Abfrage starten
Abbildung 168: Die Abfrage wurde ausgefhrt und geffnet.
Sandini Bib
368 Abfragen programmieren
259 Abfragen erstellen mit RunSQL
Eine weitere Mglichkeit, eine Abfrage in VBA zu erstellen und zu starten, ist die Methode
RunSQL. Mit dieser Methode knnen Sie eine Microsoft Access-Aktionsabfrage ausfhren,
indem Sie die entsprechende SQL-Anweisung verwenden. Die Syntax dieser Methode lautet:
RunSQL(SQLAnweisung, TransaktionVerwenden)
In Verbindung mit der Methode RunSQL kommen einige SQL-Anweisungen zum Einsatz, die
im Folgenden anhand von praktischen Beispielen beschrieben werden.
260 UPDATE (Aktualisierungsabfrage)
Mit der Anweisung UPDATE geben Sie bekannt, dass Sie eine Tabelle aktualisieren mchten.
Die Syntax dieser Anweisung lautet:
UPDATE Tabellenname " & "SET FeldName = 'NeuerFeldInhalt' " & "WHERE FeldName =
'AlterFeldInhalt'"
Geben Sie ber SET an, wie der neue Inhalt des Datenfelds lauten soll. ber WHERE
bestimmen Sie, nach welchen Stzen in der Tabelle gesucht werden soll.
Im Beispiel aus Listing 310 werden in der Tabelle Artikel2 alle Bestnde auf den Wert 0
gesetzt. Dabei wird die Meldung, wie viele Datenstze aktualisiert werden sollen deaktiviert.
Argument Beschreibung
SQLAnweisung
Erforderlich. Legt die SQL-Anweisung fest. Speichern Sie
diese SQL-Anweisung vorher am besten in einer String-
Variablen und bergeben Sie diese dann der Methode
RunSQL.
TransaktionVerwenden
Optional. Soll die Abfrage in eine Transaktion aufgenom-
men werden? Unter einer Transaktion versteht man eine
Reihe von nderungen, die an den Daten und am Schema
einer Datenbank vorgenommen werden. Wenn ja, setzen
Sie dieses Argument auf den Wert True.
Tabelle 102: Die Argumente der Methode RunSQL
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Listing 310: Mit UPDATE Bestnde initialisieren
Sandini Bib
UPDATE (Aktualisierungsabfrage) 369
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Methode SetWarnings, die auf den Wert False gesetzt wird, knnen Standardmel-
dungen, wie z. B. die Aktualisierungsmeldung, unterdrckt werden. bergeben Sie danach
die SQL-Anweisung der Methode RunSql.
Im nchsten Beispiel aus Listing 311 wird ein Lieferantenwechsel vorgenommen. Dabei soll
der Lieferant New Orleans Cajun Delights (Lieferanten-Nr = 2) in Zukunft hufiger eingesetzt
werden und die Lieferanten Grandma Kelly's Homestead (Lieferanten-Nr = 3) und Tokyo Traders
(Lieferanten-Nr = 4) ablsen.
Sub BestandInitialisieren()
On Error GoTo fehler
[Link] False
[Link] "UPDATE Artikel2 SET [Link] = 0;"
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 169: Der Bestand wurde fr alle Artikel auf 0 gesetzt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub LieferantenWechsel()
Dim strSQL As String
strSQL = "UPDATE Artikel2 " & _
"SET Artikel2.Lieferanten_Nr = 2 " & _
"WHERE Artikel2.Lieferanten_Nr = 3 OR Artikel2.Lieferanten_Nr = 4"
Listing 311: Lieferantenwechsel durchfhren
Listing 310: Mit UPDATE Bestnde initialisieren (Forts.)
Sandini Bib
370 Abfragen programmieren
261 INSERT INTO (Anfgeabfrage)
ber die SQL-Anweisung INSERT INTO geben Sie bekannt, dass Sie in einer Tabelle einen
neuen Datensatz anfgen mchten. Die Syntax lautet:
INSERT INTO ZielTabelle IN 'NameZielDatenbank' SELECT Tabellenfeld(er) FROM
QuellTabelle ;"
ber IN geben Sie den Namen der Zieldatenbank an. Bestimmen Sie danach ber die Anwei-
sung SELECT die Datenfelder der Tabelle, die Sie anfgen mchten. Achten Sie dabei darauf,
dass die Feldnamen der Tabelle mit Ihren Angaben bereinstimmen. Geben Sie nach FROM
den Namen der Tabelle an, aus der die Daten herausgeholt werden sollen.
INSERT INTO ZielTabelle IN 'NameZielDatenbank' SELECT Tabellenfeld(er) VALUES
'Inhalte der Felder'"
ber die SQL-Anweisung INSERT INTO geben Sie bekannt, dass Sie in einer Tabelle einen Satz
anfgen mchten. Geben Sie danach die Datenfelder der Tabelle ber die Anweisung SELECT
an, die Sie anfgen mchten. Achten Sie dabei, darauf, dass die Feldnamen der Tabelle mit
Ihren Angaben bereinstimmen. Erfassen Sie nach VALUES die tatschlichen Werte in Text-
form. Betten Sie jede Information in einfache Anfhrungszeichen ein. Trennen Sie jede
Information durch Kommas voneinander ab.
Im Beispiel aus Listing 312 wird der Tabelle Personal ein neuer Mitarbeiter hinzugefgt.
On Error GoTo fehler
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub MitarbeiterHinzufgen()
Dim strSQL As String
On Error GoTo fehler
Listing 312: Neuen Datensatz mit INSERT INTO hinzufgen
Listing 311: Lieferantenwechsel durchfhren (Forts.)
Sandini Bib
INSERT INTO (Anfgeabfrage) 371
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 313 wird die Tabelle NeueKunden aus der Datenbank Abfra-
[Link] in die Datenbank [Link] in die Tabelle Kunden geschrieben. Sehen Sie sich
zunchst die Tabelle NeueKunden in Abbildung 171 an.
strSQL = "INSERT INTO Personal(Nachname, Vorname, " & _
"Position, Anrede, Geburtsdatum) VALUES " & _
"('Held', 'Bernd', 'Externer Berater', 'Herr', '02.04.1969')"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 170: Der neue Datensatz wurde am Ende der Tabelle eingefgt.
Listing 312: Neuen Datensatz mit INSERT INTO hinzufgen (Forts.)
Sandini Bib
372 Abfragen programmieren
262 DELETE (Lschabfrage)
Mithilfe der SQL-Anweisung DELETE knnen Sie Datenstze aus einer Tabelle entfernen. Die
Syntax dieser Anweisung lautet:
DELETE * FROM Tabellename WHERE Datenfeld='xxx'
Setzen Sie die SQL-Anweisung DELETE ein, um eine Lschabfrage zu starten. Geben Sie dabei
an, welche Felder Sie aus welcher Tabelle lschen mchten. Geben Sie unter WHERE das
Lschkriterium bekannt.
Im folgenden Beispiel aus Listing 314 werden aus der Tabelle Lieferanten alle Lieferanten
entfernt, die aus Japan kommen.
Abbildung 171: Diese Kunden sollen in eine bereits bestehende Tabelle berfhrt werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub Kundenbertragen()
Dim strSQL As String
On Error GoTo fehler
[Link] False
strSQL = "INSERT INTO Kunden IN 'C:\Eigene Dateien\[Link]' " & _
" SELECT NeueKunden.* FROM NeueKunden ;"
[Link] strSQL
[Link] False
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 313: Neue Kunden einlesen
Sandini Bib
DELETE (Lschabfrage) 373
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Geben Sie bei der WHERE-Klausel das Kriterium in Apostrophen an, sofern es sich um alpha-
numerische Vergleichsfelder handelt. Die Apostrophe sind nicht ntig, wenn es sich um
numerische Vergleichsfelder wie beispielsweise Lagerbestand, Preis usw. handelt.
Abbildung 172: Die neuen Kunden wurden bertragen und einsortiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub DatenstzeLschen2()
Dim strSQL As String
On Error GoTo fehler
strSQL = "DELETE * FROM Lieferanten WHERE Land='Japan'"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 314: Datenstze lschen mit DELETE
Sandini Bib
374 Abfragen programmieren
ber die LIKE-Klausel knnen Sie beispielsweise alle Datenstze lschen, die mit dem Buch-
staben F beginnen, also Lnder wie Frankreich und Finnland. Das Makro fr diesen Zweck
sehen Sie in Listing 315.
Vorsicht ist beim nchsten Beispiel aus Listing 316 geboten. Die Aufgabe besteht darin, alle
Milchprodukte aus der Tabelle Artikel2 zu entfernen. Diese Produkte werden durch die
Kategorienummer 4 reprsentiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub DatenstzeLschen3()
Dim strSQL As String
On Error GoTo fehler
strSQL = "DELETE * FROM Lieferanten3 WHERE Land LIKE 'F*'"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 315: Lnder mit dem Anfangsbuchstaben F lschen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub KategorieEntfernen()
Dim strSQL As String
On Error GoTo fehler
strSQL = "DELETE * FROM Artikel2 WHERE [Kategorie-Nr] = 4;"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
Listing 316: Datenstze lschen ber eine Nummer
Sandini Bib
SELECT INTO (Tabellenerstellungsabfrage) 375
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Enthlt der Feldnamen Sonderzeichen wie beispielsweise das Minuszeichen, dann mssen
Sie den Feldnamen in eckige Klammern setzen, damit das Makro nicht abstrzt.
263 SELECT INTO (Tabellenerstellungsabfrage)
Mithilfe der SQL-Anweisung SELECT INTO knnen Sie eine neue Tabelle erstellen und dabei
bestimmte Daten aus einer anderen Tabelle einfgen. Die Syntax dieser Anweisung lautet:
SELECT Datenfelder INTO [NeueTabelle] FROM QuellTabelle
WHERE (Datenfeld = 'xxx')
ber die SQL-Anweisung SELECT whlen Sie die Felder aus, die Sie in der neuen Tabelle spei-
chern mchten. Bei der Vergabe der Feldnamen knnen Sie bis zu 64 Zeichen fr einen
Namen verwenden. ber INTO geben Sie den Namen der Tabelle an, die angelegt werden soll.
Danach legen Sie mit der SQL-Anweisung FROM fest, woher die Daten stammen. Mit der
WHERE-Anweisung knnen Sie die zu bertragenden Datenstze einschrnken.
Im folgenden Beispiel aus Listing 317 werden aus der Tabelle Kunden alle Kunden ermittelt,
die aus Deutschland stammen, und in die Tabelle KundenDeutschland geschrieben.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub NeueTabelleErstellen()
Dim strSQL As String
On Error GoTo fehler
strSQL = "SELECT Firma, Kontaktperson, Position, Strae, Ort " & _
"INTO [KundenDeutschland] FROM Kunden WHERE (Land = 'Deutschland')"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 317: Neue Tabelle erstellen ber SELECT INTO
Listing 316: Datenstze lschen ber eine Nummer (Forts.)
Sandini Bib
376 Abfragen programmieren
Geben Sie gleich hinter der Anweisung SELECT die Felder an, die Sie in der neuen Tabelle
haben mchten. Danach geben Sie hinter der Klausel INTO den Namen fr die neue Tabelle
an. Die Klausel FROM sagt aus, aus welcher Tabelle die Daten gezogen werden sollen. ber die
WHERE-Klausel wird eine Einschrnkung vorgenommen, so dass nur Kunden aus Deutschland
bernommen werden sollen.
264 INNER JOIN (Vergleichsabfrage)
ber die SQL-Anweisung INNER JOIN knnen Sie Tabellen miteinander vergleichen und nur
diejenigen Stze weiterverarbeiten, die in den Tabellen gleich sind. Die Syntax dieser Anwei-
sung lautet:
SELECT Datenbankfelder INTO NameNeuerTabelle FROM Tabelle1 INNER JOIN Tabelle2 ON
Tabelle1.Feld1 = Tabelle2.Feld1
Nach der Anweisung SELECT geben Sie die Datenfelder an, die in der neuen Tabelle ausgege-
ben werden sollen. Nach der Anweisung INTO folgt der Name der neuen Tabelle, die angelegt
werden soll. Direkt hinter der Anweisung FROM geben Sie den Namen der ersten Tabelle an.
Hinter der Anweisung INNER JOIN geben Sie den Namen der Vergleichstabelle an, die mit der
ersten Tabelle abgeglichen werden soll. Nach der Anweisung ON erfassen Sie das Vergleichs-
kriterium.
Im folgenden Beispiel aus Listing 318 werden die Felder Artikelname und Einzelpreis in die
neue Tabelle GleicheArtikel bertragen. Es werden dabei nur Datenstze bertragen, die in
beiden Tabellen Artikel sowie Artikelvgl vorhanden sind.
Abbildung 173: Alle Kunden aus Deutschland in einer separaten Tabelle
Sandini Bib
INNER JOIN (Vergleichsabfrage) 377
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Geben Sie hinter der Anweisung SELECT die Felder an, die Sie in der neuen Tabelle haben
mchten. Bei der INTO-Klausel geben Sie den Namen der neuen Tabelle an. Die FROM-Klausel
enthlt den Namen der ersten Tabelle, also der Tabelle Artikel. Hinter der Anweisung INNER
Abbildung 174: Vergleichsartikel in der Tabelle Artikelvgl
Abbildung 175: Die Ausgangstabelle Artikel
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabellenVergleichen()
Dim strSQL As String
On Error GoTo fehler
strSQL = _
"SELECT [Link], [Link] INTO GleicheArtikel " & _
"FROM Artikel INNER JOIN ArtikelVgl ON [Link] =
[Link]"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 318: Tabellen vergleichen mit INNER JOIN
Sandini Bib
378 Abfragen programmieren
JOIN geben Sie den Namen der Vergleichstabelle an, die mit der ersten Tabelle abgeglichen
werden soll. Nach der Anweisung ON erfassen Sie das Vergleichskriterium, hier der Artikel-
name der Tabelle Artikel sowie der Artikelname der Tabelle Artikelvgl.
Die SQL-Anweisung INNER JOIN unterscheidet nicht zwischen Gro- und Kleinschreibung.
Im folgenden Beispiel aus Listing 319 werden die Tabellen Bestellungen und Kunden mitein-
ander verarbeitet. ber den gemeinsamen eindeutigen Schlssel Kunden-Code knnen Sie
diese Aufgabe ber den Einsatz der SQL-Anweisung INNER JOIN lsen.
Geben Sie hinter der Anweisung SELECT die Felder an, die Sie in der neuen Tabelle haben
mchten. Achten Sie dabei darauf, dass Sie genau angeben, aus welcher Tabelle Access die
Abbildung 176: Nur zwei Artikel sind identisch.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub MehrereTabellenChecken()
Dim strSQL As String
On Error GoTo fehler
strSQL = "SELECT [Link], " & _
"[Link], [Link], " & _
"[Link] INTO TABNEU FROM " & _
"Bestellungen INNER JOIN Kunden " & _
"ON (Bestellungen.[Kunden-Code] =" & _
"Kunden.[Kunden-Code])"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 319: Daten abgleichen
Sandini Bib
INNER JOIN (Vergleichsabfrage) 379
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Daten ziehen soll. Bei der INTO-Klausel geben Sie den Namen der neuen Tabelle an. Die FROM-
Klausel enthlt den Namen der ersten Tabelle, also der Tabelle Bestellungen. Hinter der
Anweisung INNER JOIN geben Sie den Namen der Vergleichstabelle an, die mit der ersten
Tabelle abgeglichen werden soll. Nach der Anweisung ON erfassen Sie das Vergleichskriterium,
hier der Kunden-Code.
Soll zustzlich noch eine weitere Abfrage integriert werden, beispielsweise alle Frachtkosten,
die hher sind als 50 Euro, dann starten Sie das Makro aus Listing 320.
Abbildung 177: Alle Bestellungen aus der Tabellen Bestellungen und Kunden zusammengestellt
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub Frachtkostenber50()
Dim strSQL As String
On Error GoTo fehler
strSQL = "SELECT [Link], " & _
"[Link], [Link], " & _
"[Link] INTO TABNEU FROM " & _
"Bestellungen INNER JOIN Kunden " & _
"ON (Bestellungen.[Kunden-Code] =" & _
"Kunden.[Kunden-Code]) WHERE " & _
"[Link] > 50"
[Link] False
Listing 320: Eine weitere Einschrnkung wurde hinzugefgt.
Sandini Bib
380 Abfragen programmieren
265 UNION (Auswahlabfrage)
ber den Einsatz der SQL-Anweisung UNION knnen Sie mehrere Tabellen zusammenfhren,
die denselben Datensatzaufbau haben. Die Syntax lautet:
SELECT * INTO Zieltabelle FROM (SELECT * FROM ARTIKEL UNION ALL SELECT * FROM
Artikelvgl
Mit der SQL-Anweisung SELECT * holen Sie alle Stze aus den danach angegebenen Tabellen.
Nach dem Argument INTO geben Sie den Namen der Zieltabelle an. Rechts und links neben
der Anweisung UNION geben Sie die Namen der Tabellen an, die Sie vereinen mchten.
Im folgenden Beispiel aus Listing 321 werden die beiden Tabellen Artikel und ArtikelNEU
zusammengefasst und nach dem Artikelnamen sortiert.
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 178: Nur Frachtkosten ber 50 werden bercksichtigt.
Listing 320: Eine weitere Einschrnkung wurde hinzugefgt. (Forts.)
Sandini Bib
UNION (Auswahlabfrage) 381
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Makro aus Listing 321 wurden alle Datenfelder der beiden Tabellen in der Ergebnistabelle
gespeichert. Sollen jedoch nur bestimmte Felder bertragen werden, dann starten Sie das
Makro aus Listing 322. In diesem Makro werden nur die Felder Artikelname, Einzelpreis und
Lagerbestand in die Tabelle ErgebnisTab bertragen.
Abbildung 179: Die Tabelle mit den neuen Artikeln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabellenZusammenwerfen()
Dim strSQL As String
On Error GoTo fehler
strSQL = "SELECT * INTO ErgebnisTab " & _
"FROM(SELECT * FROM ARTIKEL " & _
"UNION ALL SELECT * FROM Artikelneu " & _
"ORDER BY Artikelname)"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 321: Tabellen konsolidieren mit UNION
Sandini Bib
382 Abfragen programmieren
Nach der SQL-Anweisung SELECT geben Sie die Felder an, die Sie in der Ergebnistabelle haben
mchten. Nach dem Argument INTO geben Sie den Namen der Zieltabelle an. Rechts und
links neben der Anweisung UNION nennen Sie die Namen der Tabellen, die Sie vereinen mch-
ten. ber die ORDER-Klausel sortieren Sie die Ergebnistabelle nach dem Artikelnamen.
266 Abfragen mit Berechnungen ausfhren
Wie schon im vorherigen Kapitel angesprochen, knnen mathematische Funktionen wie
Summe, Mittelwert und andere aus der Tabelle 103 in SQL-Anweisungen eingebaut werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabellenZusammenwerfenAuswahl()
Dim strSQL As String
On Error GoTo fehler
strSQL = "SELECT Artikelname, Einzelpreis, Lagerbestand INTO ErgebnisTab " & _
"FROM(SELECT Artikelname, Einzelpreis, Lagerbestand FROM ARTIKEL " & _
"UNION ALL SELECT Artikelname, Einzelpreis, Lagerbestand FROM Artikelneu " &
"ORDER BY Artikelname);"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 322: Eine Auswahl einiger Felder beider Tabellen in die Zieltabelle bertragen
Sandini Bib
Abfragen mit Berechnungen ausfhren 383
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 323 sollen die Bestellungen pro Hersteller aus der Tabelle
Bestellungen gezhlt und in einer Ergebnistabelle ausgegeben werden.
Abbildung 180: Es wurden nur die wichtigsten Felder bertragen.
Funktion Beschreibung
SUM
Summe
AVG
Mittelwert
MIN
Kleinster Wert
MAX
Grter Wert
COUNT
Anzahl
STDDEV
Standardabweichung
VAR
Varianz
FIRST
Erster Satz
LAST
Letzter Satz
Tabelle 103: Mathematische Funktionen fr SQL-Anweisungen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Listing 323: Datenstze zhlen ber die Funktion COUNT
Sandini Bib
384 Abfragen programmieren
ber die Funktion COUNT werden alle Bestellungen pro Kunde ermittelt. Dabei werden die
gezhlten Bestellungen im Feld ERG der Tabelle Ergebnis ausgegeben.
Im nchsten Beispiel aus Listing 324 werden aus der Tabelle Artikel die Lagermengen pro
Hersteller summiert.
Sub DatenstzeZhlenAbfrage()
Dim strSQL As String
On Error GoTo fehler
strSQL = _
"SELECT COUNT(Frachtkosten) AS ERG, " & _
"Bestellungen.[Kunden-Code] INTO Ergebnis " & _
" FROM Bestellungen GROUP BY " & _
" Bestellungen.[Kunden-Code]"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 181: Die Anzahl der Bestellungen pro Kunde werden dargestellt.
Listing 323: Datenstze zhlen ber die Funktion COUNT (Forts.)
Sandini Bib
Abfragen mit Berechnungen ausfhren 385
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Funktion SUM werden alle Lagerbestnde pro Lieferant ermittelt. Dabei werden die
summierten Lagerbestnde im Feld SUMBestand der Tabelle Ergebnislager ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub LagermengenSummieren()
Dim strSQL As String
On Error GoTo fehler
strSQL = _
"SELECT SUM([Link]) " & _
"AS SUMBestand, Artikel.[Lieferanten_Nr] INTO ErgebnisLager " & _
" FROM Artikel GROUP BY Artikel.[Lieferanten_Nr]"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 324: Lagermengen pro Hersteller summieren
Abbildung 182: Die Lagerbestnde der einzelnen Lieferanten
Sandini Bib
386 Abfragen programmieren
267 ALTER (Tabellennderungsabfrage)
Um eine bereits vorhandene Tabelle zu ndern, knnen Sie die SQL-Anweisung ALTER TABLE
einsetzen. Dabei mssen Sie genau angeben, was Sie konkret mit der Tabelle anstellen mch-
ten. Dafr stehen Ihnen weitere SQL-Statements zur Verfgung:
ADD COLUMN: ber diese Anweisung fgen Sie einer Tabelle ein neues Feld hinzu.
ADD CONSTRAINT: Mithilfe dieser Anweisung fgen Sie Ihrer Tabelle einen Mehrfachindex
hinzu.
DROP COLUMN: Durch den Einsatz dieser SQL-Anweisung entfernen Sie ein Feld aus Ihrer
Tabelle.
DROP CONSTRAINT: Lscht einen Mehrfachindex aus Ihrer Tabelle.
Die Syntax der Anweisung Alter lautet:
Alter Table Tabellennamen SQLAnw Name Datentyp
Im Argument Tabellennamen geben Sie den Namen der Tabelle an, in der Sie eine der vier
Operatoren durchfhren mchten. ber die SQL-Anweisung SQLAnw legen Sie fest, welche
Aktion Sie ausfhren mchten. Im Argument Name geben Sie den Namen der Spalte/des Inde-
xes an. Im letzten Argument Datentyp geben Sie einen Typ aus Tabelle 104 an. Bei Lsch-
aktionen sowie bei der Anlage eines Indexes muss das letzte Argument nicht angegeben
werden.
Im folgenden Beispiel aus Listing 325 wird der Tabelle Artikel ein zustzliches Feld mit dem
Namen AlternativArtikel hinzugefgt.
Datentyp Felddatentyp
BIT
Ja/Nein
DATETIME
Datum/Uhrzeit
DECIMAL
Numerischer Datentyp
IMAGE
OLE-Objekt
MONEY
Whrung
CHARACTER
Text
TEXT
Memo
SMALLINT
Integerzahl (32.768 bis 32.767)
TINYINT
Integerzahl zwischen 0 und 255
INTEGER
Integerzahl ([Link] bis [Link])
Tabelle 104: Die zur Verfgung stehenden Datentypen
Sandini Bib
ALTER (Tabellennderungsabfrage) 387
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im nchsten Beispiel aus Listing 326 wird die Spalte AlternativArtikel aus der Tabelle Arti-
kel wieder gelscht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub SpalteEinfgen()
Dim strSQL As String
On Error GoTo fehler
strSQL = "ALTER TABLE Artikel ADD COLUMN AlternativArtikel Text"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 325: Eine Spalte hinzufgen ber ADD COLUMN
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub SpalteEntfernen()
Dim strSQL As String
On Error GoTo fehler
strSQL = "ALTER TABLE Artikel DROP COLUMN AlternativArtikel"
[Link] False
[Link] strSQL
[Link] True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 326: Eine Spalte lschen ber DROP COLUMN
Sandini Bib
388 Abfragen programmieren
268 CREATE TABLE (Tabelle erstellen)
Verwenden Sie die SQL-Anweisung CREATE TABLE, um eine neue Tabelle in Ihrer Datenbank
anzulegen. Dabei bestimmen Sie den Namen, Feldtyp und die Gre des Felds. Die so
erstellte Tabelle ist vorerst aber noch leer. Die Syntax dieser Anweisung lautet:
CREATE TABLE Tabellennamen (XY Text(30), YY Text(10))
Im Argument Tabellennamen geben Sie den Namen der Tabelle an, die Sie erstellen mchten.
Danach folgen die einzelnen Felder, getrennt durch ein Komma, mit den gewnschten Feld-
definitionen.
Im nachfolgenden Beispiel aus Listing 327 wird eine neue Tabelle mit dem Namen KundenAkt
angelegt, die folgende Felder enthalten soll:
Firma (Textfeld mit maximal 30 Zeichen)
Kontaktperson (Textfeld mit maximal 30 Zeichen)
Ort (Textfeld mit maximal 20 Zeichen)
Land (Textfeld mit maximal 20 Zeichen)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabelleErstellenAbfrage()
Dim strSQL As String
On Error GoTo fehler
strSQL = "CREATE TABLE KundenAKT " & _
"(Firma Text(30), Kontaktperson Text(30), " & _
"Ort Text(20), Land Text (20))"
[Link] False
[Link] strSQL
[Link] True
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 327: Eine Tabelle erstellen ber CREATE TABLE
Sandini Bib
CREATE TABLE (Tabelle erstellen) 389
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Denken Sie daran, am Ende des Makros mithilfe der Methode RefreshDataBaseWindow die
Ansicht zu aktualisieren, da sonst die neue Tabelle nicht angezeigt wird. Diese Methode
simuliert das Drcken der Taste (F5).
Im folgenden Beispiel aus Listing 328 wird eine neue Tabelle mit dem Namen AlternativArtikel
angelegt und das Datenfeld Lagerbestand so definiert, dass darin keine Null eingegeben werden
darf.
Abbildung 183: Die neue Tabelle wurde angelegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabelleErstellenAbfrage2()
Dim strSQL As String
On Error GoTo fehler
strSQL = "CREATE TABLE AlternativArtikel " & _
"(Artikelname Text(30), " & _
"Lagerbestand INTEGER NOT NULL, " & _
"Mindestbestand INTEGER, Einzelpreis MONEY, " & _
"Verfallsdatum DATETIME)"
[Link] False
[Link] strSQL
[Link] True
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 328: Neue Tabelle mit Muss-Feldern anlegen
Sandini Bib
390 Abfragen programmieren
269 CREATE INDEX (Index definieren)
Mchten Sie einer Tabelle einen Index bzw. Mehrfachindex zuweisen, setzen Sie die SQL-
Anweisung CREATE INDEX ein. Ein Index beschleunigt das Suchen und Sortieren von Datenfel-
dern.
CREATE UNIQUE INDEX NameIndex ON Tabellennamen (Feld)
Im Argument NameIndex geben Sie den Namen des Indexes an, den Sie einfgen mchten.
Wenn Sie das Schlsselwort UNIQUE weglassen, dann knnen auch doppelte Stze angelegt
werden, ansonsten ist der Index eindeutig. Nach dem Argument ON geben Sie den Namen der
Tabelle sowie das Datenfeld an, das Sie mit dem Index ausstatten mchten.
Im folgenden Beispiel aus Listing 329 wird zunchst eine neue Tabelle mit dem Namen
ArtikelNeu2 erstellt und danach ein Datenfeld mit einem eindeutigen Index ausgestattet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub IndexDefinieren()
Dim strSQL As String
On Error GoTo fehler
'Erster Schritt - Tabelle anlegen
strSQL = "CREATE TABLE ArtikelNeu2 " & _
"(ArtNr INTEGER, Artikelname Text(30), " & _
"Lagerbestand INTEGER NOT NULL, " & _
"Mindestbestand INTEGER, Einzelpreis MONEY, " & _
"Verfallsdatum DATETIME)"
[Link] False
[Link] strSQL
[Link] True
'Zweiter Schritt - Index einbauen
strSQL = "CREATE UNIQUE INDEX IndexDoppelt ON ArtikelNeu2 (ArtNr)"
[Link] False
[Link] strSQL
[Link] True
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 329: Neue Tabelle mit Index erstellen ber CREATE UNIQUE INDEX
Sandini Bib
DROP INDEX (Index entfernen) 391
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
270 DROP INDEX (Index entfernen)
Mchten Sie einen bereits gesetzten Index aus einer Tabelle entfernen, setzen Sie die SQL-
Anweisung DROP INDEX ein. Die Syntax dieser Anweisung lautet:
DROP INDEX NameIndex ON TabellenNamen
Im Argument NameIndex geben Sie den Namen des Indexes an, den Sie entfernen mchten.
Im Argument TabellenNamen geben Sie den Namen der Tabelle an, die den Index enthlt.
Im folgenden Beispiel aus Listing 330 wird der eindeutige Index des Datenfelds Art-Nr ent-
fernt.
271 DROP TABLE (Tabelle entfernen)
Verwenden Sie die SQL-Anweisung DROP TABLE, um eine Tabelle aus Ihrer Datenbank zu ent-
fernen. Die Syntax dieser Anweisung lautet:
DROP TABLE TabellenName
Geben Sie im Argument TabellenName den Namen der Tabelle an, die Sie lschen mchten.
Im folgenden Beispiel aus Listing 331 wird die Tabelle ArtikelNeu2 aus der Datenbank ent-
fernt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub IndexEntfernen()
Dim strSQL As String
On Error GoTo fehler
strSQL = "DROP INDEX IndexDoppelt ON ArtikelNeu2"
[Link] False
[Link] strSQL
[Link] True
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 330: Einen Index entfernen ber DROP INDEX
Sandini Bib
392 Abfragen programmieren
272 Abfrage erstellen und speichern (ADO)
Im folgenden Beispiel aus Listing 332 wird die Tabelle Artikel ausgewertet, indem alle Arti-
kel mit einem Einzelpreis grer 20 ermittelt und mit der Abfrage gespeichert werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub TabelleEntfernenAbfrage()
Dim strSQL As String
On Error GoTo fehler
strSQL = "DROP TABLE ArtikelNeu2"
[Link] False
[Link] strSQL
[Link] True
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 331: Eine Tabelle entfernen ber DROP TABLE
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub AbfrageErstellen()
Dim DBS As [Link]
On Error GoTo fehler
Set DBS = _
[Link] _
("CREATE VIEW ErsteView (Artikelname, Einzelpreis, Lagerbestand) " & _
" AS SELECT Artikelname, Einzelpreis, Lagerbestand FROM Artikel " & _
" Where Einzelpreis > 20", , adCmdText)
Set DBS = Nothing
Exit Sub
Listing 332: Eine Abfrage erstellen (ADO)
Sandini Bib
Abfrage erstellen und speichern (DAO) 393
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die SQL-Anweisung CREATE VIEW knnen Sie eine Abfrage anlegen und speichern.
Geben Sie hinter dieser Anweisung den Namen der Abfrage an. Danach nennen Sie
getrennt durch Kommas die Datenfelder, die in der Abfrage angezeigt werden sollen. Nach
der Anweisung AS SELECT wiederholen Sie die Felder und geben bei FROM an, aus welcher
Tabelle Sie die Felder nehmen mchten. In der abschlieenden WHERE-Klausel knnen Sie das
Ergebnis noch weiter einschrnken.
273 Abfrage erstellen und speichern (DAO)
Soll eine Abfrage ber DAO erstellt und gespeichert werden, dann brauchen Sie hierfr ein
QueryDef-Objekt.
Im folgenden Beispiel aus Listing 333 werden alle Daten aus der Tabelle Kunden extrahiert, bei
denen die Kunden aus Deutschland kommen.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 184: Die erste Abfrage wurde erstellt.
Listing 332: Eine Abfrage erstellen (ADO) (Forts.)
Sandini Bib
394 Abfragen programmieren
Deklarieren Sie zu Beginn des Makros aus Listing 333 zwei Objektvariablen. In der Objekt-
variablen DBS geben Sie die Datenbank bekannt, in der Sie die Abfrage erstellen mchten. Da
es sich bei diesem Beispiel um die aktuell geffnete Datenbank handelt, wenden Sie die
Methode CurrentDb an, die eine Objektvariable vom Typ Database zurckgibt und somit der
Datenbank entspricht, die gerade geffnet ist.
Der Objektvariablen qdf weisen Sie die neue Abfrage zu, die Sie ber die Methode CreateQue-
ryDef anlegen. Bei dieser Methode geben Sie im ersten Argument den Namen der neuen
Abfrage bekannt. Im zweiten Argument haben Sie die Mglichkeit, ber eine SQL-Anwei-
sung genau zu bestimmen, was die Abfrage machen soll. Nach dem Ausfhren dieser
Methode wird die Abfrage automatisch angelegt und gespeichert.
Heben Sie die Objektverweise zu den Objekten am Ende des Makros auf, indem Sie das
Schlsselwort Nothing den Objektvariablen zuweisen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub AbfrageErstellenDAO()
Dim DBS As [Link]
Dim qdf As [Link]
On Error GoTo fehler
Set DBS = [Link]
With DBS
Set qdf = .CreateQueryDef("NeueDAOAbfrage", _
"SELECT * FROM KUNDEN WHERE Land ='Deutschland'")
.Close
End With
Set qdf = Nothing
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 333: Eine Abfrage erstellen (DAO)
Sandini Bib
Abfragen ber das Katalog-Objekt realisieren 395
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
274 Abfragen ber das Katalog-Objekt realisieren
Mchten Sie eine Abfrage erstellen und diese dann auch als Abfrage in Access speichern,
dann mssen Sie unter dem Men EXTRAS/VERWEISE die Bibliothek MICROSOFT ADO
EXT. 2.5 FOR DDL AND SECURITY (Access 2002) bzw. die Bibliothek MICROSOFT ADO
EXT. 2.7 FOR DDL AND SECURITY (Access 2003) einbinden.
ber die Eigenschaft CommandText knnen Sie die SQL-Anweisung formulieren. Die entspre-
chende Syntax gibt es in zwei Varianten:
[Link] =" SQL-Anweisung"
Im Argument SQL-Anweisung geben Sie die SQL-Anweisung an, die Sie ausfhren mchten.
[Link] ="PARAMETERS [Datenfeld] text"
ber das Schlsselwort PARAMETERS geben Sie an, dass es sich um eine Abfrage handeln soll,
bei welcher der Anwender noch einen Wert eingeben muss. Setzen Sie einen Begriff in eckige
Klammern. Dieser Begriff wird dann spter in der Meldung angezeigt, sobald Sie die Abfrage
durch einen Doppelklick starten mchten. Gleich danach legen Sie fest, um welche Art
Dateneingabe es sich dabei handeln soll.
275 Normale Abfragen erstellen
Im Makro aus Listing 334 wird zunchst eine recht einfache Abfrage erstellt, die alle Artikel
aus der Tabelle Artikel 1:1 bernimmt.
Abbildung 185: Alle Kunden aus Deutschland sind ber eine Abfrage schnell verfgbar.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Listing 334: Abfrage erstellen und speichern
Sandini Bib
396 Abfragen programmieren
Definieren Sie im ersten Schritt eine Objektvariable vom Typ ADOX. Zustzlich bentigen Sie
noch ein ADODB-Objekt vom Typ Command. Darunter speichern Sie spter mithilfe der
Eigenschaft CommandText Ihre SQL-Anweisung. In der Eigenschaft ActiveConnection geben Sie
auch hier wieder Ihre aktuelle Datenbank als Quelle an. ber das Objekt Procedures legen Sie
eine gespeicherte Prozedur an. Setzen Sie die Methode Append ein, um diesem Objekt die
Abfrage hinzuzufgen. Als weiteres Argument bentigt die Methode noch die Information,
was konkret die Abfrage machen soll. Diese Information haben Sie bereits als SQL-Anwei-
sung in der Variablen SQLcmd bekannt gegeben. Vergessen Sie nicht, die Objekte nach ihrem
Gebrauch wieder freizugeben.
Kundenabfrage durchfhren
Beim folgenden Makro aus Listing 335 wird die Tabelle Kunden ausgewertet. Dabei sollen alle
Kunden aus Berlin und Mnchen ermittelt werden.
Sub AbfrageAnlegen1()
Dim Katalog As New [Link]
Dim SQLcmd As [Link]
On Error GoTo fehler
[Link] = [Link]
Set SQLcmd = New [Link]
With SQLcmd
.CommandText = "SELECT * FROM Artikel"
End With
[Link] "ArtikelAbfr1", SQLcmd
Set SQLcmd = Nothing
Set Katalog = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 334: Abfrage erstellen und speichern (Forts.)
Sandini Bib
Normale Abfragen erstellen 397
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 186: Die Abfrage ArtikelAbfr1 wurde angelegt und kann per Klick gestartet werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub AbfrageAnlegen2()
Dim Katalog As New [Link]
Dim SQLcmd As [Link]
On Error GoTo fehler
[Link] = [Link]
Set SQLcmd = New [Link]
With SQLcmd
.CommandText = "SELECT Firma, Kontaktperson, " & _
"Strae, Ort FROM Kunden " & _
"WHERE (Ort = 'Berlin' OR Ort = 'Mnchen')"
End With
[Link] "KundenAbfr1", SQLcmd
[Link]
Listing 335: Alle Kunden aus bestimmten Orten auflisten
Sandini Bib
398 Abfragen programmieren
Lieferanten und Kundenabfrage ausfhren
Im folgenden Beispiel aus Listing 336 werden alle Kunden und Lieferanten, die aus Deutsch-
land, Spanien oder Frankreich kommen, in einer Abfrage verarbeitet.
Set SQLcmd = Nothing
Set Katalog = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 187: Die Ortsabfrage wurde aufgesetzt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub AbfrageAnlegen3()
Dim Katalog As New [Link]
Dim SQLcmd As [Link]
On Error GoTo fehler
[Link] = [Link]
Set SQLcmd = New [Link]
With SQLcmd
.CommandText = "SELECT Land, Ort, Firma, " & _
"Kontaktperson AS Ansprechpartner " & _
"FROM Kunden WHERE LAND = 'Deutschland' " & _
"UNION ALL SELECT Land, Ort, Firma, " & _
Listing 336: Mehrere Tabellen auswerten
Listing 335: Alle Kunden aus bestimmten Orten auflisten (Forts.)
Sandini Bib
Parameterabfragen erstellen (ADOX) 399
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
276 Parameterabfragen erstellen (ADOX)
Bei Parameterabfragen mssen Sie ber ein Eingabefeld das Kriterium eingeben, nach dem
die Abfrage arbeiten soll.
Artikelstamm nach Preisgrenze abfragen
Im Beispiel aus Listing 337 wird die Tabelle Artikel ausgewertet. Dabei werden alle Artikel,
die ber einer bestimmten Preisgrenze liegen, ermittelt und angezeigt. Im Ergebnis sollen alle
Felder ausgegeben werden.
"Kontaktperson FROM Lieferanten " & _
"WHERE LAND = 'Deutschland' OR " & _
"LAND = 'Spanien' OR Land = 'Frankreich' " & _
"ORDER BY Ansprechpartner"
End With
[Link] "KundenUndLieferantenAbfr1", SQLcmd
[Link]
Set SQLcmd = Nothing
Set Katalog = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 188: Eine UNION-Abfrage wurde erstellt (siehe Ring-Symbole).
Listing 336: Mehrere Tabellen auswerten (Forts.)
Sandini Bib
400 Abfragen programmieren
ber das Schlsselwort PARAMETERS geben Sie an, dass es sich um eine Abfrage handeln soll,
bei welcher der Anwender noch einen Wert eingeben muss. Setzen Sie einen Begriff in eckige
Klammern. Dieser Begriff wird dann spter in der Meldung angezeigt, sobald Sie die Abfrage
durch einen Doppelklick starten mchten. Gleich danach legen Sie fest, um welche Art
Dateneingabe es sich dabei handeln soll. Da es um einen Preis geht, knnen Sie hier den
Datentyp Money angeben.
Lieferantenabfrage nach Land
Im nchsten Beispiel aus Listing 338 wird die Tabelle Lieferanten ausgewertet. Dabei sollen
alle Lieferanten aus einem bestimmten Land ermittelt und angezeigt werden. Die Eingabe
Abbildung 189: Alle Artikel ber 10 sind gefordert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub ParameterAbfrageAnlegen()
Dim Katalog As New [Link]
Dim SQLcmd As [Link]
[Link] = [Link]
Set SQLcmd = New [Link]
With SQLcmd
.CommandText = "PARAMETERS [Preisgrenze] MONEY; " & _
"SELECT * FROM Artikel WHERE Einzelpreis > [Preisgrenze]"
End With
[Link] "ParameterAbfr1", SQLcmd
[Link]
Set SQLcmd = Nothing
Set Katalog = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 337: Eine Parameterabfrage erstellen Datentyp Money (ADOX)
Sandini Bib
Parameterabfragen erstellen (ADOX) 401
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
des gewnschten Lands erfolgt ber eine Inputbox. Als Ergebnis werden alle Felder der
Tabelle Lieferanten angefordert.
Abbildung 190: Alle Artikel mit einem Einzelpreis von mehr als 10 werden ausgegeben.
Abbildung 191: Die Eingabe des gewnschten Lands
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlADOX
'=====================================================
Sub ParameterAbfrageAnlegen2()
Dim Katalog As New [Link]
Dim SQLcmd As [Link]
On Error GoTo fehler
[Link] = [Link]
Set SQLcmd = New [Link]
With SQLcmd
.CommandText = "PARAMETERS [Land Eingabe] Text; " & _
"SELECT * FROM Lieferanten WHERE Land = [Land Eingabe]"
End With
Listing 338: Eine Parameterabfrage erstellen Datentyp Text (ADOX)
Sandini Bib
402 Abfragen programmieren
Geben Sie bei der Angabe PARAMETERS den Datentyp Text an.
277 Parameterabfragen erstellen (DAO)
Fr die Erstellung von Parameterabfragen mit DAO greifen Sie auf die Methode CreateQuery-
Def zurck und bergeben dieser Methode die Eingabedaten ber PARAMETERS.
Kundenabfrage erstellen
Im folgenden Makro aus Listing 339 wird eine Parameterabfrage auf Basis der Tabelle Kunden
erstellt. Der Anwender soll dabei nach dem Start der Parameterabfrage das Land eingeben,
anhand dessen die Kundenliste erstellt werden soll. Im Ergebnis sollen die Felder Land, Ort
und Kontaktperson aufgefhrt werden.
[Link] "ParameterAbfr2", SQLcmd
[Link]
Set SQLcmd = Nothing
Set Katalog = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 192: Alle Lieferanten aus Deutschland stehen zur Verfgung.
Abbildung 193: Als Parameter wird Frankreich erfasst.
Listing 338: Eine Parameterabfrage erstellen Datentyp Text (ADOX) (Forts.)
Sandini Bib
Parameterabfragen erstellen (DAO) 403
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber das Schlsselwort PARAMETERS geben Sie an, dass es sich um eine Abfrage handeln soll,
bei welcher der Anwender noch einen Wert eingeben muss. Setzen Sie einen Begriff in eckige
Klammern. Dieser Begriff wird dann spter in der Meldung angezeigt, sobald Sie die Abfrage
durch einen Doppelklick starten mchten. Gleich danach legen Sie fest, um welche Art
Dateneingabe es sich dabei handeln soll. Da es hier um einen Text geht, knnen Sie den
Datentyp Text angeben.
Artikel in einem Preiskorsett ausgeben
Im nchsten Beispiel aus Listing 340 wird die Tabelle Artikel ber eine Parameterabfrage
ausgewertet. Dabei sollen alle Artikel ausgegeben werden, die in einem bestimmten Preisbe-
reich liegen. Sie mssen daher zwei Parameter definieren. Im Ergebnis sollen die Felder Arti-
kelname, Einzelpreis und Lagerbestand aufgefhrt werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub ParameterAbfrageDAO()
Dim DBS As [Link]
Dim qdf As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set qdf = [Link]("ParamterAbfrageDAO", _
"PARAMETERS [Land Eingabe] Text; " & _
"SELECT Land, Ort, Kontaktperson " & _
"FROM Kunden WHERE Land = [Land Eingabe]")
[Link]
Set DBS = Nothing
Set qdf = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 339: Eine Parameterabfrage anlegen (DAO)
Sandini Bib
404 Abfragen programmieren
Abbildung 194: Nur Kunden aus Frankreich werden ausgegeben.
Abbildung 195: Die beiden Parameter werden nacheinander eingegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub ParameterAbfrageDAO2()
Dim DBS As [Link]
Dim qdf As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set qdf = [Link]("ParamterAbfrageDAO2", _
"PARAMETERS [Preis von] Money, [Preis bis] Money; " & _
"SELECT Artikelname, Einzelpreis, Lagerbestand " & _
"FROM Artikel WHERE Einzelpreis BETWEEN [Preis von] AND [Preis bis]")
[Link]
Set DBS = Nothing
Set qdf = Nothing
Exit Sub
Listing 340: Eine Abfrage mit zwei Parametern anlegen (DAO)
Sandini Bib
Parameterabfragen erstellen (DAO) 405
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Wenn Sie mehrere Parameter definieren mchten, dann geben Sie diese jeweils durch ein
Komma getrennt ein. Die Preisspanne knnen Sie ber die SQL-Syntax Einzelpreis BETWEEN
[Preis von] AND [Preis bis] bekannt geben. Da es sich hier um Preise handelt, geben Sie den
Datentyp Money an.
Datumsabfrage von Bestellungen
Als letztes Beispiel fr Parameterabfragen mit DAO wird im Makro aus Listing 341 die
Tabelle Bestellungen ausgewertet. Dabei sollen alle Bestellungen in einem bestimmten Zeit-
fenster ausgegeben werden. Als Ergebnisfelder sind dabei die Felder Bestelldatum, Empfnger,
Strae und Ort gefordert.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 196: Alle Artikel, deren Preis zwischen 10 und 15 liegt, werden angezeigt.
Abbildung 197: Eine Datumsspanne wird ber zwei Parameter abgefragt.
Listing 340: Eine Abfrage mit zwei Parametern anlegen (DAO) (Forts.)
Sandini Bib
406 Abfragen programmieren
Die Datumsspanne knnen Sie ber die SQL-Syntax Bestelldatum BETWEEN [Datum von] AND
[Datum bis]bekannt geben. Da es sich hier um Datumswerte handelt, geben Sie den Datentyp
DateTime an.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap05
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub ParameterAbfrageDAO3()
Dim DBS As [Link]
Dim qdf As [Link]
On Error GoTo fehler
Set DBS = [Link]
Set qdf = [Link]("ParamterAbfrageDAO3", _
"PARAMETERS [Datum von] DateTime, [Datum bis] DateTime; " & _
"SELECT Bestelldatum, Empfnger, Strae, Ort " & _
"FROM Bestellungen WHERE Bestelldatum BETWEEN [Datum von] AND [Datum bis]")
[Link]
Set DBS = Nothing
Set qdf = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 341: Eine Zeitspanne wird ausgewertet (DAO)
Abbildung 198: Alle Bestellungen in einem bestimmten Zeitrahmen werden ausgegeben.
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Steuerelemente, Dialoge und Formulare
In diesem Kapitel knnen Sie nachschlagen, wie Sie Formulare und Steuerelemente in Access
erstellen und programmieren. Zu Beginn werden jedoch Dialoge und Meldungsfenster vor-
gestellt.
278 Das Meldungsfenster MsgBox
In den vorherigen Kapiteln wurde die Methode MsgBox bereits hufiger eingesetzt. Diese
Methode wird z. B. verwendet, um den Anwender ber das Ergebnis eines Makros zu infor-
mieren oder auch um eine Warnmeldung auf dem Bildschirm anzuzeigen. Dabei knnen Sie
das Aussehen dieser Maske weitestgehend selbst bestimmen. Die Syntax dieser Methode
lautet:
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Argument Beschreibung
Prompt
Erforderlich. Ein Text, der als Meldung im Dialogfeld
erscheinen soll.
Buttons
Optional. Bestimmt, welche Schaltflchen in der Meldung
angezeigt werden. Diese Einstellung knnen Sie entweder
durch eine Konstante oder einen eindeutigen Index vorneh-
men. Der folgenden Tabelle knnen Sie die mglichen
Varianten entnehmen.
Title
Optional. Legt einen Text fest, der im Fenstertitel angezeigt
wird.
helpfile und context Optional. Wird eingesetzt, wenn Sie auf einen Hilfetext im
Meldungsfenster verweisen mchten.
Tabelle 105: Die Argumente der Methode MsgBox
Konstante oder Wert Beschreibung
vbOKOnly oder 0 Zeigt nur die Schaltflche OK an.
vbOKCancel oder 1 Zeigt die Schaltflchen OK und ABBRECHEN an.
vbAbortRetryIgnore oder 2 Zeigt die Schaltflchen ABBRUCH, WIEDERHOLEN und
IGNORIEREN an.
vbYesNoCancel oder 3 Zeigt die Schaltflchen JA, NEIN und ABBRECHEN an.
vbYesNo oder 4 Zeigt die Schaltflchen JA und NEIN an.
Tabelle 106: Schaltflchen-Symbole fr MsgBox
Sandini Bib
408 Steuerelemente, Dialoge und Formulare
Abhngig davon, welche Schaltflche der Anwender im Meldungsfeld anklickt, sollen unter-
schiedliche Aktionen folgen. Wird z. B. die Schaltflche ABBRECHEN angeklickt, muss das
Makro sofort beendet werden. Der folgenden Tabelle knnen Sie die mglichen Rckgabe-
werte entnehmen.
Im folgenden Beispiel aus Listing 342 soll vor der Lschung eines Formulars nachgefragt
werden, ob diese Aktion wirklich durchgefhrt werden soll.
vbRetryCancel oder 5 Zeigt die Schaltflchen WIEDERHOLEN und ABBRECHEN
an.
vbCritical oder 16 Zeigt Meldungen mit STOPP-Symbol an.
vbQuestion oder 32 Zeigt Meldungen mit FRAGEZEICHEN-Symbol an.
vbExclamation oder 48 Zeigt Meldungen mit AUSRUFEZEICHEN-Symbol an.
vbInformation oder 64 Zeigt Meldungen mit INFO-Symbol an.
vbDefaultButton1 oder 0 Erste Schaltflche ist Standardschaltflche.
vbDefaultButton2 oder 256 Zweite Schaltflche ist Standardschaltflche.
vbDefaultButton3 oder 512 Dritte Schaltflche ist Standardschaltflche.
vbDefaultButton4 oder 768 Vierte Schaltflche ist Standardschaltflche.
vbApplicationModal oder 0 Der Anwender muss auf das Meldungsfeld zuerst reagie-
ren, bevor er seine Arbeit mit der aktuellen Anwendung
fortsetzen kann.
vbSystemModal oder 4096 Alle Anwendungen werden unterbrochen, bis der Benut-
zer auf das Meldungsfeld reagiert.
vbMsgBoxHelpButton oder 16384 Fgt dem Meldungsfenster eine Hilfeschaltflche hinzu.
Konstante oder Wert Beschreibung
vbOK oder 1 Die Schaltflche OK wurde angeklickt.
vbCancel oder 2 Die Schaltflche ABBRECHEN wurde angeklickt.
vbAbort oder 3 Die Schaltflche ABBRUCH wurde angeklickt.
vbRetry oder 4 Die Schaltflche WIEDERHOLEN wurde angeklickt.
vbIgnore oder 5 Die Schaltflche IGNORIEREN wurde angeklickt.
vbYes oder 6 Die Schaltflche JA wurde angeklickt.
vbNo oder 7 Die Schaltflche NEIN wurde angeklickt.
Tabelle 107: Rckgabewerte fr Schaltflchen
Konstante oder Wert Beschreibung
Tabelle 106: Schaltflchen-Symbole fr MsgBox (Forts.)
Sandini Bib
Das Meldungsfenster MsgBox 409
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Variable intS wird festgehalten, welche Schaltflche im Meldungsfenster angeklickt
wurde. Fr den Fall, dass dabei der Wert 2 zurckgegeben wird, wurde die Schaltflche
ABBRECHEN angeklickt. In diesem Fall wird das Makro ber die Anweisung Exit Sub sofort
beendet. Enthlt der Inhalt der Variablen den Wert 1, dann wurde die Schaltflche OK ange-
klickt. Wenn dem so ist, dann lschen Sie mithilfe der Methode DeleteObject das Formular
Artikel.
Im nchsten Beispiel aus Listing 343 wird ein mehrzeiliger Meldungsdialog angezeigt. Dabei
reicht es, wenn Sie eine Schaltflche definieren.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlDialog
'=====================================================
Sub RckfrageEinholen()
Dim intS As Integer
intS = MsgBox("Wollen Sie das Formular Artikel wirklich lschen?", _
1 + vbQuestion, "Lschenrckfrage")
If intS = 2 Then
Exit Sub
Else
[Link] acForm, "Artikel"
End If
End Sub
Listing 342: Die Rckfrage vor dem Lschen eines Formulars
Abbildung 199: Das Meldungsfenster wird angezeigt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlDialog
'=====================================================
Listing 343: Mehrere Zeilen im Meldungsfenster anzeigen
Sandini Bib
410 Steuerelemente, Dialoge und Formulare
ber die Funktion Environ knnen Sie auf die Umgebungsvariablen des Betriebssystems
zugreifen, unter anderem auch auf den am System angemeldeten Anwender. ber die Stan-
dard-VBA-Funktionen Date und Time geben Sie das aktuelle Datum sowie die Uhrzeit aus.
279 Der Eingabedialog Inputbox
Mithilfe der Methode InputBox versetzen Sie den Anwender in die Lage, einzelne Eingaben in
einer Maske vorzunehmen. Diese Funktion eignet sich fr kleinere Aufgaben hervorragend
und auch hier knnen Sie Aussehen und Funktion des Dialogfelds selbst bestimmen. Diese
Methode hat folgende Syntax:
InputBox(prompt, title, default, Left, Top, helpFile, helpContext)
Sub MehrzeiligeMsgBoxAnzeigen()
MsgBox "Hallo Anwender " & Environ("username") _
& vbLf & "Heute ist der " & Date & vbLf & "Genau " & Time & " Uhr!", _
vbInformation, "Information"
End Sub
Abbildung 200: Eine Bildschirmmeldung mit drei Zeilen
Argument Beschreibung
Prompt
Erforderlich. Ein Text, der als Meldung im Dialogfeld
erscheinen soll.
title . . Optional. Legt einen Text fest, der im Fenstertitel angezeigt
wird.
default
Optional. Hier kann eine Vorbelegung vorgenommen wer-
den, die im Textfeld angezeigt wird, wenn der Benutzer
keine Eingabe vorgenommen hat. Wenn Sie das Argument
weglassen, wird ein leeres Textfeld angezeigt.
Tabelle 108: Die Argumente der Methode Inputbox
Listing 343: Mehrere Zeilen im Meldungsfenster anzeigen (Forts.)
Sandini Bib
Die FileDialog-Standarddialoge 411
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 344 wird eine Inputbox verwendet, um eine Eingabe zu
erzwingen. Sollte der Anwender keine Eingabe vornehmen, dann wird das Makro sofort
beendet.
280 Die FileDialog-Standarddialoge
Das FileDialog-Objekt kann einsetzt werden, um Standarddialoge wie FFNEN oder SPEI-
CHERN aufzurufen. Als Dialoge stehen Ihnen die folgenden vier Standarddialoge zur Verf-
gung:
left und top Optional. Legt die Position auf dem Bildschirm fest, wo das
entsprechende Dialogfeld angezeigt werden soll. So wird
beim Argument left der horizontale Abstand des linken
Rands des Dialogfelds vom linken Rand des Bildschirms
festgelegt. Beim Argument top wird der vertikale Abstand
des oberen Rands des Dialogfelds vom oberen Rand des
Bildschirms festgelegt.
helpfile und context Optional. Diese Argumente werden eingesetzt, wenn Sie
auf einen Hilfetext im Eingabefenster verweisen mchten.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlDialog
'=====================================================
Sub EingabeErzwingen()
Dim strEingabe As String
strEingabe = InputBox("Bitte geben Sie einen Namen ein!")
If strEingabe = vbNullString Then
Exit Sub
Else
MsgBox "Sie haben den Namen " & strEingabe & " eingegeben!", vbInformation
End If
End Sub
Listing 344: Eine Eingabe ber Inputbox auswerten
Dialogtyp Beschreibung
msoFileDialogFilePicker
DATEIAUSWAHL
msoFileDialogFolderPicker
ORDNERAUSWAHL
Tabelle 109: Die vier Standarddialoge
Argument Beschreibung
Tabelle 108: Die Argumente der Methode Inputbox (Forts.)
Sandini Bib
412 Steuerelemente, Dialoge und Formulare
Im folgenden Beispiel aus Listing 345 wird der Dialog DATEIAUSWAHL angezeigt und darin
werden Bilder in der Miniaturansicht angeboten. Damit Sie spter die ausgewhlten Bilder
im Internet Explorer anzeigen knnen, aktivieren Sie in der Entwicklungsumgebung unter
EXTRAS/VERWEISE die Bibliothek MICROSOFT INTERNET CONTROLS.
Setzen Sie die Eigenschaft AllowMultiSelect auf den Wert True, wenn der Benutzer die Mg-
lichkeit hat, mehrere Dateien in einem Dateidialogfeld auszuwhlen. ber die Eigenschaft
ButtonName knnen Sie den angezeigten Text einer Aktionsschaltflche des Dialogs festlegen.
msoFileDialogOpen
FFNEN
msoFileDialogSaveAs
SPEICHERN UNTER
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlDialog
'=====================================================
Sub DateiAuswahlDialogAnzeigen()
Dim dlg As FileDialog
Dim ArrAuswahl As Variant
Dim ie As InternetExplorer
Set dlg = [Link](msoFileDialogFilePicker)
With dlg
.AllowMultiSelect = True
.ButtonName = "Zeigen"
.InitialFileName = "*.jpg"
.[Link]
.[Link] "Bilder", "*.jpg; *.gif"
.InitialView = msoFileDialogViewThumbnail
.Title = "Markieren Sie einige Bilder"
If .Show Then
For Each ArrAuswahl In .SelectedItems
Set ie = New InternetExplorer
[Link] = True
[Link] ArrAuswahl
Next
Else
MsgBox "Sie haben Abbrechen gedrckt!"
End If
End With
End Sub
Listing 345: Den Dateiauswahl-Dialog anzeigen
Dialogtyp Beschreibung
Tabelle 109: Die vier Standarddialoge (Forts.)
Sandini Bib
Die FileDialog-Standarddialoge 413
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Standardmig wird diese Eigenschaft auf den Standardtext fr den Typ des Dateidialogfelds
gesetzt.
Die Eigenschaft InitialFileName legt den zuerst in einem Dateidialogfeld angezeigten Pfad
und/oder Dateinamen fest.
ber die Eigenschaft Filters knnen Sie einen Dateifilter im Dialogfeld einstellen.
ber die Anweisung [Link] lschen Sie den bisher eingestellten Filter. ber die
Anweisung
[Link] "Bilder", "*.gif; *.jpg; *.jpeg", 1
fgen Sie beispielsweise einen Bildfilter ein und positionieren den ersten Eintrag im Drop-
down-Men DATEITYP auf den Eintrag *.GIF.
ber die Eigenschaft InitialView legen Sie fest, in welcher Ansicht die Dateien im Dialog
angeboten werden sollen.
Dabei stehen folgende Ansichtstypen zur Verfgung.
Abbildung 201: Der Standarddialog zur Dateiauswahl wird benutzerdefiniert angezeigt.
Typ Beschreibung
msoFileDialogViewDetails
Ansicht DETAILS
msoFileDialogViewLargeIcons
Ansicht GROSSE SYMBOLE
msoFileDialogViewList
Ansicht LISTE
msoFileDialogViewPreview
Ansicht VORSCHAU
msoFileDialogViewProperties
Ansicht EIGENSCHAFTEN
Tabelle 110: Die Ansichtstypen fr Dateien
Sandini Bib
414 Steuerelemente, Dialoge und Formulare
ber die Eigenschaft Title knnen Sie den Titel eines Dialogs festlegen. Die Methode Show
zeigt ein Dateidialogfeld an und gibt dann einen Long-Wert zurck, der angibt, ob der
Benutzer auf die Schaltflche zum Ausfhren der Aktion (1) oder auf die Schaltflche zum
ABBRECHEN (0) geklickt hat.
Die Eigenschaft SelectedItems gibt eine FileDialogSelectedItems-Auflistung zurck. Diese
Auflistung enthlt eine Liste der Pfade von Dateien, die ein Benutzer in einem mithilfe der
Show-Methode des FileDialog-Objekts angezeigten Dateidialogfeld ausgewhlt hat.
281 Sonstige Dialoge
Eine weitere Mglichkeit, Dialoge einzusetzen, die in Access standardmig ja schon zur Ver-
fgung stehen, ist der Aufruf von Dialogen ber die Methode RunCommand.
msoFileDialogViewSmallIcons
Ansicht KLEINE SYMBOLE
msoFileDialogViewThumbnail
Miniaturansicht
msoFileDialogViewWebView
Webansicht
Abbildung 202: Die ausgewhlten Bilder werden im Internet Explorer angezeigt.
Typ Beschreibung
Tabelle 110: Die Ansichtstypen fr Dateien (Forts.)
Sandini Bib
Formulare 415
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Methode RunCommand knnen Sie jeden Menbefehl automatisch per Code ausfh-
ren lassen. So knnen Sie beispielsweise auch den integrierten DRUCKEN-Dialog von Access
aufrufen, indem Sie aus dem Men DATEI den Befehl DRUCKEN ber ein Makro auswhlen.
Fgen Sie dazu das Makro aus Listing 346 in der Entwicklungsumgebung von Access ein.
Wenden Sie im ersten Schritt das Objekt DoCmd an, um Zugriff auf weitere Methoden in
Access zu erlangen. Eine dieser Methoden ist OpenReport, ber die Sie einen Bericht aufrufen
knnen. ber die Konstante acViewPreview bestimmen Sie, dass der Bericht in der Berichts-
vorschau aufgerufen wird. Dieser Bericht soll nun gedruckt werden, jedoch mchten Sie
vorab noch einige Einstellungen am Drucker ber den Dialog DRUCKEN einstellen.
Um nun den Dialog DRUCKEN richtig abfangen zu knnen, mssen Sie dafr sorgen, dass es
beim Abbruch dieses Dialogs ber die Schaltflche ABBRECHEN nicht zu einem Laufzeitfehler
kommt. Dazu integrieren Sie eine On Error-Klausel vor dem Aufruf des Dialogs und verzwei-
gen im Fehlerfall (wenn die Schaltflche ABBRECHEN angeklickt bzw. die Taste (ESC) gedrckt
wird) zum Paragraphen Fehler. Dort angekommen, springen Sie ber die Anweisung Exit
Sub ohne weitere Aktionen direkt aus dem Makro. Alle weiteren Schaltflchen im Dialog
DRUCKEN knnen wie gewohnt bedient werden und mssen nicht weiter abgefangen werden.
282 Formulare
Mchten Sie mit Formularen in Access arbeiten, um sich beispielsweise die Eingabe von
Daten zu erleichtern oder Suchfunktionen in Access einzusetzen, dann knnen Sie sich Ihre
eigenen Formulare zusammenbasteln. Fr diese Aufgabe knnen Sie den Formular-Assisten-
ten von Access einsetzen und spter das erzeugte Formular weiter verfeinern.
Um ein Formular ber den Formular-Assistenten zu erzeugen, befolgen Sie die nchsten
Arbeitsschritte:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlDialog
'=====================================================
Sub DialogDrucken()
[Link] "Rechnung", acViewPreview
On Error GoTo fehler
[Link] acCmdPrint
Exit Sub
fehler:
End Sub
Listing 346: Einen integrierten Dialog aufrufen
Sandini Bib
416 Steuerelemente, Dialoge und Formulare
1. Begeben Sie sich in das Datenbankfenster und whlen Sie aus dem Men ANSICHT den
Befehl DATENBANKOBJEKTE/FORMULARE aus.
2. Klicken Sie auf die Schaltflche NEU.
3. Markieren Sie im Listenfeld den Eintrag FORMULAR-ASSISTENT und whlen Sie aus dem
Dropdown-Men die Tabelle oder die Abfrage aus, auf deren Grundlage Sie das Formular
erstellen mchten. Stellen Sie dort jetzt beispielsweise einmal die Tabelle ARTIKEL ein.
4. Klicken Sie danach auf OK.
5. Markieren Sie die einzelnen Datenfelder, die Ihr Formular anzeigen soll, und klicken Sie
auf die Pfeilsymbole, um die Felder einzufgen.
6. Klicken Sie danach auf WEITER.
7. Bestimmen Sie das Layout Ihres Formulars, indem Sie eine der angebotenen Optionen
auswhlen.
8. Klicken Sie danach auf WEITER, um zum nchsten Schritt des Assistenten zu gelangen.
9. Whlen Sie ein gewnschtes Format fr das Formular aus und betrachten Sie das Resultat
im linken Vorschaufenster.
10. Klicken Sie danach auf WEITER.
11. Geben Sie im letzten Schritt des Assistenten dem Formular einen Namen und lassen Sie
die Einstellungen wirksam werden, indem Sie auf die Schaltflche FERTIG STELLEN klicken.
Das Formular wird gleich danach standardmig aufgerufen.
Abbildung 203: Der integrierte Dialog Drucken wurde aufgerufen.
Sandini Bib
Formulare 417
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 204: Den Formular-Assistenten einsetzen
Abbildung 205: Das fertige Formular
H
i
n
w
e
i
s
Selbstverstndlich knnen Sie ein Formular auch ohne Verwendung des Formular-
Assistenten entwerfen und von Grund auf neu erstellen. Wechseln Sie dazu in das
Datenbankfenster und klicken Sie in der Objektliste auf den Eintrag FORMULAR.
Klicken Sie danach auf das Symbol NEU. Whlen Sie im Dialogfeld NEUES FORMULAR
im Listenfeld den Eintrag ENTWURFSANSICHT, whlen Sie die Tabelle bzw. Abfrage
aus, auf die sich das Formular beziehen soll, und besttigen Sie ber die Schaltflche
OK.
Sandini Bib
418 Steuerelemente, Dialoge und Formulare
283 Die Steuerelemente fr Formulare
Sobald Sie in die Entwurfsansicht eines Formulars wechseln, wird die Symbolleiste TOOLBOX
eingeblendet. Diese Toolbox enthlt die Steuerelemente fr Ihr Formular.
Entnehmen Sie der folgenden Tabelle die zur Verfgung stehenden Steuerelemente.
Element Beschreibung
ber das Symbol OBJEKTE MARKIEREN knnen Sie Formularfelder markieren.
Das Symbol BEZEICHNUNG setzen Sie ein, um beschreibenden Text, z. B. Titel, Beschrif-
tungen oder kurze Anweisungen, fr andere Formularfelder anzuzeigen. Bezeich-
nungsfelder zeigen keine Werte aus Feldern oder Ausdrcken an. Sie sind stets
ungebunden. Es handelt sich dabei standardmig um konstante Texte.
Das Symbol TEXTFELD verwenden Sie, um Daten aus einer Datenherkunft anzuzeigen.
Dieser Textfeldtyp wird als gebundenes Textfeld bezeichnet, da es an Daten eines Felds
(Daten aus einer Tabelle oder einer Abfrage) gebunden ist. Textfelder knnen jedoch
auch ungebunden sein. Sie knnen beispielsweise ein ungebundenes Textfeld erstellen,
um das Ergebnis einer Berechnung anzuzeigen oder Benutzereingaben aufzunehmen.
Daten in einem ungebundenen Textfeld werden dann jedoch nicht in einer Tabelle
gespeichert.
Sie knnen eine OPTIONSGRUPPE in einem Formular dazu verwenden, eine begrenzte
Anzahl an Auswahlmglichkeiten anzuzeigen. Eine Optionsgruppe erleichtert das Aus-
whlen eines Werts, da Sie nur auf den gewnschten Wert klicken mssen. In einer
Optionsgruppe kann immer nur eine Option ausgewhlt werden.
Bei der UMSCHALTFLCHE handelt es sich um eine Schaltflche, die einem Lichtschalter
hnelt. Sie kann immer nur einen Zustand annehmen. Wenn Sie diese Schaltflche
anklicken, wird sie gedrckt dargestellt. Ein nochmaliger Klick darauf entrastet diese
Schaltflche wieder.
Das OPTIONSFELD, auch bekannt als RADIOBUTTON, kann aktiviert oder nicht aktiviert
sein. Im aktivierten Zustand ist das Optionsfeld mit einem schwarzen Punkt ausgefllt.
Sind Optionsfelder gruppiert, kann immer nur ein Optionsfeld aktiviert sein.
Das KONTROLLKSTCHEN kann entweder aktiviert oder nicht aktiviert sein. Im aktivier-
ten Zustand erscheint im Kstchen ein Hkchen. Wenn Sie Kontrollkstchen in einer
Gruppe verwenden, knnen eines oder auch mehrere Kontrollkstchen aktiviert sein.
Ein Kombinationsfeld besteht streng genommen aus einem Eingabefeld, welches mit
einem Listenfeld gekoppelt ist. Kombinationsfelder erkennen Sie daran, dass sich
rechts neben dem Eingabefeld ein kleiner Pfeil nach unten befindet. Mit einem Klick
darauf werden Ihnen weitere Auswahlmglichkeiten angeboten. In einem Kombina-
tionsfeld kann immer nur ein Eintrag gewhlt werden.
Verwandt mit dem Kombinationsfeld ist auch das Listenfeld. Das Listenfeld bentigt
jedoch mehr Platz, weil mehrere Eintrge gleichzeitig angezeigt werden. Ein Listenfeld
kann so eingestellt werden, dass sich mehrere Eintrge auswhlen lassen.
Tabelle 111: Die Steuerelemente fr Formulare
Sandini Bib
Formulare auslesen 419
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
284 Formulare auslesen
Um auf einzelne Steuerelemente in Formularen zuzugreifen, mssen Sie erst einmal wissen,
wie Sie diese ansprechen knnen. ber die Auflistung Controls lassen sich alle Steuerele-
mente auf einem Formular auslesen.
Das folgende Beispiel aus Listing 347 ermittelt die Namen aller Steuerelemente, die sich im
Formular Artikel befinden. Dazu durchlaufen Sie alle Steuerelemente, die in der Auflistung
Controls verzeichnet sind, und setzen Sie die Eigenschaft Name ein, um die Namen der Steuer-
elemente zu ermitteln.
Befehlsschaltflchen bieten Ihnen die Mglichkeit, Aktionen auszufhren, indem Sie
einfach auf die Schaltflchen klicken.
Das Symbol BILD setzen Sie ein, wenn Sie in Ihrem Formular ein Bild anzeigen mch-
ten. Nach dem Einfgen dieses Symbols in Ihr Formular ffnet sich ein Dialogfeld, in
dem Sie das gewnschte Bild von Ihrer Festplatte auswhlen knnen. Dieses Bild wird
dann unverknpft eingefgt.
Das Symbol OBJEKTFELD kommt dann zum Einsatz, wenn Sie Ihrem Formular ein
ungebundenes Bild hinzufgen wollen und dabei die Verknpfung zur Quelle erhalten
mchten. Bei einem ungebundenen Objekt besteht keine Beziehung zu den Daten-
feldern in der Tabelle bzw. der Abfrage.
Das Symbol GEBUNDENES OBJEKTFELD setzen Sie ein, wenn sich das eingefgte Objekt
direkt auf ein Datenfeld in Ihrer Tabelle oder Abfrage bezieht.
Mithilfe des Symbols SEITENUMBRUCH legen Sie bei mehrseitigen Formularen den
Seitenumbruch fest.
Das Symbol REGISTERSTEUERELEMENT kann eingesetzt werden, um ein Formular mit-
hilfe von mehreren Registerkarten bersichtlicher zu gestalten. Sie knnen somit
Informationen sinngem trennen und in Gruppen aufsplitten.
ber das Symbol UNTERFORMULAR/-BERICHT knnen Sie ausgehend von Ihrem For-
mular ein weiteres Unterformular anzeigen.
Mithilfe des Symbols LINIE knnen Sie Ihr Formular optisch strukturieren. Diese Linie
knnen Sie beispielsweise mit einem Spezialeffekt versehen, um einen rumlichen
Trenneffekt zu erzeugen.
Auch ber das Symbol RECHTECK knnen Sie schne gestalterische Effekte in Ihrem
Formular erzeugen. Fassen Sie beispielsweise mehrere zusammenhngende Informa-
tionen in einem Rahmenrechteck zusammen, um diese Infos als Gruppe darzustellen.
ber das Symbol WEITERE STEUERELEMENTE haben Sie Zugriff auf weitere mgliche
Elemente, die Sie fr Ihr Formular einsetzen knnen.
Element Beschreibung
Tabelle 111: Die Steuerelemente fr Formulare (Forts.)
Sandini Bib
420 Steuerelemente, Dialoge und Formulare
Deklarieren Sie zunchst zwei Objektvariablen. In der Variablen frm geben Sie ber die
Anweisung Set den Namen des Formulars an, auf das Sie zugreifen mchten. ber eine For
each Next-Schleife arbeiten Sie alle Steuerelemente, die ber die Objektvariable ctl angespro-
chen werden knnen, im Formular ab und ermitteln den Namen des jeweiligen Steuerele-
ments mithilfe der Eigenschaft Name. ber die Anweisung [Link] geben Sie die
Steuerelemente im Direktfenster der Entwicklungsumgebung aus.
Wollen Sie ermitteln, um welches Steuerelement es sich handelt, setzen Sie die Eigenschaft
ControlType ein. Diese Eigenschaft gibt einen Indexwert zurck. So haben Textfelder den
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlForm
'=====================================================
Sub SteuerelementeAuslesen()
Dim frm As Form
Dim ctl As Control
Set frm = Form_Artikel
For Each ctl In [Link]
[Link] [Link]
Next ctl
End Sub
Listing 347: Steuerelemente auslesen
Abbildung 206: Alle Steuerelemente des Formulars Artikel
Sandini Bib
Formulare auslesen 421
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Index 109, Beschriftungsfelder den Wert 100, Schaltflchen den Wert 104 und Kontrollkst-
chen den Wert 106.
Im folgenden Beispiel aus Listing 348 werden die Steuerelemente des Formulars Artikel
identifiziert.
Mithilfe der Eigenschaft ControlType knnen Sie die einzelnen Steuerelemente im Formular
unterscheiden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlForm
'=====================================================
Sub SteuerelementeIDentifizieren()
Dim frm As Form
Dim ctl As Control
Set frm = Form_Artikel
For Each ctl In [Link]
[Link] "Typ: " & [Link] & " Name: " & [Link]
Next ctl
End Sub
Listing 348: Identifikation der Steuerelemente
Abbildung 207: Der Typ der Steuerelemente wird ermittelt.
Sandini Bib
422 Steuerelemente, Dialoge und Formulare
Die Typen der einzelnen Steuerelemente knnen Sie aber auch ber Konstanten ermitteln.
Sehen Sie sich dazu die folgende Tabelle an.
Im folgenden Beispiel aus Listing 349 sollen nur die Textfelder des Formulars Artikel ermit-
telt und im Direktfenster ausgegeben werden.
Konstante Steuerelement
acBoundObjectFrame
Gebundenes Objektfeld
acCheckBox
Kontrollkstchen
acComboBox
Kombinationsfeld
acCommandButton
Befehlsschaltflche
acCustomControl
ActiveX-Steuerelement
acImage
Bild
acLabel
Bezeichnungsfeld
acLine
Linie
acListBox
Listenfeld
acObjectFrame
Ungebundenes Objektfeld oder Diagramm
acOptionButton
Optionsschaltflche
acOptionGroup
Optionsgruppe
acPage
Seite
acPageBreak
Seitenwechsel
acRectangle
Rechteck
acSubform
Unterformular/-bericht
acTabCtl
Registersteuerelement
acTextBox
Textfeld
acToggleButton
Umschaltflche
Tabelle 112: Die Konstanten, um die Steuerelemente zu identifizieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlForm
'=====================================================
Sub NurTextfelderAusgeben()
Dim frm As Form
Dim ctl As Control
Set frm = Form_Artikel
Listing 349: Nur Textfelder ber die Konstante acTextBox ermitteln
Sandini Bib
Formulare ffnen und schlieen 423
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Eigenschaft ControlType kann auch direkt ber Konstanten, die Sie in Tabelle 112 sehen
knnen, abgefragt werden.
285 Formulare ffnen und schlieen
Um ein Formular mit VBA aufzurufen, setzen Sie die Methode OpenForm ein. Die Syntax
dieser Methode lautet:
OpenForm(Formularname, Ansicht, Filtername, Bedingung, Datenmodus, Fenstermodus,
ffnungsargumente)
For Each ctl In [Link]
If [Link] = acTextBox Then
[Link] "Typ: " & [Link] & " Name: " & [Link]
End If
Next ctl
End Sub
Abbildung 208: Es werden nur Textfelder ausgegeben.
Argument Beschreibung
Formularname
Erforderlich. Gibt den Namen des Formulars an, das geffnet werden
soll.
Ansicht
Optional. Legt die Art der Ansicht des Formulars fest.
acDesign: ffnet das Formular in der Entwurfsansicht.
acNormal ffnet das Formular wie gewohnt. Sie knnen diese Kon-
stante aber auch weglassen.
Filtername und Bedingung Optional. Stellt einen Filter ein, um nur bestimmte Datenstze im For-
mular anzuzeigen.
Tabelle 113: Die Argumente der Methode OpenForm
Listing 349: Nur Textfelder ber die Konstante acTextBox ermitteln (Forts.)
Sandini Bib
424 Steuerelemente, Dialoge und Formulare
Im folgenden Beispiel aus Listing 350 wird das Formular Artikel in der Dialogansicht aufge-
rufen und ein Filter voreingestellt.
bergeben Sie der Methode OpenForm den Namen des Formulars, das Sie ffnen mchten.
Danach legen Sie den Anzeigemodus fest und bergeben der Methode einen Filter.
Datenmodus
Optional. Legt fest, welche Aufgaben der Anwender im Formular durch-
fhren kann. Dabei stehen Ihnen folgende Konstanten zur Verfgung.
acFormAdd: Der Anwender kann neue Datenstze im Formular hinzu-
fgen, jedoch keine bestehenden Datenstze bearbeiten.
acFormEdit: Der Anwender kann bestehende Datenstze im Formular
bearbeiten und neue Datenstze hinzufgen.
AcFormPropertySettings: Mit dieser Standardkonstante knnen Sie alle
Aktionen im Formular durchfhren
acFormReadOnly: Der Anwender kann die Datenstze im Formular
nur ansehen.
Fenstermodus
Optional. Legt fest, wie das Formular angezeigt werden soll.
acWindowNormal: ffnet das Formular in der Standardansicht.
acHidden: blendet das Formular aus.
acIcon: Das Formular wird unten am Bildschirm in Form eines kleinen
Symbols in der Titelleiste angezeigt.
acDialog: ffnet das Formular als Dialogfeld. Dabei knnen Sie mit
einer anderen Aufgabe erst weiterarbeiten, wenn Sie das Formular
wieder geschlossen haben.
ffnenArgumente
Optional. Dabei knnen Sie dem Formular bereits beim ffnen
bestimmte Werte bzw. Einstellungen mitgeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlForm
'=====================================================
Sub FormularAufrufen()
On Error GoTo fehler
[Link] "Artikel", acNormal, "Einzelpreis", _
"Einzelpreis > 50", , acDialog
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 350: Formular ffnen und Filter einstellen
Argument Beschreibung
Tabelle 113: Die Argumente der Methode OpenForm (Forts.)
Sandini Bib
Formulare ffnen und schlieen 425
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Soll ein Formular wieder geschlossen werden, dann setzen Sie hierfr die Methode Close ein.
Die Syntax dieser Methode lautet:
Close(Objekttyp, Objektname, Speichern)
Im Makro aus Listing 351 wird das Formular Artikel geschlossen. Vorher erfolgt jedoch eine
Prfung, ob das betreffende Formular berhaupt geffnet ist.
Abbildung 209: Das Formular mit eingestelltem Filter ffnen
Argument Beschreibung
Objekttyp Erforderlich. Gibt den Typ des Objekts an. Zur Verfgung
stehen dabei folgende Konstanten: acDataAccessPage,
acDefault (Standard), acDiagram, acForm, acFunction,
acMacro, acModule, acQuery, acReport, acServerView,
acStoredProcedure, acTable
Objektname Optional. Enthlt den Namen des Formulars.
Speichern Optional. Gibt an, wie bzw. ob nderungen vor dem
Schlieen des Formulars gespeichert werden sollen. Dazu
stehen folgende Konstanten zur Verfgung:
AcSaveNo: Bei dieser Konstante werden nderungen nicht
gespeichert.
AcSavePrompt: Hier wird nachgefragt, ob nderungen am
Formular gespeichert werden sollen. Dies ist die Standard-
einstellung.
AcSaveYes: Bei dieser Konstante werden nderungen beim
Schlieen des Formulars ohne Rckfrage gespeichert.
Tabelle 114: Die Argumente der Methode Close
Sandini Bib
426 Steuerelemente, Dialoge und Formulare
ber die Funktion IsLoaded knnen Sie feststellen, ob ein bestimmtes Formular geffnet ist.
Wenn ja, dann meldet diese Funktion den Wert True zurck. In diesem Fall wenden Sie die
Methode Close an, um das Formular zu schlieen.
286 Aktivierreihenfolge anpassen
Wenn Sie alle Formularfelder in ein Formular integriert haben, knnen Sie die Aktivierrei-
henfolge festlegen. Damit ist die Reihenfolge der Formularfelder gemeint, wenn Sie das For-
mular ffnen und mit der Taste () von einem Formularfeld zum anderen springen.
Mchten Sie rckwrts springen, drcken Sie die Tastenkombination () + (). Standard-
mig ist diese Reihenfolge schon vorgegeben. Die Aktivierfolge entspricht der Reihenfolge,
in der Sie die einzelnen Formularfelder in Ihr Formular eingefgt haben.
Die Aktivierreihenfolge wird wie folgt festgelegt:
1. Wechseln Sie in die Entwurfsansicht des Formulars.
2. Klicken Sie mit der rechten Maustaste mitten ins Formular und whlen Sie aus dem Kon-
textmen den Befehl AKTIVIERREIHENFOLGE.
3. Mchten Sie die Reihenfolge von Access selbst bestimmen lassen, klicken Sie auf die
Schaltflche AUTOMATISCH. Damit legt Access die Aktivierreihenfolge der Steuerelemente
von links nach rechts und von oben nach unten fest. Die Felder werden in der Datenblatt-
ansicht des Formulars entsprechend der neuen Aktivierreihenfolge angeordnet.
4. Mchten Sie hingegen eine andere Aktivierreihenfolge fr Ihre Formularfelder haben,
klicken Sie auf die jeweilige graue Schaltflche und ziehen Sie diese an die gewnschte
Stelle.
5. Besttigen Sie Ihre Einstellung mit OK.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Modul mdlForm
'=====================================================
Sub FormularSchlieen()
On Error GoTo fehler
If [Link]("Artikel").IsLoaded = True Then
[Link] acForm, "Artikel", acSaveYes
End If
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 351: Formular schlieen
Sandini Bib
Formularhintergrund einstellen 427
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Um die Aktivierreihenfolge zu testen, drcken Sie in der Entwurfsansicht die Taste (F5). Das
Formular wird geffnet und Sie knnen die Aktivierreihenfolge nun testen, indem Sie mit
der Taste () die einzelnen Felder anspringen. Um wieder zum Formularentwurf zurckzu-
gelangen, klicken Sie das Formular mit der rechten Maustaste an und whlen im Kontext-
men den Befehl FORMULARENTWURF aus.
287 Formularhintergrund einstellen
Sie sind nicht an die Hintergrundfarbe GRAU gebunden, die zwar standardmig fr Formu-
lare in Access verwendet wird, aber nicht vorgeschrieben ist. Die Hintergrundfarbe fr
Formulare stellen Sie in Access ber die Eigenschaft BackColor ein. Fr die Farbzusammen-
setzung wenden Sie die Funktion RGB an. Bei RGB handelt es sich um ein System von Farbwer-
ten, das verwendet wird, um Farben als eine Mischung aus Rot (R), Grn (G) und Blau (B)
zusammenzusetzen. Die Farbe wird als eine Gruppe aus drei ganzen Zahlen definiert
(R,G,B), wobei jede ganze Zahl im Bereich von 0 bis 255 liegt. Ein Wert von 0 bedeutet, dass
diese Farbkomponente nicht vorhanden ist. Ein Wert von 255 zeigt dagegen an, dass diese
Farbkomponente mit ihrer hchsten Intensitt verwendet wird.
Im Formular aus Listing 352 wird nach jedem Klicken auf die Schaltflche eine andere Hin-
tergrundfarbe eingestellt. Die Auswahl der Farbe erfolgt jeweils nach dem Zufallsprinzip.
Dabei werden die verwendeten RGB-Werte in der Titelleiste des Formulars ausgegeben.
Abbildung 210: Aktivierreihenfolge festlegen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Textfelder
'=====================================================
Listing 352: Hintergrundfarbe des Formulars festlegen
Sandini Bib
428 Steuerelemente, Dialoge und Formulare
Setzen Sie bei jedem Klick auf die Schaltflche FARBE die Funktion Rnd ein, um Zufallszahlen
im Bereich zwischen 0 und 255 zu erzeugen. Mithilfe der Funktion Int wird die Zufallszahl in
einen ganzzahligen Wert umgewandelt. Alle so ermittelten Werte werden in den Variablen
Rot, Grn und Blau gespeichert und im Anschluss als Hintergrund der Eigenschaft BackColor
und der Funktion RGB bergeben. Die Ausgabe der Zusammensetzung der RGB-Funktion
erfolgt ber die Eigenschaft Caption des Formulars.
288 Formular ohne Navigationsschaltflchen aufrufen
Mchten Sie verhindern, dass ein Anwender die Navigationsschaltflchen benutzen kann,
dann knnen Sie die Anzeige dieser Schaltflchen unterdrcken. Dazu setzen Sie das Formu-
larereignis des Formulars Form_Load ein, das automatisch ausgefhrt wird, wenn das Formu-
lar angezeigt wird. Dort blenden Sie die Schaltflchen aus.
Um das Ereignis einzustellen, gehen Sie wie folgt vor:
Private Sub Befehl7_Click()
'Hintergrund der Form anpassen
Dim intRot As Integer
Dim intGrn As Integer
Dim intBlau As Integer
intRot = Int((255 * Rnd) + 0)
intGrn = Int((255 * Rnd) + 0)
intBlau = Int((255 * Rnd) + 0)
[Link] = RGB(intRot, intGrn, intBlau)
[Link] = _
"Rot: " & intRot & " Grn: " & intGrn & " Blau: " & intBlau
End Sub
Abbildung 211: Zufallsfarbe per Mausklick einstellen
Listing 352: Hintergrundfarbe des Formulars festlegen (Forts.)
Sandini Bib
Formular ohne Navigationsschaltflchen aufrufen 429
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
1. ffnen Sie das Formular Artikel2 in der Entwurfsansicht.
2. Klicken Sie mit der rechten Maustaste auf das Formular und whlen Sie den Eintrag
EIGENSCHAFTEN aus dem Kontextmen.
3. Stellen Sie im Kombinationsfeld den Eintrag FORMULAR ein.
4. Wechseln Sie auf die Registerkarte EREIGNIS.
5. Setzen Sie den Mauszeiger in das Feld Beim Laden.
6. Klicken Sie auf das Symbol mit den drei Punkten.
7. Im Dialog GENERATOR AUSWHLEN whlen Sie den Eintrag CODE-GENERATOR aus dem
Listenfeld und besttigen Sie mit OK.
Ergnzen Sie den noch leeren Ereignisrahmen wie in Listing 353 angezeigt:
Abbildung 212: Ein Formularereignis einstellen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Form_Load()
With Me
Listing 353: Navigationsschaltflchen ausblenden
Sandini Bib
430 Steuerelemente, Dialoge und Formulare
Setzen Sie die Eigenschaft NavigationButtons auf den Wert False, um die Navigationsschalt-
flchen am unteren Rand des Formulars auszublenden. Mchten Sie zustzlich auch noch
den Datensatzmarkierer am linken Dialogrand ausblenden, dann weisen Sie der Eigenschaft
RecordSelectors ebenso den Wert False zu.
289 Hintergrund und Schriftfarbe von Textfeldern
anpassen
Im folgenden Beispiel aus Listing 354 werden alle Textfelder des Formulars Artikel1 mit der
Hintergrundfarbe Gelb sowie der Schriftfarbe Rot ausgestattet.
.NavigationButtons = False
.RecordSelectors = False
End With
End Sub
Abbildung 213: Die Steuerungsschaltflchen wurden ausgeblendet.
H
i
n
w
e
i
s
In Kapitel 8 dieses Buchs knnen Sie noch mehr Beispiele zu Ereignissen nachschlagen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
Listing 354: Hintergrund gelb und Schriftfarbe rot
Listing 353: Navigationsschaltflchen ausblenden (Forts.)
Sandini Bib
Hintergrund und Schriftfarbe von Textfeldern anpassen 431
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Eigenschaft BackColor knnen Sie die Hintergrundfarbe festlegen. Mithilfe der
Eigenschaft ForeColor bestimmen Sie die Schriftfarbe.
ber den Einsatz der Funktion RGB knnen Sie sich eine Farbe zusammenmischen. Als Argu-
mente mssen Sie hierbei drei Werte angeben. Der erste Wert steht fr den Rotanteil der
Farbe, der zweite fr den grnen Anteil und der dritte fr den blauen Anteil der gewhlten
Farbe. Die folgende Tabelle listet einige typische Farbmischungen auf.
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Sub HintergrundUndSchriftAnpassen()
Dim frm As Form
Dim ctl As Control
Dim lngFarbeRot As Long
Dim lngFarbeGelb As Long
lngFarbeRot = RGB(255, 0, 0)
lngFarbeGelb = RGB(255, 255, 0)
Set frm = Form_Artikel1
For Each ctl In [Link]
If [Link] = acTextBox Then
[Link] = lngFarbeGelb
[Link] = lngFarbeRot
End If
Next ctl
End Sub
Farbe Rotwert Grnwert Blauwert
Schwarz 0 0 0
Blau 0 0 255
Grn 0 255 0
Cyan 0 255 255
Rot 255 0 0
Magenta 255 0 255
Gelb 255 255 0
Wei 255 255 255
Tabelle 115: Die Standardfarben ber die Funktion RGB
Listing 354: Hintergrund gelb und Schriftfarbe rot (Forts.)
Sandini Bib
432 Steuerelemente, Dialoge und Formulare
290 Startposition des Cursors festhalten
Mithilfe der Eigenschaft SelStart knnen Sie die Startposition des markierten Textabschnitts
eines Textfelds festlegen. Sollte noch kein Text eingefgt worden sein, legen Sie ber diese
Eigenschaft die Einfgemarke des Mauszeigers fest. Standardmig wird beim Aktivieren
eines Textfelds immer der komplette Text markiert.
Folgende alternative Mglichkeiten der Markierung von Text gibt es bei Textfeldern.
291 Auswahl aufheben
Standardmig wird in einem Textfeld immer der ganze Text beim Anspringen markiert.
Diese Markierung knnen Sie aufheben, indem Sie die Eigenschaft SelStart sowie die Eigen-
schaft SelLength auf den Wert 0 setzen.
Im folgenden Beispiel aus Listing 355 wird das Ereignis aus Listing 353 noch ein wenig erwei-
tert. Beim Laden des Formulars wird neben dem Ausblenden der Navigationsschaltflchen
auch der Mauscursor auf das zweite Feld des Formulars gesetzt und dabei keine Markierung
des Textes vorgenommen.
Abbildung 214: Die Formatierungen der Felder wurden vorgenommen.
Anweisung Beschreibung
Me![Link] = 0
Setzt den Mauszeiger vor das erste Zeichen im Feld.
Me![Link] = Me![Link]
Setzt den Mauszeiger vor das erste Zeichen im Feld.
Tabelle 116: Alternative Markierungsformen fr Textfelder
Sandini Bib
Alte Werte festhalten 433
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Methode SetFocus setzen Sie den Mauszeiger in das gewnschte Textfeld.
292 Alte Werte festhalten
Bevor Sie einen Datensatz in einem Formular ndern, knnen Sie die alten Formularinhalte
ber die Eigenschaft OldValue sichern lassen. Damit haben Sie die Mglichkeit, Ihre Eingaben
bzw. nderungen rckgngig zu machen.
Im folgenden Beispiel aus Listing 356 wurde im Formular Artikel1 eine Schaltflche ein-
gefgt, die beim Klicken die aktuellen sowie die genderten Werte in das Direktfenster der
Entwicklungsumgebung schreibt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Form_Load()
With Me
.NavigationButtons = False
.RecordSelectors = False
.[Link]
.[Link] = 0
.[Link] = 0
End With
End Sub
Listing 355: Die Standardmarkierung in Textfeldern aufheben
Abbildung 215: Der Mauszeiger steht zu Beginn des Textfelds Artikelname.
Sandini Bib
434 Steuerelemente, Dialoge und Formulare
Die Eigenschaft ControlType gibt Auskunft darber, ob es sich um ein Textfeld handelt. Wenn
ja, dann lsst sich ber die Eigenschaft OldValue der alte Wert vor der nderung eines Text-
felds festhalten. Den aktuellen Wert fragen Sie ber die Eigenschaft Value ab.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Private Sub Befehl20_Click()
Dim ctl As Control
On Error GoTo Err_Befehl20_Click
For Each ctl In [Link]
With ctl
If .ControlType = acTextBox Then
[Link] "alter Wert" & .OldValue & vbLf & "neuer Wert" & .Value
End If
End With
Next ctl
Exit Sub
Err_Befehl20_Click:
MsgBox [Link]
End Sub
Listing 356: Alte und neue Werte festhalten
Abbildung 216: Der Preis und die Bezeichnung wurden gendert.
Sandini Bib
QuickInfo hinzufgen 435
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
293 QuickInfo hinzufgen
Setzen Sie die Eigenschaft ControlTipText ein, um einem Textfeld eine QuickInfo hinzuzuf-
gen.
Im folgenden Beispiel aus Listing 357 wird jedem Textfeld des Formulars Artikel1 eine
QuickInfo zugewiesen.
ber die Eigenschaft ControlType prfen Sie, ob es sich bei dem jeweiligen Steuerelement um
ein Textfeld handelt. Wenn ja, dann weisen Sie der Eigenschaft ControlTipText einen Text zu,
der dann im Formular angezeigt wird, wenn Sie den Mauszeiger in das entsprechende Text-
feld setzen.
294 Textfelder sperren
Setzen Sie die Eigenschaft Enabled ein, die Sie auf den Wert True setzen. Damit deaktivieren
Sie ein Textfeld. Es wird dann abgeblendet im Formular angezeigt und kann nicht editiert
werden.
Mithilfe der Eigenschaft Locked, die Sie auf den Wert True setzen, knnen Sie ein Textfeld vor
Vernderungen schtzen. Dieses knnen Sie zwar standardmig noch ansteuern, eine Bear-
beitung ist aber nicht mglich.
In den meisten Fllen werden die Eigenschaften Enabled und Locked gemeinsam eingesetzt,
denn es macht nicht immer Sinn, ein Textfeld aktiviert zu lassen, wenn der Anwender keine
nderungen daran ausfhren darf. In diesem Fall ist es besser, beide Eigenschaften kombi-
niert einzusetzen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Sub QuickInfoHinzufgen()
Dim frm As Form
Dim ctl As Control
Set frm = Form_Artikel1
For Each ctl In [Link]
With ctl
If .ControlType = acTextBox Then
.ControlTipText = "Hier bitte Eingabe vornehmen!"
End If
End With
Next ctl
End Sub
Listing 357: Kurzinformationen in Textfelder einfgen
Sandini Bib
436 Steuerelemente, Dialoge und Formulare
Im folgenden Beispiel aus Listing 358 wird fr das Feld ARTIKELNAME im Formular ARTIKEL1
festgelegt, dass darin keine nderungen vorgenommen werden drfen. Diese Aufgabe fhren
Sie am besten gleich direkt beim ffnen des Formulars durch.
Soll die Sperre auf alle Textfelder des Formulars erweitert werden, dann passen Sie das Makro
aus Listing 358 wie in Listing 359 gezeigt an.
Abbildung 217: QuickInfos hinzufgen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Private Sub Form_Open(Cancel As Integer)
On Error GoTo fehler
Me![Link] = True
Me![Link] = True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 358: Das Feld Artikelname wurde gesperrt.
Sandini Bib
Textfelder ein- und ausblenden 437
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Das Sperren von Textfeldern kann beispielsweise auch abhngig vom Anwender vorgenom-
men werden. In Kapitel 8 dieses Buchs knnen Sie nachschlagen, wie Sie mithilfe von Ereig-
nissen diesbezglich eine anwenderorientierte Lsung mit Textfeldern aufsetzen knnen.
295 Textfelder ein- und ausblenden
Textfelder knnen ausgeblendet werden, indem die Eigenschaft Visible auf den Wert False
gesetzt wird. Um diese wieder einzublenden, wird der Wert dieser Eigenschaft auf den Wert
True zurckgesetzt.
Im folgenden Beispiel aus Listing 360 wurde in das Formular Artikel1 eine Umschaltflche
eingefgt, um dynamisch Felder ein- und auszublenden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Private Sub Form_Open(Cancel As Integer)
Dim ctl As Control
On Error GoTo fehler
For Each ctl In [Link]
If [Link] = acTextBox Then
[Link] = True
[Link] = True
End If
Next ctl
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 359: Alle Textfelder eines Formulars werden gesperrt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Sub Umschaltflche23_Click()
'Textfelder ein- und ausblenden
Listing 360: Textfelder ein- und ausblenden
Sandini Bib
438 Steuerelemente, Dialoge und Formulare
Das Ein- und Ausblenden der Textfelder wird je nach Status der Textfelder vorgenommen.
Sind die Textfelder gerade ausgeblendet, dann werden sie beim nchsten Klick auf die
Umschaltflche wieder eingeblendet. Sind die Textfelder momentan sichtbar, dann werden
sie mit einem Klick ausgeblendet.
296 Textfelder begrenzen
Mchten Sie nur eine bestimmte Anzahl von Zeichen in einem Textfeld zulassen, dann kn-
nen Sie schon whrend der Eingabe berprfen, wann diese Grenze erreicht wird, und dem-
entsprechend darauf reagieren.
If [Link] = 0 Then
[Link] = "Lager Ein"
Me![Link] = False
Me![Link] = False
Me![Link] = False
Me![Link] = False
Else
[Link] = "Lager aus"
Me![Link] = True
Me![Link] = True
Me![Link] = True
Me![Link] = True
End If
End Sub
Abbildung 218: Lagerdaten beim nchsten Klick ausblenden
Listing 360: Textfelder ein- und ausblenden (Forts.)
Sandini Bib
Textfelder berwachen 439
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 361 wurde in Artikel1 das Textfeld Lagerort eingefgt,
welches ber das Ereignis KeyPress berwacht wird. In diesem Feld drfen maximal zehn
Zeichen erfasst werden.
Die berprfung der Eingabelnge des Textfelds erfolgt bei jeder Eingabe neu ber die Funk-
tion Len. Umfasst die Eingabe mehr als zehn Zeichen, dann wird automatisch eine Krzung
vorgenommen, indem mithilfe der Funktion Left vom linken Rand des Textfelds aus genau
zehn Zeichen bertragen werden.
297 Textfelder berwachen
Soll eine nderung an einem Textfeld berwacht werden, dann knnen Sie dies ber ein
Ereignis umsetzen. Im folgenden Beispiel aus Listing 362 wird im Formular Artikel1 das Feld
Bestand berwacht. Um dieses Feld so einzustellen, gehen Sie wie folgt vor:
Abbildung 219: Lagerdaten beim nchsten Klick einblenden
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Private Sub Text24_KeyPress(KeyAscii As Integer)
If Len([Link]) > 10 Then
MsgBox "Es drfen nur 10 Zeichen eingegeben werden!"
[Link] = Left([Link], 10)
End If
End Sub
Listing 361: Die Eingabe auf zehn Zeichen beschrnken
Sandini Bib
440 Steuerelemente, Dialoge und Formulare
1. ffnen Sie Ihr Formular in der Entwurfsansicht.
2. Klicken Sie mit der rechten Maustaste das Datenfeld im Formular an, das Sie auf diese
Weise berwachen mchten, und whlen Sie aus dem Kontextmen den Befehl EIGEN-
SCHAFTEN.
3. Wechseln Sie zur Registerkarte EREIGNIS.
4. Setzen Sie den Mauszeiger ins Feld Bei Gendert und klicken Sie auf die Schaltflche ganz
rechts im Feld.
5. Whlen Sie im Dialogfeld GENERATOR AUSWHLEN den Eintrag CODE-GENERATOR.
6. Besttigen Sie Ihre Wahl mit OK.
7. Ergnzen Sie den noch leeren Ereignisrahmen.
ber die Funktion Environ und die Konstante Username knnen Sie feststellen, wer die nde-
rung vorgenommen hat. Die Funktionen Date und Time liefern das nderungsdatum sowie
die Uhrzeit der nderung.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel1
'=====================================================
Private Sub Lagerbestand_Dirty(Cancel As Integer)
'Lagerbestandsnderung
[Link] "nderung von : " & Environ("Username") & vbLf & _
" am " & Date & " um " & time & vblf & _
"Artikelname: " & [Link] & vbLf & _
"Lagerbestand: " & [Link]
End Sub
Listing 362: Lagerbestandsnderung festhalten
Abbildung 220: Das Feld Lagerbestand wurde berwacht.
Sandini Bib
Textfelder initialisieren 441
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
298 Textfelder initialisieren
Bei ungebundenen Formularen mit diversen Textfeldern knnen Sie eine Funktion schrei-
ben, die alle Textfelder in einem Aufwasch initialisiert.
Um alle Textfelder in einem Formular zu leeren, starten Sie das Makro aus Listing 363.
ber die Funktion Typename knnen Sie ermitteln, ob es sich beim jeweiligen Steuerelement
um ein Textfeld handelt. Wenn ja, dann gibt diese Funktion den Text TextBox zurck. Achten
Sie bei der Abfrage auf die richtige Schreibweise: Textbox ist nicht gleich TextBox.
Abbildung 221: Die Textfelder sollen geleert werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Textfelder
'=====================================================
Private Sub Befehl6_Click()
'Textfelder lschen
Dim tb As Textbox
For Each tb In [Link]
If TypeName(tb) = "TextBox" Then [Link] = ""
Next tb
End Sub
Listing 363: Alle Textfelder leeren
Sandini Bib
442 Steuerelemente, Dialoge und Formulare
299 Textfelder prfen
Beim Verlassen eines Textfelds knnen Sie berprfen, ob eine richtige Eingabe vorgenommen
wurde. Im Beispiel aus Listing 364 wird berprft, ob berhaupt eine Eingabe vorgenommen
wurde. Wenn ja, dann erfolgt die zweite Prfung, ob ein alphanumerischer Eintrag erfasst wurde.
Prfen Sie im ersten Schritt, ob berhaupt eine Eingabe gemacht wurde. Wenn nicht, geben
Sie eine Meldung aus und beenden Sie das Makro mit der Anweisung Exit Sub. Wurde eine
Eingabe vorgenommen, berprfen Sie mithilfe der Funktion IsNumeric, ob es sich dabei um
einen gltigen numerischen Wert handelt. Gibt der Anwender versehentlich eine Zahl ein,
dann geben Sie eine Meldung auf dem Bildschirm aus.
300 Listenfelder
Die wichtigsten Eigenschaften, Funktionen und Methoden fr Listenfelder werden im Fol-
genden aufgefhrt. Als Voraussetzung dafr legen Sie ein neues Formular an und fgen ein
ungebundenes Listenfeld ein. Des Weiteren fgen Sie eine Schaltflche sowie das Steuerele-
ment BILD hinzu.
301 Listenfeld fllen
ber die Methode AddItem knnen Sie einem Listenfeld einen Eintrag hinzufgen. Die Syn-
tax lautet:
[Link](Item, Index)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Textfelder
'=====================================================
Private Sub Text0_Exit(Cancel As Integer)
If Len([Link]) = 0 Then
MsgBox "Sie mssen eine Eingabe vornehmen!"
Exit Sub
End If
If IsNumeric([Link]) = True Then
MsgBox "Sie mssen einen alphanumerischen Wert eingeben!"
Cancel = True
End If
End Sub
Listing 364: berprfung des Textfelds
Sandini Bib
Listenfeld fllen 443
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Beispiel aus Listing 365 wird im Formular Listenfeld der Schaltflche ein Makro zuge-
wiesen, welches die Namen sowie den Pfad aller Bilddateien aus einem Verzeichnis sowie den
darunter liegenden Verzeichnissen im Listenfeld einfgt.
Abbildung 222: Die Ausgangssituation
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der unter anderem ein Listenfeld oder eine
Kombinationsfeldliste zurckgibt.
Item
Erforderlich. Der angezeigte Text fr das neue Element.
Index
Optional. Die Position des Elements in der Liste. Wird dieses Argument
nicht angegeben, wird das Element am Ende der Liste hinzugefgt.
Tabelle 117: Die Argumente der Methode AddItem
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Listenfeld
'=====================================================
Private Sub Befehl2_Click()
'Bilddateien einlesen
Dim varDatei As Variant
With [Link]
.NewSearch
.LookIn = "c:\Eigene Dateien"
.FileName = "*.jpg"
Listing 365: Listenfeld mit Namen von Bilddateien fllen
Sandini Bib
444 Steuerelemente, Dialoge und Formulare
Mithilfe des Objekts FileSearch kann nach bestimmten Dateien in Verzeichnissen gesucht
werden. Dieses Objekt verfgt ber einige Eigenschaften, die angegeben werden knnen.
ber die Eigenschaft FileName geben Sie vor, nach welchen Dateien gesucht werden soll.
Dabei kann die Endung von Grafikdateien JPG mit einem Sternchen angegeben werden.
ber die Eigenschaft LookIn legen Sie fest, wo Access nach den Grafikdateien suchen soll.
Hier knnen Sie das Laufwerk sowie das Verzeichnis angeben. Sollen noch darunter lie-
gende Verzeichnisse durchsucht werden, dann kann dies ber die Eigenschaft SearchSub-
Folders festgelegt werden. Diese Eigenschaft wird auf den Wert True gesetzt, wenn die
angegebene Suche alle Unterordner im durch die LookIn-Eigenschaft angegebenen Ordner
einschlieen soll. Die Methode Execute fhrt die jetzt nher spezifizierte Suche anschlie-
end aus.
Nach der Suche sind alle gefundenen Dateien im Objekt FoundFiles verzeichnet. Diese gefun-
denen Dateien werden in einer anschlieenden Schleife nacheinander verarbeitet. Innerhalb
der Schleife werden die einzelnen Dateinamen ber die Methode AddItem ins Listenfeld ein-
gefgt.
.SearchSubFolders = True
If .Execute() > 0 Then
For Each varDatei In .FoundFiles
Me![Link] varDatei
Next varDatei
End If
End With
End Sub
Abbildung 223: Das Listenfeld wurde gefllt.
Listing 365: Listenfeld mit Namen von Bilddateien fllen (Forts.)
Sandini Bib
Listenfeldauswahl verarbeiten 445
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
302 Listenfeldauswahl verarbeiten
Im nchsten Schritt soll bei der Auswahl eines Listenfeldeintrags das entsprechende Bild im
Kleinformat in das Steuerelement BILD eingefgt werden. Die Auswahl eines Bilds erfolgt
ber das Ereignis Click des Listenfelds. Bevor Sie aber an die Programmierung des Ereignis-
ses gehen, bereiten Sie das Bildsteuerelement wie folgt fr diese Aufgabe vor:
1. Klicken Sie das Bildsteuerelement in der Entwurfsansicht mit der rechten Maustaste an
und whlen Sie den Befehl EIGENSCHAFTEN aus dem Kontextmen.
2. Wechseln Sie auf die Registerkarte FORMAT.
3. Stellen Sie bei der Eigenschaft GRSSENANPASSUNG den Eintrag DEHNEN ein.
4. Whlen Sie bei der Eigenschaft BILDAUSRICHTUNG den Eintrag MITTE ein.
5. Beenden Sie diese Festlegung und speichern Sie die nderungen.
Stellen Sie nun das Click-Ereignis des Listenfelds wie in Listing 366 gezeigt ein.
Mit der ListIndex-Eigenschaft knnen Sie herausfinden, welches Element in einem Listen-
feld oder Kombinationsfeld ausgewhlt ist. Diesen numerischen Wert bergeben Sie der
Variablen intZ.
Die ItemData-Eigenschaft gibt die Daten in der gebundenen Spalte fr die angegebene
Zeile in einem Kombinationsfeld oder Listenfeld zurck. Die Syntax dieser Eigenschaft
lautet:
[Link](Index)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Listenfeld
'=====================================================
Private Sub Liste0_Click()
'Ausgewhltes Bild bertragen
Dim intz As Integer
intz = Me![Link]
[Link] = Me
End Sub
Listing 366: Der aktuell ausgewhlte Eintrag im Listenfeld wird ausgewertet.
Sandini Bib
446 Steuerelemente, Dialoge und Formulare
bergeben Sie den kompletten Pfad des Bilds aus dem Listenfeld direkt dem Bildsteuerele-
ment, indem Sie der Eigenschaft Picture diese Information geben.
303 Listenfeldeintrge zhlen
Mit der ListCount-Eigenschaft knnen Sie feststellen, wie viele Zeilen ein Listenfeld oder der
Listenfeldteil eines Kombinationsfelds enthlt. Der erste Eintrag im Listenfeld fngt mit der 0
an.
304 Aktuellen Listenfeldeintrag lschen
Beim Lschen von Eintrgen aus einem Listenfeld knnen Sie selbstverstndlich auch ein-
zelne Eintrge lschen. Hier kommt es darauf an, ob Sie es zulassen, dass auch mehrere Ein-
trge im Listenfeld gelscht werden knnen. Im nchsten Makro aus Listing 367 werden
jeweils der markierte Listeneintrag aus dem Listenfeld sowie die Grafikdatei auf der Fest-
platte entfernt.
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der unter anderem ein Listen-
feld oder eine Kombinationsfeldliste zurckgibt.
Index
Erforderlich. Die Zeile im Kombinations- oder Listenfeld,
die die zurckzugebenden Daten enthlt. Zeilen in Kombi-
nations- und Listenfeldern sind, beginnend bei Null, indi-
ziert.
Tabelle 118: Die Argumente der Eigenschaft ItemData
Abbildung 224: Bild nach Klick im Kleinformat anzeigen
Sandini Bib
Alle markierten Listenfeldeintrge lschen 447
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Eigenschaft ListIndex knnen Sie herausfinden, welcher Eintrag in einem
Listenfeld gerade markiert ist. Der markierte Eintrag im Listenfeld gibt die genaue Position
im Listenfeld an. Diese Position bergeben Sie der Methode RemoveItem, die diesen Eintrag
dann aus dem Listenfeld entfernt. Die Syntax dieser Methode lautet:
[Link](Index)
ber die Anweisung Kill knnen Sie die dazugehrige Datei auf der Festplatte entfernen.
bergeben Sie hierfr den kompletten Pfad der Grafikdatei, den Sie direkt aus dem Listen-
feld auslesen knnen.
305 Alle markierten Listenfeldeintrge lschen
Um aus einem Listenfeld, bei dem lediglich jeweils ein Eintrag ausgewhlt werden kann, ein
Listenfeld mit Mehrfachauswahl zu machen, klicken Sie das Listenfeld in der Entwurfsan-
sicht mit der rechten Maustaste an, whlen den Befehl EIGENSCHAFTEN aus dem Kontext-
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Listenfeld
'=====================================================
Private Sub Befehl5_Click()
'Ausgewhlte Eintrge lschen
Dim intZ As Integer
On Error GoTo fehler
inz = Me![Link]
Kill Me
Me![Link] (intZ)
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 367: Markierten Eintrag im Listenfeld entfernen
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der unter anderem ein Listen-
feld oder eine Kombinationsfeldliste zurckgibt.
Index
Erforderlich. Das aus der Liste zu entfernende Element, das
als Elementnummer oder Listenelementtext angegeben ist.
Tabelle 119: Die Argumente der Methode RemoveItem
Sandini Bib
448 Steuerelemente, Dialoge und Formulare
men, wechseln zur Registerkarte ANDERE und aktivieren im Feld MEHRFACHAUSWAHL den
Eintrag EINZELN.
Bei der folgenden Lsung aus Listing 368 wurde eine weitere Schaltflche im Formular einge-
fgt und das Click-Ereignis eingestellt.
Da in diesem Fall mehrere Eintrge im Listenfeld markiert werden knnen, definieren Sie zu
Beginn des Makros eine Array-Variable VarI. In dieser Variablen werden alle markierten Zei-
len im Listenfeld gespeichert. Prfen Sie zunchst, ob berhaupt ein Eintrag im Listenfeld
markiert ist. Wenn ja, dann meldet die Eigenschaft ListCount einen Wert grer 0. In diesem
Fall legen Sie das Datenfeld so gro an, dass alle markierten Eintrge darin Platz finden.
Diese Gre knnen Sie direkt ber die Eigenschaft ItemsSelected abfragen. Im nchsten
Schritt fllen Sie das Datenfeld mit den markierten Positionen. Ist das komplette Datenfeld
varI gefllt, entfernen Sie ber eine Schleife, die am Ende des Listenfelds beginnt, die vorher
ermittelten Listenfeldeintrge ber die Methode RemoveItem.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Listenfeld
'=====================================================
Private Sub Befehl6_Click()
'Ausgewhlte Eintrge im Listenfeld lschen
Dim intZeile As Integer
Dim varI() As Integer
Dim intZ As Integer
With Me
If .[Link] = 0 Then
Exit Sub
Else
ReDim varI(.[Link])
For intZeile = 0 To .[Link] 1
If .[Link](intZeile) Then
varI(intZ) = intZeile
intZ = intZ + 1
End If
Next
For intZ = .[Link] - 1 To 0 Step 1
.[Link] varI(intZ)
Next
End If
End With
End Sub
Listing 368: Alle markierten Listenfeldeintrge entfernen
Sandini Bib
Alle Listenfeldeintrge (de)markieren 449
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
306 Alle Listenfeldeintrge (de)markieren
Mithilfe der ItemsSelected-Eigenschaft knnen Sie ermitteln, welche Eintrge bei einer
Mehrfachauswahl im Listenfeld markiert sind.
Im folgenden Beispiel aus Listing 369 werden alle markierten Eintrge im Listenfeld demar-
kiert.
ber die Eigenschaft ItemsSelected knnen Sie die markierten Eintrge im Listenfeld prfen.
In einer Schleife arbeiten Sie alle markierten Eintrge im Listenfeld ab und entfernen dabei
die Markierung, indem Sie die Eigenschaft Selected auf den Wert False setzen.
Wenn Sie sehr viele Eintrge in einem Listenfeld haben, dann knnen Sie auch die Funktion
aus Listing 370 zur Verfgung stellen, mit der man sehr schnell alle Listenfeldeintrge mar-
kieren kann.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Listenfeld
'=====================================================
Private Sub Befehl7_Click()
'Alle Eintrge demarkieren
Dim varI As Variant
Dim ctrl As Control
Set ctrl = Me!Liste0
For Each varI In [Link]
[Link](varI) = False
Next varI
End Sub
Listing 369: Markierung im Listenfeld entfernen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Listenfeld
'=====================================================
Private Sub Befehl8_Click()
'Alle Eintrge markieren
Dim ctrl As Control
Dim intz As Integer
For intz = 0 To [Link]
Listing 370: Alle Listenfeldeintrge markieren
Sandini Bib
450 Steuerelemente, Dialoge und Formulare
In einer Schleife arbeiten Sie alle Listenfeldeintrge nacheinander ab. Innerhalb der Schleife
setzen Sie die Eigenschaft Selected auf den Wert True, um den jeweiligen Listenfeldeintrag zu
markieren.
307 Mehrspaltiges Listenfeld fllen
Im folgenden Beispiel aus Listing 371 werden in ein mehrspaltiges Listenfeld eines Formulars
die in der Datenbank vorhandenen Tabellen sowie Abfragen eingelesen.
Me = True
Next intz
End Sub
Abbildung 225: Alle Listenfeldeintrge blitzschnell markieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_ListenfeldMehrspaltig
'=====================================================
Private Sub Befehl2_Click()
Listing 371: Ein mehrspaltiges Listenfeld fllen
Listing 370: Alle Listenfeldeintrge markieren (Forts.)
Sandini Bib
Auf einzelne Spalten zugreifen 451
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Um ein mehrspaltiges Listenfeld zu fllen, knnen Sie die einzelnen Informationen getrennt
durch ein Semikolon an die Methode AddItem bergeben. Dabei liefert die Eigenschaft Type
die Information, ob es sich um eine Tabelle (= TABLE) oder um eine Abfrage (= VIEW) handelt.
308 Auf einzelne Spalten zugreifen
Wenn Sie das vorherige Beispiel noch um zwei Textfelder erweitern, dann knnen Sie das
Beispiel ausbauen. Wenn ein Eintrag im Listenfeld angeklickt wird, dann sollen die einzelnen
Spalteninhalte des Listenfelds in die dafr vorgesehenen Textfelder bertragen werden.
Um diese Aufgabe zu lsen, erfassen Sie das Click-Ereignis in Listing 372 fr das Listenfeld.
'Tabellen und Abfragen in mehrspaltiges Listenfeld einlesen
Dim Katalog As [Link]
Dim TabInfo As [Link]
Set Katalog = New [Link]
[Link] = [Link]
For Each TabInfo In [Link]
With TabInfo
Me![Link] .Name & ";" & .Type
End With
Next
Set Katalog = Nothing
End Sub
Abbildung 226: Das mehrspaltige Listenfeld wurde gefllt.
Listing 371: Ein mehrspaltiges Listenfeld fllen (Forts.)
Sandini Bib
452 Steuerelemente, Dialoge und Formulare
Sie knnen mit der Eigenschaft Column auf eine bestimmte Zeile oder eine Kombination aus
Spalten und Zeilen in einem mehrspaltigen Kombinationsfeld oder einem Listenfeld verwei-
sen. Die Syntax dieser Eigenschaft lautet:
[Link](Index, Row)
ber die Eigenschaft ListIndex haben Sie Zugriff auf den aktuell ausgewhlten Eintrag im
Listenfeld.
309 Kombinationsfeld fllen Variante 1
In der folgenden Aufgabe wird ein Formular (KOMBINATIONSFELD) mit einem Kombina-
tionsfeld aufgerufen. Im Kombinationsfeld befinden sich die Monate Januar bis Dezember.
In einem Textfeld sollen nun jeweils der erste Tag sowie der letzte Tag des Monats angezeigt
werden. Sehen Sie sich dazu die Ausgangssituation in Abbildung 228 an.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_ListenfeldMehrspaltig
'=====================================================
Private Sub Liste0_Click()
'Spalteninhalte in Textfelder bertragen
With Me
.[Link] = .[Link](0, .[Link])
.[Link] = .[Link](1, .[Link])
End With
End Sub
Listing 372: ber die Eigenschaft Column einzelne Spalten auslesen
Argument Beschreibung
Ausdruck
Erforderlich. Ein Ausdruck, der unter anderem ein Listen-
feld oder eine Kombinationsfeldliste zurckgibt.
Index
Erforderlicher Wert vom Typ Long. Ein Wert vom Typ Long
Integer zwischen 0 und der Einstellung der ColumnCount-
Eigenschaft minus 1.
Row
Optionaler Wert vom Typ Variant. Ein ganzzahliger Wert
zwischen 0 und der Einstellung der ListCount-Eigenschaft
minus 1.
Tabelle 120: Die Argumente der Methode RemoveItem
Sandini Bib
Kombinationsfeld fllen Variante 1 453
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Fr das Fllen des Kombinationsfelds knnen Sie das Ereignis Form_Load aus Listing 373 nt-
zen, das automatisch beim ffnen des Formulars ausgefhrt wird der ideale Zeitpunkt, um
die einzelnen Monate ins Kombinationsfeld zu bringen.
Abbildung 227: Die Spalteninhalte wurden in die Textboxen bertragen.
Abbildung 228: Die Monate mssen noch eingelesen werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kombinationsfeld
'=====================================================
Private Sub Form_Load()
With Me.Kombinationsfeld0
.AddItem "Januar"
.AddItem "Februar"
.AddItem "Mrz"
.AddItem "April"
Listing 373: Ein Kombinationsfeld fllen Variante 1
Sandini Bib
454 Steuerelemente, Dialoge und Formulare
ber die Methode AddItem fllen Sie die einzelnen Monate direkt in das Kombinationsfeld.
ber die Eigenschaft ListRows knnen Sie festlegen, wie viele Eintrge im Kombinationsfeld
standardmig angezeigt werden sollen. Die restlichen Eintrge knnen dann mit der verti-
kalen Leiste erreicht werden. Um den aktuellen Monat im Kombinationsfeld einzustellen,
knnen Sie ber die Funktion Month den aktuellen Monat (112) abfragen, indem Sie das
aktuelle Datum ber die Funktion Date dafr heranziehen. Da im Kombinationsfeld aber
keine Zahlen zwischen 1 und 12, sondern eben der Monatsname in ausgeschriebener Form
stehen soll, also Januar bis Dezember, bergeben Sie diese Monatsnummer an die Funk-
tion Monthname, die daraus den ausgeschriebenen Monatsnamen macht.
Im zweiten Schritt fllen Sie das Textfeld, welches den ersten und letzten Tag im Monat aus-
gibt. Erfassen Sie dazu die Funktion aus Listing 374, die den letzten Tag eines Monats ermit-
telt, sowie das Ereignis Change, das automatisch ausgefhrt wird, wenn Sie einen Eintrag im
Kombinationsfeld auswhlen.
.AddItem "Mai"
.AddItem "Juni"
.AddItem "Juli"
.AddItem "August"
.AddItem "September"
.AddItem "Oktober"
.AddItem "November"
.AddItem "Dezember"
.ListRows = 6
.Value = MonthName(Month(Date))
End With
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kombinationsfeld
'=====================================================
'***In Standardmodul erfassen
Public Function LetzterTagImMonat(Edatum As Date) As Date
LetzterTagImMonat = DateSerial(Year(Edatum), Month(Edatum) + 1, 0)
End Function
'***Direkt hinter dem Formular erfassen
Private Sub Kombinationsfeld0_Change()
Dim strText As String
Dim Edatum As Date
Dim strMonat As String
Listing 374: Den letzten Tag im Monat ermitteln
Listing 373: Ein Kombinationsfeld fllen Variante 1 (Forts.)
Sandini Bib
Kombinationsfeld fllen Variante 1 455
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Funktion LetzterTagImMonat erwartet als bergabe einen Datumswert und liefert auch
wieder einen Datumswert zurck. Das Datum bekommen Sie aus der markierten Zeile des
Kombinationsfelds. Dieser Eintrag muss aber noch in ein gltiges Datumsformat umgewan-
delt werden. Dafr sorgt die Funktion CDate. Reagieren Sie nun auf eine Vernderung im
Kombinationsfeld, indem Sie das Ereignis Change ntzen.
Im folgenden Beispiel aus Listing 375 wird ein Kombinationsfeld im Formular
Kombinationsfeld2 mit den einzelnen Tagen des aktuellen Monats gefllt. Auch diese Fllung
wird bereits beim ffnen des Formulars durchgefhrt.
Dim strJahr As String
strMonat = [Link]
strJahr = Year(Date)
Edatum = CDate(strMonat & " " & strJahr)
Edatum = LetzterTagImMonat(Edatum)
[Link] = "vom 01. " & strMonat & " " & _
strJahr & " bis zum " & Format(Edatum, "[Link] YYYY")
End Sub
Abbildung 229: Der letzte Tag im Monat wurde ermittelt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kombinationsfeld2
'=====================================================
Private Sub Form_Load()
Dim intTage As Integer
For intTage = 1 To Day(LetzterTagImMonat(Date))
With Me.Kombinationsfeld0
Listing 375: Die einzelnen Tage des aktuellen Monats im Kombinationsfeld anbieten
Listing 374: Den letzten Tag im Monat ermitteln (Forts.)
Sandini Bib
456 Steuerelemente, Dialoge und Formulare
ber eine Schleife lesen Sie die einzelnen Tage des aktuellen Monats in das Kombinationsfeld
ber die Methode AddItem ein. Dabei knnen Sie auch fr diese Aufgabe die Funktion
LetzterTagImMonat ntzen, die Sie bereits im Makro aus Listing 374 angesprochen haben. Set-
zen Sie das Datum aus den Einzelteilen (Tages-, Monats- und Jahresanteil) zusammen und
wandeln Sie diesen Text in ein gltiges Datum um, indem Sie die Funktion CDate einsetzen.
310 Kombinationsfeld fllen Variante 2
Das folgende Beispiel aus Listing 376 zeigt eine weitere Variante, ein Kombinationsfeld zu
fllen. Dazu wurde ein neues Formular mit dem Namen Kombinationsfeld3 erstellt und
danach ein Kombinationsfeld sowie eine Schaltflche integriert. ber einen Klick auf die
Schaltflche wird das Kombinationsfeld mit Werten gefllt.
.AddItem CDate((intTage) & " " & Month(Date) & " " & Year(Date))
End With
Next intTage
End Sub
Abbildung 230: Die Tage des aktuellen Monats wurden eingefgt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kombinationsfeld3
'=====================================================
Private Sub Befehl2_Click()
Dim Combo As ComboBox
Set Combo = Me!Kombinationsfeld0
[Link] = "Value List"
[Link] = "Sehr gut;Gut;Befriedigend;Ausreichend;" _
Listing 376: Ein Kombinationsfeld fllen Variante 2
Listing 375: Die einzelnen Tage des aktuellen Monats im Kombinationsfeld anbieten (Forts.)
Sandini Bib
Editieren zulassen 457
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Setzen Sie die Eigenschaft RowSourceTyp ein, um dem Kombinationsfeld die Datenquelle mit-
zuteilen. Da es sich bei diesem Beispiel um ein ungebundenes Steuerelement handelt, geben
Sie den String Value List ein. Damit wird festgelegt, dass Sie Eintrge aus einer Liste dem
Kombinationsfeld hinzufgen. Mithilfe der Eigenschaft RowSource geben Sie konkret an, was
in das Kombinationsfeld eingefgt werden soll. Die einzelnen Eintrge geben Sie nacheinan-
der durch Semikola getrennt ein.
311 Editieren zulassen
Standardmig ist es bei Kombinationsfeldern so, dass Sie die Eintrge definieren, die aus-
gewhlt werden knnen. Von Fall zu Fall mag es aber auch einmal sinnvoll sein, dem
Kombinationsfeld zustzliche Eintrge hinzuzufgen, die bisher noch nicht eingestellt sind.
Im nachfolgenden Beispiel aus Listing 377 wurden ein neues Formular mit dem Namen
Kombinationsfeld4 sowie ein Kombinationsfeld und ein Textfeld eingefgt.
& "Mangelhaft;Ungengend"
End Sub
Abbildung 231: Die Alternative, ein Kombinationsfeld zu fllen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kombinationsfeld4
'=====================================================
Private Sub Form_Load()
Dim Combo As ComboBox
Listing 377: Das Listenfeld wird beim ffnen des Formulars gefllt.
Listing 376: Ein Kombinationsfeld fllen Variante 2 (Forts.)
Sandini Bib
458 Steuerelemente, Dialoge und Formulare
Das Ereignis Form_Open tritt automatisch beim ffnen des Formulars ein. Ein idealer Zeit-
punkt also, das Kombinationsfeld mit den Eintrgen ber die Eigenschaft RowSource zu fl-
len. Dabei stellen Sie zustzlich bei der Eigenschaft RowSourceTyp den Text Value List ein.
ber die Eigenschaft LimitToList legen Sie standardmig fest, dass keine zustzlichen Ein-
trge im Kombinationsfeld vorgenommen werden drfen.
ber das Ereignis NotInList aus Listing 378 knnen Sie die gerade vorgenommene Ein-
schrnkung aber ein wenig aufweichen. Dabei haben Sie die Mglichkeit, die Standardfehler-
meldung von Access durch eine Rckfrage zu ersetzen.
Speichern Sie zunchst den gerade neu erfassten Eintrag in der Variablen ctl. Danach setzen
Sie die Methode MsgBox ein, um eine Rckfrage einzuholen. Besttigt der Anwender die Neu-
eingabe, dann setzen Sie das Argument Response des Ereignisses auf den Wert acDataErrAdded.
Damit wird die Neuanlage des Eintrags im Kombinationsfeld zugelassen. Danach werden
ber die Eigenschaft RowSource die bisherigen Eintrge um den neuen Eintrag erweitert. Die-
ser steht automatisch im Argument NewData des Ereignisses NotInList bereit und kann so
direkt bergeben werden.
Set Combo = Me!Kombinationsfeld5
With Combo
.RowSourceType = "Value List"
.RowSource = "Spanien;Italien;Griechenland;Deutschland"
.LimitToList = True
End With
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kombinationsfeld4
'=====================================================
Private Sub Kombinationsfeld5_NotInList(NewData As String, Response As Integer)
Dim ctl As Control
Set ctl = Me!Kombinationsfeld5
If MsgBox("Dieses Land gibt es bis jetzt noch nicht, Hinzufgen?", _
vbOKCancel) = vbOK Then
Response = acDataErrAdded
[Link] = [Link] & ";" & NewData
Else
Response = acDataErrContinue
[Link]
End If
End Sub
Listing 378: Auf die Eingabe neuer Eintrge im Kombinationsfeld reagieren
Listing 377: Das Listenfeld wird beim ffnen des Formulars gefllt. (Forts.)
Sandini Bib
Editieren zulassen 459
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Widerruft der Anwender seine Eingabe im Kombinationsfeld, dann weisen Sie dem Argu-
ment Response die Konstante acDataErrContinue zu. Dies bewirkt, dass Access die Eingabe
widerruft und weiterhin nur Eintrge zulsst, die bereits im Kombinationsfeld stehen.
Abbildung 232: Neuen Eintrag zulassen oder verwerfen?
Abbildung 233: Der neue Eintrag lsst sich jetzt auch auswhlen.
Sandini Bib
460 Steuerelemente, Dialoge und Formulare
Damit der ausgewhlte Eintrag in das darunter liegende Textfeld bertragen wird, setzen Sie
das Ereignis AfterUpdate aus Listing 379 ein.
312 Kontrollkstchen
Setzen Sie Kontrollkstchen in Formularen ein, um mehrere Optionen zuzulassen. Ein Kon-
trollkstchen kann entweder aktiviert oder nicht aktiviert sein. Bei aktiviertem Zustand
erscheint im Kstchen ein Hkchen. Wenn Sie Kontrollkstchen in einer Gruppe verwenden,
knnen sowohl eines als auch mehrere Kontrollkstchen aktiviert sein.
Wenn Sie die Kontrollkstchen in einer Optionsgruppe positionieren, dann kann jeweils nur
ein Kontrollkstchen aktiviert werden. Stehen diese auerhalb einer Optionsgruppe, dann
knnen standardmig alle Kontrollkstchen aktiviert werden. Mchten Sie trotzdem nicht
auf die optischen Vorteile einer Optionsgruppe verzichten, ziehen Sie ber die Toolbox ein
Rechteck auf und fgen die Kontrollkstchen danach ein. Jetzt knnen Sie alle Kontrollkst-
chen aktivieren und trotzdem kommt die Optik nicht zu kurz.
313 Kontrollkstchen auswerten
Im folgenden Makro aus Listing 380 wurde ein Formular mit drei Kontrollkstchen und
einer Schaltflche eingefgt. Damit haben Sie die Mglichkeit, bis zu drei Standardabfragen
hintereinander zu starten.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kombinationsfeld4
'=====================================================
Private Sub Kombinationsfeld5_AfterUpdate()
[Link] = [Link]
End Sub
Listing 379: Kombinationsfeld und Textfeld verknpfen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kontrollkstchen
'=====================================================
Private Sub Befehl8_Click()
Const Abfr01 = "Alphabetische Artikelliste"
Const Abfr02 = "Artikel nach Kategorie"
Const Abfr03 = "Die zehn teuersten Artikel"
Listing 380: Standardabfragen per Klick starten
Sandini Bib
Kontrollkstchen auswerten 461
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Definieren Sie zu Beginn des Makros die Namen der Abfragen, die Sie starten mchten.
Selbstverstndlich htten Sie auch den Text bei den Kontrollkstchen dazu benutzen kn-
nen, um die einzelnen Abfragen danach zu starten. In diesem Fall mssten die Beschrif-
tungen aber mit den Namen der Abfragen bereinstimmen. Mithilfe von Konstanten
haben Sie aber die Mglichkeit, die Beschriftungsfelder bei den Kontrollkstchen flexibel
zu halten.
Wenn Sie nicht sicher sind, welche Namen Ihre Kontrollkstchen beim Einfgen ins Formu-
lar bekommen haben, bzw. wenn Sie andere Namen vergeben mchten, wechseln Sie in die
Entwurfsansicht Ihres Formulars, klicken das betreffende Kontrollkstchen an und sehen auf
der Registerkarte ANDERE im Feld NAME nach. Dort knnen Sie einen neuen Namen zuwei-
sen und mit der Taste () besttigen.
Weisen die Kontrollkstchen den Wert 1 auf, so sind sie aktiviert. Starten Sie danach die ent-
sprechende Abfrage mithilfe der Methode OpenQuery.
If Me![Link] = -1 Then [Link] Abfr01, acViewNormal
If Me![Link] = -1 Then [Link] Abfr02, acViewNormal
If Me![Link] = -1 Then [Link] Abfr03, acViewNormal
End Sub
Abbildung 234: Kontrollkstchen auswerten
Listing 380: Standardabfragen per Klick starten (Forts.)
Sandini Bib
462 Steuerelemente, Dialoge und Formulare
314 Kontrollkstchen initialisieren
Wenn Sie das Formular Kontrollkstchen mit einem Doppelklick starten, dann sind die Kon-
trollkstchen alle zu Beginn mit einem grauen Farbton ausgefllt, d.h., sie wurden nicht
initialisiert. Dies knnen Sie jetzt nachholen, indem Sie das Ereignis Form_Load wie in Listing
381 einstellen.
Indem Sie die Eigenschaft Value auf den Wert 0 setzen, werden die Kontrollkstchen initiali-
siert.
315 Optionsfelder
Die Optionsschaltflchen in Access haben dieselben Eigenschaften wie die Kontrollkstchen.
Als eine Eigenart von Access im Vergleich zu den anderen Office-Programmen knnen Sie
Optionsschaltflchen dazu einsetzen, gleich mehrere Optionen auf einmal zu aktivieren.
Mchten Sie hingegen die ursprngliche Funktion einstellen, dass Sie jeweils nur eine
Option auswhlen knnen, mssen Sie die einzelnen Optionsschaltflchen in eine Options-
gruppe einfgen.
Im folgenden Beispiel soll eine dynamische Dateisuche programmiert werden. Dazu legen
Sie ein neues Formular mit einem Gruppenfeld und vier Optionsfeldern sowie einer Schalt-
flche an. Orientieren Sie sich dabei an Abbildung 235.
Legen Sie nun das Makro aus Listing 382 hinter die SUCHEN-Schaltflche.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kontrollkstchen
'=====================================================
Private Sub Form_Load()
Dim frm As Form
Dim ctrl As Object
For Each ctrl In [Link]
If [Link] = acCheckBox Then [Link] = 0
Next ctrl
End Sub
Listing 381: Kontrollkstchen initialisieren
Sandini Bib
Optionsfelder 463
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 235: Die Optionsfelder werden in einem Gruppenfeld erstellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Optionsfelder
'=====================================================
Private Sub Befehl13_Click()
'Office-Dateien suchen
Dim varDatei As Variant
Dim intZ As Integer
For intZ = Me![Link] - 1 To 0 Step 1
Me![Link] (intZ)
Next intZ
With [Link]
.NewSearch
.LookIn = "c:\Eigene Dateien\"
Select Case Me.Rahmen0
Case 1
.FileType = msoFileTypeDatabases
Case 2
.FileType = msoFileTypeExcelWorkbooks
Case 3
.FileType = msoFileTypeWordDocuments
Listing 382: Office-Dateien optional suchen
Sandini Bib
464 Steuerelemente, Dialoge und Formulare
Im ersten Schritt entfernen Sie zunchst alle eventuell schon angezeigten Eintrge im Listen-
feld. Dies bietet den Vorteil, dass Sie die Suche mehrfach ausfhren knnen und dabei jeweils
zu Beginn ein geleertes Listenfeld vorliegen haben.
Mithilfe des Objekts FileSearch kann nach bestimmten Office-Dateien in Verzeichnissen
gesucht werden. ber die Eigenschaft FileType knnen Sie den zu suchenden Dateityp nher
bestimmen. Im Anhang finden Sie eine komplette Auflistung dieser Konstanten.
ber die Eigenschaft LookIn kann festgelegt werden, wo Access nach den Dateien suchen soll.
Hier knnen Sie das Laufwerk sowie das Verzeichnis angeben. Sollen noch darunter liegende
Verzeichnisse durchsucht werden, dann kann dies ber die Eigenschaft SearchSubFolders
festgelegt werden. Diese Eigenschaft wird auf den Wert True gesetzt, wenn die angegebene
Suche alle Unterordner im durch die LookIn-Eigenschaft angegebenen Ordner einschlieen
soll. Die Methode Execute fhrt die jetzt nher spezifizierte Suche anschlieend aus.
Nach der Suche sind alle gefundenen Dateien im Objekt FoundFiles verzeichnet. Diese gefun-
denen Dateien werden in einem Textfeld ausgeben.
316 Schaltflchen
Um die Programmierung Ihrer Schaltflchen brauchen Sie sich in Access keine Sorgen zu
machen. Der Befehlsschaltflchen-Assistent hat eine Menge an fertigen Codes, die Sie fr
Ihre Formulare einsetzen knnen.
Um beispielsweise ein Makro fr die Speicherung von Daten ber ein Formular in eine
Tabelle zu erstellen, verfahren Sie wie folgt:
1. ffnen Sie das Formular ARTIKEL der Datenbank [Link] in der Entwurfsansicht.
2. Klicken Sie in der Toolbox auf das Symbol BEFEHLSSCHALTFLCHE und ziehen Sie es auf
Ihrem Formular auf.
3. Markieren Sie unter KATEGORIEN den Eintrag DATENSATZOPERATIONEN.
Case 4
.FileType = msoFileTypePowerPointPresentations
Case Else
.FileType = msoFileTypeAllFiles
End Select
.SearchSubFolders = True
If .Execute() > 0 Then
For Each varDatei In .FoundFiles
Me![Link] varDatei
Next varDatei
End If
[Link] = .[Link] & " Dateien gefunden!"
End With
End Sub
Listing 382: Office-Dateien optional suchen (Forts.)
Sandini Bib
Schaltflchen 465
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
4. Whlen Sie im Feld AKTIONEN den Eintrag DATENSATZ SPEICHERN.
5. Klicken Sie auf die Schaltflche WEITER.
6. Entscheiden Sie sich fr das Layout der Schaltflche, indem Sie entweder nur Text anzei-
gen oder ein Symbol auf der Schaltflche anzeigen lassen.
7. Klicken Sie auf WEITER.
8. Weisen Sie im nchsten Dialogfeld der Schaltflche einen Namen zu und klicken Sie auf
FERTIG STELLEN, um die Aufzeichnung des Makros zu beenden.
Abbildung 236: Es wurden nur Access-Datenbanken gesucht.
Abbildung 237: Schaltflche einfgen
Sandini Bib
466 Steuerelemente, Dialoge und Formulare
Die Schaltflche wurde nun in Ihr Formular eingefgt. Klicken Sie mit der rechten Maustaste
auf die neu eingefgte Schaltflche und whlen Sie aus dem Kontextmen den Befehl EREIG-
NIS. Sie gelangen daraufhin automatisch in die Entwicklungsumgebung von Access und
haben dann folgendes Makro aus Listing 383 vor Augen.
Dabei wird die Methode DoMenuItem eingesetzt. Diese Methode fhrt den angegebenen
Menbefehl aus. Diese Methode hat folgende Syntax:
DoMenuItem(Menleiste, Menname, Befehl, Unterbefehl, Version)
Abbildung 238: Symbol auswhlen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Befehl43_Click()
On Error GoTo Err_Befehl43_Click
[Link] acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_Befehl43_Click:
Exit Sub
Err_Befehl43_Click:
MsgBox [Link]
Resume Exit_Befehl43_Click
End Sub
Listing 383: Datensatz speichern ber DoMenuItem
Sandini Bib
Schaltflchen 467
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Dem Argument Menleiste weisen Sie die Konstante acFormBar zu. Damit sprechen Sie die
komplette Menleiste von Access an, die automatisch dann eingeblendet wird, wenn Sie ein
Formular aufrufen.
Im Argument Menname geben Sie an, um welches Men in der Menleiste es sich handeln
soll. Dazu gibt Ihnen Access drei Konstanten vor:
acFile: das Men DATEI.
acEditMenu: das Men BEARBEITEN.
AcRecordsMenu: das Men DATENSTZE.
Im Argument Befehl geben Sie den Befehl ein, der im Argument Menname zu finden ist und
den Sie ausfhren mchten.
Das Argument Unterbefehl wird nur dann verwendet, wenn Sie den Befehl OBJEKT aus dem
Men EINFGEN einsetzen. Die dafr zur Verfgung stehenden Konstanten lauten acObject-
Verb und acObjectUpdate.
Das Argument Version mssen Sie nur einsetzen, wenn Sie eine ltere Access-Version im Ein-
satz haben. Setzen Sie die Konstante acMenuVer70 fr Code ein, der fr Microsoft Access 95-
Datenbanken geschrieben wurde, die eingebaute Konstante acMenuVer20 kommt dann zur
Anwendung, wenn Code fr Access-Datenbanken der Version 2.0 eingegeben wurde.
Die Methode DoMenuItem wird zwar verwendet, wenn Sie den Schaltflchen-Assistenten ver-
wenden, um Schaltflchencode zu generieren. Diese Vorgehensweise knnen Sie jedoch auch
beibehalten, um den Coderahmen in der Entwicklungsumgebung automatisch erzeugen zu
Befehl Men Befehl
acNew
EINFGEN NEUER DATENSATZ
acSaveForm
DATEI SPEICHERN
acSaveFormAs
DATEI SPEICHERN UNTER
acSaveRecord
DATENSTZE DATENSATZ SPEICHERN
acUndo
BEARBEITEN RCKGNGIG
acCut
BEARBEITEN AUSSCHNEIDEN
acCopy
BEARBEITEN KOPIEREN
acPaste
BEARBEITEN EINFGEN
acDelete
BEARBEITEN DATENSATZ LSCHEN
acSelectRecord
BEARBEITEN DATENSATZ AUSWHLEN
acSelectAllRecords
BEARBEITEN ALLE DATENSTZE AUSWHLEN
acObject
EINFGEN OBJEKT
acRefresh
DATENSTZE AKTUALISIEREN
Tabelle 121: Die Befehlskonstanten der Methode DoMenuItem
Sandini Bib
468 Steuerelemente, Dialoge und Formulare
lassen. Danach knnen Sie die Methode DoMenuItem aber durch die aktuellere und schnellere
Methode RunCommand austauschen. Das sieht dann wie folgt aus:
Die Methode RunCommand hat nur noch ein Argument, welches Sie komplett in der Online-
Hilfe zu Access-VBA bzw. die wichtigsten im Anhang nachlesen knnen. Fr das Speichern
eines Datensatzes ist das in diesem Beispiel die Konstante acCmdSaveRecord.
317 Eine blinkende Schaltflche erstellen
Mchten Sie auf einem Formular eine blinkende Schaltflche unterbringen, fgen Sie diese
Schaltflche zuerst in Ihr Formular Personal ein und befolgen danach die nchsten Arbeits-
schritte:
1. Wechseln Sie in die Entwurfsansicht des Formulars.
2. Rufen Sie das Eigenschaftenfenster des Formulars auf.
3. Stellen Sie im Kombinationsfeld den Eintrag FORMULAR ein.
4. Tragen Sie im Feld ZEITGEBERINTERVALL den Wert 250 ein. Die Einheit ist hier Milli-
sekunden, d.h., die Schaltflche wrde somit viermal in der Sekunde blinken.
5. Erstellen Sie jetzt das folgende Ereignis aus Listing 385.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Befehl43_Click()
On Error GoTo Err_Befehl43_Click
[Link] (acCmdSaveRecord)
Exit_Befehl43_Click:
Exit Sub
Err_Befehl43_Click:
MsgBox [Link]
Resume Exit_Befehl43_Click
End Sub
Listing 384: Datensatz speichern ber RunCommand
Sandini Bib
Eine blinkende Schaltflche erstellen 469
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Da Sie vorher das Intervall eingestellt haben, sorgen Sie im Ereignismakro lediglich dafr,
dass Sie die Schaltflche im Wechsel ein- und ausblenden. Fgen Sie nach dem Ausblenden
der Schaltflche die Anweisung Exit Sub aus, so dass die Schaltflche nicht direkt danach
wieder eingeblendet wird. Die Schaltflche wird erst dann wieder eingeblendet, wenn das
Ereignis das nchste Mal wieder ausgefhrt wird, also genau nach 250 Millisekunden.
Abbildung 239: Das Zeitgeberintervall einstellen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Personal
'=====================================================
Private Sub Form_Timer()
If Me![Link] = True Then
Me![Link] = False
Exit Sub
End If
If Me![Link] = False Then
Me![Link] = True
End If
End Sub
Listing 385: Eine blinkende Schaltflche erstellen
Sandini Bib
470 Steuerelemente, Dialoge und Formulare
318 Kalendersteuerelement
Standardmig ist das Kalendersteuerelement nicht direkt in der Toolbox aufgefhrt. Sie
knnen dieses Steuerelement aber trotzdem hinzufgen. Legen Sie dazu ein neues Formular
an und klicken Sie in der Toolbox auf das Symbol WEITERE STEUERELEMENTE. Daraufhin
klappt ein Men auf, in dem Sie das Steuerelement KALENDERSTEUERELEMENT 10.0 fr Access
2002 bzw. das Steuerelement KALENDERSTEUERELEMENT 11.0 fr Access 2003 auswhlen kn-
nen. Ziehen Sie dieses Element auf dem Formular KALENDER in der gewnschten Gre auf.
Diesen Kalender knnen Sie brigens ganz individuell einstellen. Dabei knnen Sie die Dar-
stellung sowie die verwendeten Farben und die Schriftart nach Ihren Wnschen anpassen.
Klicken Sie dazu in der Entwurfsansicht des Formulars mit der rechten Maustaste auf das
Kalendersteuerelement und whlen Sie den Befehl KALENDER-OBJEKT/EIGENSCHAFTEN.
In der Tabelle 122 werden die wichtigsten Eigenschaften und Methoden des Kalendersteuer-
elements noch einmal zusammengefasst.
Abbildung 240: Der eingefgte Kalender
Eigenschaft (E)/
Methode (M)
Beschreibung
Value (E) Gibt den Wert aus, der momentan im Steuerelement aktiviert ist,
also beispielsweise ein einzelner Tag.
Tabelle 122: Die wichtigsten Methoden und Eigenschaften fr den Kalender
Sandini Bib
Kalendersteuerelement 471
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Day (E) Der aktuelle Monatstag im Kalendersteuerelement kann eingestellt
oder abgefragt werden.
Month (E) ber diese Eigenschaft knnen Sie angeben, welcher Monat im
Kalendersteuerelement angezeigt werden soll.
Year (E) Mit dieser Eigenschaft knnen Sie bestimmen, welches Jahr im
Kalendersteuerelement angezeigt wird. Dabei knnen Jahreszahlen
zwischen 1900 und 2100 angegeben werden.
ShowDateSelectors (E) Mit dieser Eigenschaft legen Sie fest, ob die Drop-down-Listenfelder
fr Monat und Jahr im Kalendersteuerelement angezeigt werden.
DayLength (E) Mit dieser Eigenschaft bestimmen Sie, in welchem Format (kurz,
mittel oder lang) die Wochentage im Kalendersteuerelement ange-
zeigt werden. Die kurze Ausgabeform M, D, M wird erreicht, indem
diese Eigenschaft auf den Wert 0 gesetzt wird. Setzen Sie diese Eigen-
schaft auf den Wert 1, wenn die Tagesnamen Mo, Di, Mi angezeigt
werden sollen. Die Langform Montag, Dienstag, Mittwoch wird
erreicht, indem man der Eigenschaft den Wert 2 zuweist.
MonthLength (E) Mit dieser Eigenschaft knnen Sie bestimmen, ob die Monate im
Monat/Jahr-Titel im Kalendersteuerelement im kurzen oder langen
Format angezeigt werden. Wenn Sie diese Eigenschaft auf den Wert 0
setzen, dann werden die Monate in Kurzschreibweise Jan, Feb, Mr
angezeigt. Wird diese Eigenschaft auf den Wert 2 gesetzt, erfolgt die
Formatierung der Monate im Langformat Januar, Februar.
FirstDay (E) Mit dieser Eigenschaft knnen Sie bestimmen, welcher Wochentag
in der ersten Spalte des Kalendersteuerelements angezeigt wird.
Dabei beginnt der Sonntag mit der Ziffer 1 und der Samstag endet
mit der 6. Um also den Montag als ersten Tag der Woche im Kalen-
der anzuzeigen, setzen Sie diese Eigenschaft auf den Wert 2.
NextDay (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um einen Tag erhhen und das Kalendersteuerelement
aktualisieren.
NextWeek (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um eine Woche erhhen und das Kalendersteuerelement
aktualisieren.
NextMonth (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um einen Monat erhhen und das Kalendersteuerelement
aktualisieren.
NextYear (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um ein Jahr erhhen und das Kalendersteuerelement aktuali-
sieren.
Eigenschaft (E)/
Methode (M)
Beschreibung
Tabelle 122: Die wichtigsten Methoden und Eigenschaften fr den Kalender (Forts.)
Sandini Bib
472 Steuerelemente, Dialoge und Formulare
Um ein Textfeld mit dem Kalender zu verknpfen, stellen Sie das Click-Ereignis des Kalen-
ders ein. Immer wenn ein Datum im Kalender ausgewhlt wird, soll das ausgewhlte Datum
im Textfeld angezeigt werden. Sehen Sie sich dazu das Listing 386 an.
Im folgenden Beispiel aus Listing 387 wird ein neues Formular (Kalender2) angelegt und ein
zustzliches Listenfeld integriert. Per Doppelklick auf einzelne Tage soll dabei das angeklickte
Datum in das Listenfeld eingefgt werden. Dabei sollen keine doppelten Tage ins Listenfeld
bertragen werden.
PreviousDay (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um einen Tag vermindern und das Kalendersteuerelement
aktualisieren.
PreviousWeek (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um eine Woche vermindern und das Kalendersteuerelement
aktualisieren.
PreviousMonth (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um einen Monat vermindern und das Kalendersteuerelement
aktualisieren.
PreviousYear (M) Mit dieser Methode knnen Sie den Wert eines Kalendersteuerele-
ments um ein Jahr vermindern und das Kalendersteuerelement
aktualisieren.
Today (M) Mit dieser Methode knnen Sie den Wert des Kalendersteuerele-
ments auf das heutige Datum einstellen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kalender
'=====================================================
Private Sub Calendar0_Click()
'Datum aus Kalender ins Textfeld bertragen
With Me
.[Link] = .[Link]
End With
End Sub
Listing 386: Datum per Klick bernehmen
Eigenschaft (E)/
Methode (M)
Beschreibung
Tabelle 122: Die wichtigsten Methoden und Eigenschaften fr den Kalender (Forts.)
Sandini Bib
Kalendersteuerelement 473
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Bevor Sie die einzelnen Tage ins Listenfeld bertragen, fhren Sie eine Prfung durch, ob das
Datum bereits im Listenfeld vorhanden ist. Wenn ja, dann setzen Sie den Schalter b auf den Wert
True. Beim Vergleich der beiden Datumsangaben mssen Sie darauf achten, dass Sie die Datums-
angabe des Kalenders in einen String ber die Funktion Str umwandeln. Damit vergleichen Sie
dann den Datums-String aus dem Listenfeld mit einem Datums-String aus dem Kalender.
Abbildung 241: Das ausgewhlte Datum wird ins Textfeld bernommen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Kalender2
'=====================================================
Private Sub Calendar0_DblClick()
'Tage ins Listenfeld bertragen (inkl. Prfung)
Dim b As Boolean
b = False
With Me
For intZ = 0 To .[Link] 1
If .[Link](intZ) = Str(.[Link]) Then
b = True
End If
Next intZ
If b = False Then .[Link] .[Link]
b = False
End With
End Sub
Listing 387: Tage nach erfolgtem Dubletten-Check ins Listenfeld bertragen
Sandini Bib
474 Steuerelemente, Dialoge und Formulare
319 Der Fortschrittsbalken
Werden ber ein Formular lngere Makros abgearbeitet, sollten Sie sich berlegen, ob Sie
nicht einen Fortschrittsbalken anbieten mchten. Bei lnger laufenden Makros ist es empfeh-
lenswert, den Anwender whrend des Makroablaufs mit gelegentlichen Meldungen in der
Statusleiste oder sogar einem Verlaufsbalken ber die einzelnen Schritte bzw. den Verlauf des
Makros in Kenntnis zu setzen.
Das Steuerelement MICROSOFT PROGRESSBAR CONTROL knnen Sie aktivieren, indem Sie das
Symbol WEITERE STEUERELEMENTE in der Toolbox anklicken und das Steuerelement aus der
Liste auswhlen. Fgen Sie dieses Steuerelement und eine Schaltflche in einem neuen For-
mular (FORTSCHRITTSBALKEN) ein. Legen Sie das Makro aus Listing 388 hinter die Schaltfl-
che.
Abbildung 242: Es werden keine doppelten Tage bertragen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Fortschrittbalken
'=====================================================
Private Sub Befehl1_Click()
'Fortschrittsbalken programmieren
Listing 388: Den Fortschrittsbalken animieren
Sandini Bib
Der Webbrowser 475
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Eigenschaften Min bzw. Max knnen Sie den Start- bzw. Endwert des Steuerele-
ments bestimmen. Mit diesen beiden Informationen knnen Sie sich dann eine Schleife
zusammenstellen, die so lange durchlaufen wird, bis der Max-Wert erreicht ist. Luft Ihnen
der Fortschrittsbalken zu schnell, dann erhhen Sie den Max-Wert einfach. Den Fortschritts-
balken bekommen Sie automatisch zum Laufen, wenn Sie die Eigenschaft Value des Fort-
schrittbalkens fttern.
Die Art des Fortschrittsbalkens sowie dessen Aussehen knnen Sie brigens anpassen.
Klicken Sie dazu in der Entwurfsansicht des Formulars mit der rechten Maustaste auf das
Steuerelement und whlen Sie den Befehl PROGCTRL-OBJEKT/PROPERTIES aus dem Kontext-
men.
320 Der Webbrowser
ber den Einsatz des Steuerelements WEBBROWSER knnen Sie Internetseiten oder auch
Office-Dateien ffnen. Das Steuerelement MICROSOFT WEBBROWSER aktivieren Sie, indem
Sie das Symbol WEITERE STEUERELEMENTE in der Toolbox anklicken und das Steuerelement
aus der Liste auswhlen. Fgen Sie dieses Steuerelement und eine Schaltflche in einem
Dim intz As Integer
With Me
.[Link] = 0
.[Link] = 10000
For intz = [Link] To .[Link]
.[Link] = intz
intz = intz + 1
Next intz
.[Link] = 0
End With
End Sub
Abbildung 243: Das Steuerelement ProgressBar im Einsatz
Listing 388: Den Fortschrittsbalken animieren (Forts.)
Sandini Bib
476 Steuerelemente, Dialoge und Formulare
neuen Formular (WEBBROWSER) ein. Legen Sie das Makro aus Listing 389 hinter die Schalt-
flche.
Mithilfe der Methode Navigate knnen Sie die im Argument URL angegebene Webseite oder
Datei im Webbrowser laden.
321 Zugriff auf Outlook-Postfach
ber das Steuerelement MICROSOFT OFFICE OUTLOOK VIEW CONTROL knnen Sie in einem
Formular Ihr E-Mail-Postfach abrufen. Fgen Sie dieses Steuerelement in ein neues Formu-
lar (OUTLOOKPOST) ein und integrieren Sie eine zustzliche Schaltflche. Legen Sie danach
das Makro aus Listing 390 hinter die Schaltflche.
Abbildung 244: Der Fortschrittsbalken lsst sich einstellen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Webbrowser
'=====================================================
Private Sub Befehl3_Click()
'Webseite oder Office-Datei aufrufen
With Me
.[Link] URL:=[Link]
End With
End Sub
Listing 389: Webseiten, Office-Dateien oder Bilder ber den Webbrowser betrachten
Sandini Bib
Das TreeView-Steuerelement 477
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Mails werden beim ffnen des Formulars automatisch in das Steuerelement geladen. Sie
haben dabei die Mglichkeit, die Mails ber einen Klick auf die entsprechende Rubrik zu
sortieren.
ber die Methode Open wird die markierte Mail im Listenfeld geffnet.
322 Das TreeView-Steuerelement
Wie der Name schon sagt, knnen Sie mithilfe dieses Steuerelements ganze Verzeichnis-
bume auf einem Formular abbilden. Machen Sie das TREEVIEW-Steuerelement auf Ihrer
Werkzeugsammlung verfgbar und fgen Sie es in einem neuen Formular (TREEVIEW) ein.
Integrieren Sie zustzlich noch eine weitere Schaltflche.
Abbildung 245: Eine Excel-Arbeitsmappe ber den Webbrowser ffnen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_OutlookPost
'=====================================================
Private Sub Befehl1_Click()
'E-Mail ffnen
With Me
.[Link]
End With
End Sub
Listing 390: E-Mail per Klick ffnen
Sandini Bib
478 Steuerelemente, Dialoge und Formulare
Da das TREEVIEW-Steuerelement schon beim Aufruf des Formulars gefllt sein muss, setzen
Sie zu diesem Zweck auch hier das Ereignis Form_Load ein, welches Sie im folgenden Listing
sehen knnen. Dabei sollen alle Module der aktiven Datenbank im TREEVIEW-Steuerelement
angezeigt werden.
Ermitteln Sie zuerst den Namen der aktiven Datenbank. Fgen Sie diesen Namen ber die
Methode Add im Steuerelement TREEVIEW als neuen Zweig ein. Unterhalb dieses Zweigs
Abbildung 246: Alle Mails werden angezeigt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_TreeView
'=====================================================
Private Sub Form_Load()
Dim Eintrag As Node
Dim obj As AccessObject
Dim dbs As Object
Set dbs = [Link]
Set Eintrag = [Link](, , , [Link])
For Each obj In [Link]
[Link] [Link], tvwChild, , [Link]
Next obj
End Sub
Listing 391: Alle Module im TreeView-Steuerelement anzeigen
Sandini Bib
Das Media-Player-Steuerelement 479
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ermitteln Sie die Namen der Module, die in der Datenbank enthalten sind. Fgen Sie diese
Modulnamen unterhalb des Hauptzweigs wiederum ber die Methode Add ein.
323 Das Media-Player-Steuerelement
Standardmig wird der Media Player mit Windows ausgeliefert. Aber auch als Steuerele-
ment steht er Ihnen in Access zur Verfgung. Im folgenden Beispiel sollen auf einem Formu-
lar ber ein Listenfeld smtliche Videodateien (*.mpg) eines Ordners angeboten werden.
ber einen Doppelklick auf das gewnschte Video soll dieses dann im MEDIA-PLAYER-
Steuerelement abgespielt werden.
Legen Sie zunchst ein neues, noch leeres Formular (MEDIAPLAYER) an und fgen Sie das
MEDIA-PLAYER-Steuerelement, ein Listenfeld und eine Schaltflche ein. Legen Sie das Makro
aus Listing 392 hinter die Schaltflche, um das Listenfeld mit Videodateien zu fllen.
Abbildung 247: Module auflisten
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_MediaPlayer
'=====================================================
Private Sub Befehl3_Click()
'Videodateien suchen
Dim varfile As Variant
With [Link]
.NewSearch
Listing 392: Videodateien suchen
Sandini Bib
480 Steuerelemente, Dialoge und Formulare
Fhren Sie eine Suche nach den MPG-Dateien durch. Verwenden Sie das Objekt FileSearch,
um die einzelnen Dateien im angegebenen Verzeichnis zu ermitteln. Auf dieses Objekt kn-
nen Sie einige Eigenschaften anwenden: Die Eigenschaft NewSearch setzt die Einstellungen
aller Suchkriterien auf die Standardeinstellungen zurck. Mithilfe der Eigenschaft LookIn
geben Sie bekannt, in welchem Verzeichnis die Suche beginnen soll. Die Eigenschaft Search-
SubFolders bestimmt, ob die Suche auch in Unterverzeichnissen fortgesetzt werden soll. In
diesem Fall mssen Sie diese Eigenschaft auf den Wert True setzen. Die Eigenschaft FileName
gibt den Namen der Datei an. Dabei wird ber das Sternchen bekannt gegeben, dass alle
Dateien mit der Endung mpg gesucht werden sollen. ber die Methode AddItem fgen Sie den
Namen der Videodateien im Listenfeld ein.
.LookIn = "c:\Eigene Dateien\"
.FileName = "*.mpg"
.SearchSubFolders = True
If .Execute() > 0 Then
For Each varfile In .FoundFiles
[Link] varfile
Next varfile
End If
End With
End Sub
Abbildung 248: Filme im Formular abspielen
Listing 392: Videodateien suchen (Forts.)
Sandini Bib
Das Office-Chart-Steuerelement 481
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Um die Videodatei im Media-Player abzuspielen, wird das gewnschte Stck im Listenfeld
doppelt angeklickt. Damit wird die Datei an den Media-Player bergeben.
Geben Sie ber die Eigenschaft FileName bekannt, welche Datei der Media-Player spielen soll.
Dabei lesen Sie den aktuellen Eintrag im Listenfeld ber die Methode Value aus.
324 Das Office-Chart-Steuerelement
Wenn Sie mit Diagrammen in Formularen arbeiten mchten, dann knnen Sie das Steuer-
element MICROSOFT OFFICE CHART 10.0 (Access 2002) bzw. MICROSOFT OFFICE
CHART 11.0 (Access 2003) verwenden. Fgen Sie dieses Steuerelement zunchst auf einem
neuen, leeren Formular ein.
Die folgende Aufgabe besteht nun darin, die Tabelle Artikel der Datenbank [Link]
anzuzapfen und die fnf teuersten Artikel aus dieser Tabelle in einem Sulendiagramm anzu-
zeigen. Diese Aufgabe soll im Hintergrund und direkt nach dem ffnen des Formulars statt-
finden. Erfassen Sie zu diesem Zweck das Ereignis Form_Load aus Listing 394.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_MediaPalyer
'=====================================================
Private Sub Liste1_DblClick(Cancel As Integer)
[Link] = [Link]
End Sub
Listing 393: Videodateien abspielen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_OfficeChart
'=====================================================
Private Sub Form_Load()
Dim Conn As New [Link]
Dim DBS As [Link]
Dim obj As AccessObject
Dim varrWert(4) As Variant
Dim varrBez(4) As Variant
Dim intZ As Integer
Dim ChSp As Object
Set Conn = [Link]
Listing 394: Diagramm in Formular erstellen
Sandini Bib
482 Steuerelemente, Dialoge und Formulare
Bei diesem Beispiel ist die Datenbank [Link] bereits geffnet. Daher knnen Sie sich
den Open-Befehl sparen und stattdessen beim ffnen der Tabelle Artikel auf die geffnete
Datenbank verweisen. Zu diesem Zweck haben Sie der Eigenschaft Connection die aktuelle
Datenbank ber das Objekt CurrentProject zugewiesen.
ber die Anweisung Set mit dem Zusatz New erstellen Sie ein neues RecordSet-Objekt. In die-
sem Objekt wird spter der gefundene Satz bertragen, gendert und dann zurckgeschrie-
ben.
Wenden Sie danach die Eigenschaft Sort an und geben Sie vor, nach welchen Kriterien sor-
tiert werden soll. Haben Sie mehrere Sortierkriterien zur Auswahl, dann geben Sie diese ent-
sprechend der Sortierreihenfolge getrennt durch Kommata ein. Bei der Sortierreihenfolge
selbst knnen Sie entweder ASC fr aufsteigende Sortierung oder DESC fr absteigende Sortie-
rung angeben. Dabei erfassen Sie nach dem Feldnamen ein Leerzeichen und hngen die
gewnschte Sortierkonstante an.
Set DBS = New [Link]
With DBS
.CursorLocation = adUseClient
.Open "Artikel", Conn, adOpenKeyset, adLockOptimistic
.Sort = "Einzelpreis Desc"
For intZ = 0 To 4
varrWert(intZ) = DBS("Einzelpreis")
varrBez(intZ) = DBS("Artikelname")
.MoveNext
Next intZ
[Link]
End With
'Diagrammerstellung
Set ChSp = [Link]
With ChSp
.Type = chChartTypeColumnClustered
.[Link]
.SeriesCollection(0).Caption = "Die teuersten Artikel"
.SeriesCollection(0).SetData chDimCategories, chDataLiteral, varrBez
.SeriesCollection(0).SetData chDimValues, chDataLiteral, varrWert
.HasLegend = False
.HasTitle = True
End With
[Link]
Set DBS = Nothing
Set Conn = Nothing
End Sub
Listing 394: Diagramm in Formular erstellen (Forts.)
Sandini Bib
Das Office-Chart-Steuerelement 483
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
In einer nachfolgenden Schleife, die genau fnf Mal durchlaufen wird, werden die Einzel-
preise sowie die dazugehrenden Artikelbezeichnungen der billigsten Artikel ermittelt und in
die Variablen varrWert und varrBez geschrieben.
Haben Sie die teuersten Artikel ermittelt, kann es daran gehen, diese Artikel in einem Dia-
gramm darzustellen. ber die Methode Add fgen Sie ein neues Diagramm ein. Dabei geben
Sie ber die Eigenschaft Type bekannt, welcher Diagrammtyp eingesetzt werden soll. In der
Online-Hilfe knnen Sie die dafr notwendigen Konstanten fr die entsprechenden Dia-
gramme selbst nachlesen. Es stehen Ihnen dabei weit ber 50 verschiedene Diagrammtypen
zur Verfgung.
Eine Datenreihe wird ber die Anweisung [Link] eingefgt. Dabei erhlt die
erste Datenreihe den Index 0, die zweite den Index 1 usw. Da Sie fr dieses Beispiel nur eine
Datenreihe bentigen, in der die billigsten Artikelpreise dargestellt werden sollen, entfllt
hier das Einfgen mehrerer Datenreihen. ber die Eigenschaft Caption wird die Beschrei-
bung festgelegt, die spter als Titel sowie auch als Legendentext verwendet werden kann.
Mithilfe der Methode SetData werden die Daten fr das Diagramm zugewiesen. Diese Daten
haben Sie vorher in den Variant-Variablen varrWert und varrBez gespeichert. ber die Eigen-
schaften HasLegend und HasTitel bestimmen Sie, dass eine Legende bzw. ein Diagrammtitel
angezeigt werden soll.
Vergessen Sie dann nicht, die Tabelle ber die Methode Close zu schlieen und die Objekt-
verweise wieder aufzuheben.
Abbildung 249: Die teuersten Artikel werden in einem Formulardiagramm angezeigt.
Sandini Bib
484 Steuerelemente, Dialoge und Formulare
325 Das SpreadSheet-Steuerelement
Mithilfe des SPREADSHEET-Steuerelements knnen Sie auf einem Formular eine komplette
Excel-Tabelle verwalten, d.h., Sie knnen in dieses Steuerelement einen Bereich einer Tabelle
einlesen, verndern und zurckschreiben.
Im folgenden Beispiel wurden ein neues Formular mit dem Namen SPREADSHEET angelegt,
das Steuerelement MICROSOFT OFFICE SPREADSHEET 11.0 (Access 2003), sowie ein Listenfeld
und eine Schaltflche eingefgt. ber den Klick auf die Schaltflche werden alle Excel-
Arbeitsmappen aus einem Verzeichnis ins Listenfeld eingelesen. Per Doppelklick auf die ent-
sprechende Datei wird die erste Tabelle der Arbeitsmappe Zelle fr Zelle in das SPREAD-
SHEET-Steuerelement bertragen. Legen Sie jetzt das Makro aus Listing 395 direkt hinter die
Schaltflche.
Fhren Sie eine Suche nach den Excel-Arbeitsmappen durch. Dazu verwenden Sie das
Objekt FileSearch, um die einzelnen Dateien im angegebenen Verzeichnis zu ermitteln. Auf
dieses Objekt knnen Sie einige Eigenschaften anwenden: Die Eigenschaft NewSearch setzt die
Einstellungen aller Suchkriterien auf die Standardeinstellungen zurck. Mithilfe der Eigen-
schaft LookIn geben Sie bekannt, in welchem Verzeichnis die Suche beginnen soll. Die Eigen-
schaft SearchSubFolders bestimmt, ob die Suche auch in Unterverzeichnissen fortgesetzt
werden soll. In diesem Fall mssen Sie diese Eigenschaft auf den Wert True setzen. ber die
Eigenschaft FileType knnen Sie ganz konkret angeben, dass Sie nur Excel-Arbeitsmappen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_SpreadSheet
'=====================================================
Private Sub Befehl5_Click()
'Excel-Mappen ermitteln
Dim varfile As Variant
With [Link]
.NewSearch
.LookIn = "c:\Eigene Dateien\"
.FileType = msoFileTypeExcelWorkbooks
.SearchSubFolders = False
If .Execute() > 0 Then
For Each varfile In .FoundFiles
[Link] varfile
Next varfile
End If
End With
End Sub
Listing 395: Excel-Arbeitsmappen einlesen
Sandini Bib
Das SpreadSheet-Steuerelement 485
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
suchen mchten, indem Sie die Konstante msoFileTypeExcelWorkbooks angeben. ber die
Methode AddItem fgen Sie den Namen der Videodateien im Listenfeld ein.
Der Doppelklick auf das Listenfeld aus Listing 396 ffnet die ausgewhlte Arbeitsmappe im
Hintergrund und bertrgt den Inhalt der ersten Tabelle ins SPREADSHEET-Steuerelement.
ber die Funktion CreateObject erstellen Sie zunchst einen Verweis auf die Microsoft
Excel-Bibliothek. Damit gewinnen Sie Zugriff auf alle Methoden und Eigenschaften, die fr
Excel-Arbeitsmappen verfgbar sind. So ffnen Sie ber die Methode Open die im Listenfeld
markierte Excel-Arbeitsmappe. Danach lschen Sie sicherheitshalber alle Zellen des SPREAD-
SHEET-Steuerelements, indem Sie die Methode ClearContents auf alle Zellen des Elements
anwenden. ber die Anweisung [Link] ermitteln Sie die Anzahl der verwen-
deten Zeilen der ersten Tabelle. Analog dazu fragen Sie die Anzahl der verwendeten Spalten
ber die Anweisung [Link] ab. Mithilfe von zwei aufeinander folgenden
Schleifen bertragen Sie die einzelnen Zellen in das Steuerelement SPREADSHEET. Dabei kn-
nen Sie jede einzelne Zelle des Steuerelements sowie der Tabelle ber die Cells-Auflistung
ansteuern, der Sie die dynamische Zeilen- und Spaltenangabe bergeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_SpreadSheet
'=====================================================
Private Sub Liste1_DblClick(Cancel As Integer)
'Tabelle in Spreadsheet-Element bertragen
Dim intZeilen As Long
Dim Spalten As Integer
Dim xlApp As Object
Dim xlMappe As Object
Dim intz As Integer
Set xlApp = CreateObject("[Link]")
Set xlMappe = [Link]([Link])
[Link]
For intZeilen = 1 To [Link](1).[Link]
For intSpalten = 1 To [Link](1).[Link]
[Link](intZeilen, intSpalten) = _
[Link](1).Cells(intZeilen, intSpalten)
Next intSpalten
Next intZeilen
[Link] savechanges:=False
[Link]
Set xlApp = Nothing
Set xlMappe = Nothing
End Sub
Listing 396: Tabelle Zelle fr Zelle bertragen
Sandini Bib
486 Steuerelemente, Dialoge und Formulare
Wenden Sie am Ende des Makros die Methode Close an, um die Arbeitsmappe zu schlieen,
sowie die Methode Quit, um die Excel-Sitzung zu beenden. Heben Sie danach die Objektver-
weise auf, indem Sie diese auf Nothing setzen (siehe Abbildung 250).
326 Das Slider-Steuerelement
Unter dem Steuerelement SLIDER versteht man einen Schieberegler, ber den man Werte in
einem bestimmten Wertebereich, beispielsweise 0100, einstellen kann. Dieses Steuerele-
ment wird gerne in Verbindung mit einem Textfeld verwendet, indem man den eingestellten
Wert des SLIDER anzeigt.
Das Steuerelement MICROSOFT SLIDER CONTROL knnen Sie aktivieren, indem Sie das Sym-
bol WEITERE STEUERELEMENTE in der Toolbox anklicken und das Steuerelement aus der Liste
auswhlen. Fgen Sie dieses Steuerelement und ein Textfeld in einem neuen Formular mit
dem Namen SLIDER ein.
Klicken Sie das SLIDER-Element in der Entwurfsansicht mit der rechten Maustaste an und
whlen Sie den Befehl SLIDER-OBJEKT/PROPERTIES aus dem Kontextmen (siehe Abbildung
251).
Im Dialog aus Abbildung 251 lsst sich das Slider-Steuerelement einstellen. Um nun das
Textfeld mit dem SLIDER zu synchronisieren, erfassen Sie das Ereignis Scroll des SLIDER.
Abbildung 250: Die Excel-Tabelle wird im Access-Formular angezeigt.
Sandini Bib
Das Slider-Steuerelement 487
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Methode Value fragen Sie den aktuellen Status des SLIDER ab und bertragen ihn in
das Textfeld.
Abbildung 251: En Slider einstellen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Slider
'=====================================================
Private Sub Slider0_Scroll()
'Textfeld mit Slider synchronisieren
[Link] = [Link]
End Sub
Listing 397: bertragen des Slider-Status ins Textfeld
Abbildung 252: Slider und Text
Sandini Bib
488 Steuerelemente, Dialoge und Formulare
327 Das Spinbutton-Steuerelement
ber das SPINBUTTON-Steuerelement knnen Sie elegant ber zwei Drehknpfe Werte in
einem bestimmten Wertebereich in einem verknpften Textfeld erstellen. Dabei kann die
Schrittweite selbst festgelegt werden.
Legen Sie ein neues Formular mit dem Namen SPINBUTTON an und integrieren Sie ein Text-
feld sowie das Steuerelement MICROSOFT FORMS 2.0 SPINBUTTON. Beim ffnen des Formu-
lars definieren Sie in Listing 398 den kleinsten sowie grten Wert, den Sie ber den
SPINBUTTON einstellen knnen.
ber die Eigenschaft Max legen Sie den grtmglichen Wert des SPINBUTTON fest. Die Eigen-
schaft Min liefert den kleinsten Wert.
Um den augenblicklichen Wert des SPINBUTTON ins Textfeld zu bertragen, erfassen Sie das
Makro aus Listing 399.
ber die Methode Value fragen Sie den aktuellen Status des SPINBUTTON ab und bertragen
ihn in das Textfeld.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Spinbutton
'=====================================================
Private Sub Form_Load()
With Me
.[Link] = 100
.[Link] = 1
End With
End Sub
Listing 398: Die Grenzwerte des Spinbutton festlegen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap06
' Dateiname [Link]
' Klasse Form_Spinbutton
'=====================================================
Private Sub SpinButton3_Change()
'bertragen Spinbutton-Status ins Textfeld
With Me
.[Link] = .[Link]
End With
End Sub
Listing 399: bertragen des Spinbutton-Werts ins Textfeld
Sandini Bib
Das Spinbutton-Steuerelement 489
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 253: Der Spinbutton kennt Werte von 1 bis 100.
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Berichte und Datenzugriffsseiten
Mithilfe von Berichten haben Sie die Mglichkeit, Daten wirkungsvoll in gedruckter Form
auszugeben. Beim Gestalten der Berichte stehen Ihnen viele Wege offen, da Sie die Gre
und Darstellung aller Bestandteile eines Berichts selbst bestimmen knnen.
Sie knnen Datenbanken selbstverstndlich nicht nur lokal betreiben, sondern auch im
Internet so genannte Datenzugriffsseiten ablegen und diese dann einsetzen, um Ihren loka-
len Datenbestand abzufragen bzw. zu aktualisieren.
328 Berichtstypen
Access unterscheidet diverse Berichte, die Sie alle mit dem Berichts-Assistenten erstellen kn-
nen. Genau diese Vorgehensweise empfiehlt sich auch vor der Programmierung von Berich-
ten.
Bevor Sie einen neuen Bericht ber den Berichts-Assistenten erstellen, mssen Sie sich
Gedanken machen, welche Art von Bericht Sie einsetzen mchten. Access bietet Ihnen dazu
folgende Berichtsarten an:
1. DETAILBERICHTE: Bei einem Detailbericht gibt es zu jedem einzelnen Datensatz auch
einen Satz im Bericht. Diese Stze werden dann nach bestimmten Gesichtspunkten grup-
piert. Damit ist ein lckenloser Nachweis mglich. Bei Detailberichten werden Fragen
nach Lagerbewegungen, Verkufen, Bestellungen usw. beispielsweise in einem bestimm-
ten Zeitraum beantwortet.
2. BERICHTE MIT ZUSAMMENFASSUNG: Bei diesen Berichten werden nicht mehr alle Daten
ausgegeben. Die Daten werden im Vorfeld gruppiert und zusammengefasst. Als Ergebnis
erhalten Sie nur noch wenige Zeilen, also eine verdichtete Darstellung.
3. BERICHTE MIT DIAGRAMMEN: Bei dieser Berichtsform werden die Daten ber ein Dia-
gramm zustzlich aufbereitet. Auch diese Aufgabe knnen Sie ohne eine einzige Zeile
VBA standardmig sehr schnell ausfhren.
4. FORMULARBERICHTE: Der Berichts-Assistent untersttzt ebenso Berichte, die wie Formu-
lare aussehen knnen.
5. ETIKETTENBERICHTE: Mithilfe des Etiketten-Assistenten knnen Sie Etiketten erstellen
und dabei die Etikettengre sowie die Seitenmae festlegen.
Sandini Bib
492 Berichte und Datenzugriffsseiten
329 Der Aufbau eines Berichts
Wenn Sie einen Bericht erstellen, dann hat dieser standardmig einen vorgegebenen Auf-
bau:
Im SEITENKOPF knnen Sie Informationen ablegen, wie berschriften, Logos, Datum
usw., die auf jeder Druckseite wiederholt werden.
Der DETAILBEREICH enthlt die wirklichen Daten des Berichts. Diese Daten werden aus
einer Tabelle bzw. einem Bericht geholt.
Im SEITENFUSS geben Sie Daten wie die Seitennummerierung, den Namen des Berichts
und seinen Speicherort aus.
Es gibt noch weitere Bestandteile eines Berichts, die bei Bedarf verwendet werden knnen. So
knnen Sie zu Beginn eines Berichts ein Titelblatt definieren, welches als Berichtskopf
bezeichnet wird. Dieser Berichtskopf wird dann nur einmalig gedruckt. Genauso gibt es auch
einen Berichtsfu, der am Ende eines Berichts als Abschluss gedruckt werden kann.
Innerhalb des Detailbereichs knnen Sie mehrere Gruppenkpfe und Gruppenfe einrich-
ten. Mithilfe dieser Elemente knnen Sie die Daten gruppieren und bersichtlich anordnen.
330 Berichte ffnen
Fr einfachere Aktionen wie das ffnen, Suchen, Drucken und Schlieen von Berichten
knnen Sie mit dem Objekt DoCmd arbeiten. Die Methoden des DoCmd-Objekts knnen Sie ver-
wenden, um Microsoft Access-Aktionen aus Visual Basic heraus auszufhren.
Abbildung 254: Die Grundbestandteile eines Berichts
Sandini Bib
Berichte ffnen 493
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Methode OpenReport ffnen Sie einen Bericht in Access. Die Syntax dieser
Methode lautet:
OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
Im folgenden Beispiel aus Listing 400 wird der Bericht UMSTZE NACH KATEGORIE in der
Vorschau angezeigt.
Argument Beschreibung
ReportName Erforderlich. Gibt den Namen des Berichts an, den Sie ff-
nen mchten.
View Optional. Bestimmt die Ansicht des Berichts. Es stehen
Ihnen dabei folgende Konstanten zur Verfgung:
acViewDesign: ffnet den Bericht in der Entwurfsansicht.
acViewNormal: erstellt den Bericht und druckt ihn direkt aus.
Sie bekommen den Bericht nicht angezeigt (Standard-
einstellung).
acViewPreview: zeigt den Bericht in der Seitenansicht an.
FilterName und WhereCondition Optional. Stellt einen Filter ein.
WindowMode Optional. Legt fest, wie das Formular angezeigt werden soll.
acWindowNormal: zeigt den Bericht in der Standardansicht an.
acHidden: zeigt den Bericht im ausgeblendeten Zustand an
acIcon: blendet den Bericht unten am Bildschirm in der
Titelleiste als kleines Symbol ein.
acDialog: zeigt den Bericht als Dialog an. Dabei knnen Sie
mit einer anderen Aufgabe erst wieder weiterarbeiten, wenn
Sie den Bericht wieder geschlossen haben.
OpenArgs Optional. Beim ffnen des Berichts knnen bestimmte
Werte bzw. Einstellungen mitgegeben werden.
Tabelle 123: Die Argumente der Methode OpenReport
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub Berichtffnen()
On Error GoTo fehler
[Link] "Umstze nach Kategorie", acViewPreview
[Link]
Exit Sub
Listing 400: Bericht in der Vorschau ffnen
Sandini Bib
494 Berichte und Datenzugriffsseiten
Wenden Sie die Methode OpenReport an, um einen Bericht zu ffnen. Da jeder Bericht stan-
dardmig gleich gedruckt wird, verwenden Sie hier die Konstante acPreview. ber die
Methode Maximize zeigen Sie den Bericht in der maximierten Ansicht an.
331 Berichtsfilter setzen
Im nchsten Beispiel aus Listing 401 wird der Bericht ALPHABETISCHE ARTIKELLISTE aufgeru-
fen und dabei ein Filter eingestellt. Es sollen nur Artikel ausgegeben werden, die vom Liefe-
ranten mit der Nummer 4 stammen.
Stellen Sie als Filterkriterium eine Lieferantenauswahl ein. Da der Feldnamen einen Binde-
strich aufweist, muss der Ausdruck im Filter in eckige Klammern gesetzt werden. ber die
Methode RunCommand, der Sie die Konstante acCmdZoom100 zuweisen, wird der Bericht 1:1 am
Bildschirm ausgegeben.
332 Bericht schlieen
ber die Methode Close knnen Sie einen Bericht schlieen. Die Syntax dieser Methode
lautet:
Close(Objekttyp, Objektname, Speichern)
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub BerichtffnenUndVoreinstellen()
On Error GoTo fehler
[Link] "Alphabetische Artikelliste", _
acViewPreview, , "[Lieferanten-Nr] = 4"
[Link] acCmdZoom100
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 401: Bericht aufrufen und Filter setzen
Listing 400: Bericht in der Vorschau ffnen (Forts.)
Sandini Bib
Berichte drucken 495
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
333 Berichte drucken
Standardmig werden Berichte sofort gedruckt, wenn Sie diese aufrufen. Der Bericht wird
dann einmal komplett ausgedruckt. Sie haben vorher keine Mglichkeit, Einschrnkungen
der Datenstze bzw. die Anzahl der Kopien einzustellen. Mithilfe der Methode PrintOut
gelingt Ihnen dieses Vorhaben jedoch. Die Syntax dieser Methode lautet:
PrintOut (Druckbereich, Von, Bis, Druckqualitt, Exemplare, ExemplareSortieren)
Abbildung 255: Nur bestimmte Datenstze anzeigen
Argument Beschreibung
ObjectType
Optional. Legt den Objekttyp fest: acDataAccessPage, acDe-
fault (Standard), acDiagram, acForm, acFunction, acMacro,
acModule, acQuery, acReport, acServerView, acStoredProcedure,
acTable
Objektname
Optional. Gibt den Namen des Objekts vom Typ ObjektType
an.
Save
Optional. Dabei gelten folgende Konstanten:
acSaveNo: keine Speicherung
acSavePrompt (Standard): Dieser Wert wird ignoriert, falls
Sie ein Visual Basic-Modul schlieen. Das Modul wird
geschlossen, nderungen an dem Modul werden jedoch
nicht gespeichert.
acSaveYes: Wenn Sie dieses Argument nicht angeben, wird
der Standardwert (acSavePrompt) verwendet.
Tabelle 124: Die Argumente der Methode Close
Sandini Bib
496 Berichte und Datenzugriffsseiten
Im folgenden Beispiel aus Listing 402 werden die ersten beiden Seiten des Berichts UMSTZE
NACH KATEGORIE direkt auf den Drucker geschickt und mit fnf Kopien in mittlerer Qualitt
gedruckt.
Argument Beschreibung
Druckbereich
Optional. Der Druckbereich wird angegeben. Dabei stehen
folgende Konstanten zur Verfgung:
acPages: Bei dieser Konstante knnen Sie die Seitenzahlen
angeben, die Sie ausdrucken mchten. Dabei mssen Sie im
nchsten Argument die genauen Werte angeben.
acPrintAll: Diese Konstante bewirkt, dass der komplette
Bericht ausgedruckt wird. Hier handelt es sich um eine
Standardeinstellung von Access.
acSelection: Bei dieser Konstanten werden nur die markier-
ten Datenstze ausgedruckt.
Von und Bis Optional. Gibt an, welche Seiten gedruckt werden sollen.
Dieses Argument brauchen Sie natrlich nur dann anzuge-
ben, wenn Sie im Argument Druckbereich die Konstante
acPages angegeben haben.
Druckqualitt
Optional. Bestimmt die Qualitt und nicht zuletzt auch die
Geschwindigkeit des Druckvorgangs. Hierfr stehen fol-
gende Konstanten zur Verfgung: acDraft: Mit dieser Kon-
stanten drucken Sie den Bericht in Entwurfsqualitt aus.
acHigh: Diese Druckqualitt ist sehr hoch und hat damit die
lngste Druckdauer (Standard).
acLow: niedrige Druckqualitt mit deutlichen Vorteilen bei
der Ausdruckgeschwindigkeit.
acMedium: mittlere Druckqualitt als Kompromiss zwischen
Druckgeschwindigkeit und Druckqualitt.
Exemplare
Optional. Bestimmt die Anzahl der Kopien, die Sie von dem
Bericht wnschen. Der Standardwert liegt hier bei einem
Exemplar und kann daher auch weggelassen werden.
ExemplareSortieren
Optional. Gibt an, wenn Sie mehrere Kopien des Berichts
drucken und den Ausdruck danach nicht von Hand sortie-
ren mchten. Geben Sie hier den Wert True an, um die
Berichtsseiten whrend des Druckvorgangs zu sortieren.
Tabelle 125: Die Argumente der Methode PrintOut
Sandini Bib
Berichte kopieren 497
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Vor dem Drucken steht Ihnen die Eigenschaft FastLaserPrinting zur Verfgung. Mit dieser
Eigenschaft knnen Sie angeben, ob Linien und Rechtecke durch Linien aus Textzeichen
(vergleichbar mit den Zeichen Unterstrich (_) und vertikaler Strich (|)) ersetzt werden, wenn
Sie ein Formular oder einen Bericht mit einem der gngigen Laserdrucker drucken. Das
Drucken kann erheblich schneller erfolgen, wenn Linien und Rechtecke durch Linien aus
Textzeichen ersetzt werden.
Im folgenden Beispiel aus Listing 403 werden die ersten beiden Seiten des Berichts KATALOG
in der schnelleren Laservariante ausgedruckt.
334 Berichte kopieren
Mchten Sie einen Bericht zur Sicherheit in eine andere Datenbank transportieren, knnen
Sie hierfr die Methode CopyObject einsetzen. Die Syntax dieser Methode lautet:
CopyObject(Zieldatenbank, NeuerName, Quellobjekttyp, Quellobjektname)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub BerichtDrucken()
[Link] "Umstze nach Kategorie", acViewPreview
[Link] acPages, 1, 2, acMedium, 5, True
End Sub
Listing 402: Bericht benutzerdefiniert ausdrucken
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub NochSchnellerDrucken()
[Link] "Katalog", acDesign
Reports![Link] = True
[Link] acPages, 1, 2, acMedium, , True
End Sub
Listing 403: Den noch schnelleren Laserdruck einstellen
Sandini Bib
498 Berichte und Datenzugriffsseiten
Im folgenden Beispiel aus Listing 404 wird der Bericht KATALOG kopiert und unter dem
Namen KATALOGNEU gespeichert
Soll der Bericht in eine andere Datenbank kopiert werden, dann sehen Sie sich das Makro aus
Listing 405 an.
Argument Beschreibung
Zieldatenbank
Die Kopieraktion fhren Sie von der aktuell geffneten
Datenbank aus durch. Im Argument Zieldatenbank geben
Sie den Pfad sowie den Namen der Datenbank an, in wel-
che Sie den Bericht kopieren mchten. Lassen Sie dieses
Argument leer, wenn Sie den Bericht innerhalb der
aktuellen Datenbank kopieren mchten.
NeuerName
Optional. Geben Sie an, wie der kopierte Bericht heien
soll.
Quellobjekttyp
Optional. Geben Sie in einer Konstanten an, ob Sie einen
Bericht (acReport), eine Tabelle (acTable), eine Abfrage
(acQuery), ein Modul (acModule) oder sonstige Objekte
kopieren mchten.
Quellobjektname
Optional. Geben Sie den Namen des Berichts an, den Sie
kopieren mchten.
Tabelle 126: Die Argumente der Methode CopyObject
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub BerichtKopieren()
On Error GoTo fehler
[Link] , "KatalogNeu", acReport, "Katalog"
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 404: Einen Bericht in der aktuellen Datenbank kopieren
Sandini Bib
Berichte umbenennen 499
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
335 Berichte umbenennen
Um einem Bericht einen anderen Namen zu geben, setzen Sie die Methode Rename ein. Die
Syntax dieser Methode lautet:
[Link](NewName, ObjectType, OldName)
Im folgenden Beispiel aus Listing 406 wird der Bericht KATALOGNEU umbenannt. Der Name
des neuen Berichts lautet dann ARTIKELANGEBOT.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub BerichtKopierenErw()
On Error GoTo fehler
[Link] _
"C:\Eigene Dateien\[Link]", "Artikelkatalog", acReport, "Katalog"
MsgBox "Kopieraktion durchgefhrt!"
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 405: Bericht in eine andere Datenbank kopieren
Argument Beispiel
NewName
Erforderlich. Gibt an, wie das Objekt nach der Umbenen-
nung heien soll.
ObjectType
Optional. Gibt an, ob Sie einen Bericht (acReport), eine
Tabelle (acTable), eine Abfrage (acQuery) oder ein sonstiges
Objekt umbenennen mchten. Es gelten hierbei dieselben
Konstanten wie schon vorher beschrieben bei der Methode
CopyObject.
OldName
Optional. Beinhaltet den alten Namen des Objekts.
Tabelle 127: Die Argumente der Methode Rename
Sandini Bib
500 Berichte und Datenzugriffsseiten
336 Berichte exportieren
Mit der Methode OutputTo knnen Sie die Daten in einem bestimmten Microsoft Access-
Datenbankobjekt (einem Datenblatt, einem Formular, einem Bericht, einem Modul oder
einer Datenzugriffsseite) in verschiedenen Formaten ausgeben. Dabei lautet die Syntax dieser
Methode wie folgt:
OutputTo(ObjectType, ObjectName, OutputFormat, OutputFile, AutoStart, TemplateFile)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub BerichtUmbenennen()
On Error GoTo fehler
[Link] "Artikelangebot", acReport, "KatalogNeu"
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 406: Bericht umbenennen
Argument Beschreibung
ObjectType
Erforderlich. Legt die Art des Access-Objekts fest, dessen
Daten exportiert werden sollen. Dabei haben Sie folgende
Mglichkeiten:
acOutputForm: Export der Daten eines Formulars
acOutputFunction: Export einer Funktion zur Sicherung
acOutputModule: Export eines kompletten Moduls inklusive
aller Funktionen und Makros
acOutputQuery: Export der Ergebnisse einer Abfrage
acOutputReport: Export eines Berichts
acOutputServerView: Export einer Serveransicht
acOutputStoredProcedure: Export einer gespeicherten
Prozedur
acOutputTable: Export einer Tabelle
ObjectName
Optional. Gibt den Namen des Objekts an, das exportiert
werden soll.
Tabelle 128: Die Argumente der Methode OutPutTo
Sandini Bib
Berichte exportieren 501
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im folgenden Beispiel aus Listing 407 wird der Bericht UMSTZE NACH JAHR in eine Excel-
Tabelle transferiert.
OutPutFormat
Optional. Legt fest, in welchem Datenformat die Daten
transferiert werden sollen. Die bekanntesten Formate hei-
en dabei wie folgt:
acFormatHTML: konvertiert die Daten in das HTML-Format.
acFormatRTF: konvertiert die Daten in das Rich-Text-For-
mat. Dieses Format kann beispielsweise problemlos in
Microsoft Word eingelesen werden.
acFormatTXT: Mit diesem Format ist das Textformat
gemeint.
acFormatXLS: konvertiert die Daten in das Microsoft Excel-
Format.
OutputFile
Optional. Gibt den Pfad sowie den Dateinamen der Datei
an, in welche die Daten transferiert werden sollen. Dabei
muss die Datei noch nicht vorhanden sein. Access legt diese
bei Bedarf selber an.
AutoStart
Optional. Bietet die Mglichkeit, die so erstellte Export-
datei gleich zu ffnen. Verwenden Sie den Wert True, um
die entsprechende auf Windows basierende Anwendung
sofort zu starten. Setzen Sie das Argument auf den Wert
False oder lassen Sie es weg, wenn Sie die Exportdatei nicht
ffnen mchten.
TemplateFile
Optional. Ist von Interesse, wenn Sie eine Vorlage beispiels-
weise fr die HTML-Datei verwenden mchten. In diesem
Fall ist dann der komplette Pfad dieser Vorlagendatei anzu-
geben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDoCmd
'=====================================================
Sub BerichtExportieren()
On Error GoTo fehler
[Link] acOutputReport, _
"Umstze nach Jahr", acFormatXLS, "C:\Eigene Dateien\[Link]", True
Exit Sub
Listing 407: Bericht exportieren
Argument Beschreibung
Tabelle 128: Die Argumente der Methode OutPutTo (Forts.)
Sandini Bib
502 Berichte und Datenzugriffsseiten
337 Berichte formatieren
Fr die Formatierung von Berichten stehen Ihnen eine ganze Reihe von Eigenschaften zur
Verfgung je nachdem, welches Berichtsobjekt Sie dabei formatieren mchten.
Im folgenden Beispiel aus Listing 408 wird dem Bericht UMSTZE PRO JAHR der zustzliche
Text Kopie hinzugefgt.
ber die Eigenschaft ScaleMode wird die Maeinheit festgelegt. Dabei bedeutet die Nummer 3,
dass die Maeinheit in Pixel angegeben wird. Mithilfe der Eigenschaft FontName knnen Sie
die Schriftart bestimmen, in der das zustzliche Label eingefgt werden soll. FontSize
bestimmt die Gre der Schrift. Den Schriftschnitt Fett legen Sie ber die Eigenschaft
FontBold fest, die Sie auf den Wert True setzen. Die Schriftfarbe lsst sich ber die Eigenschaft
ForeColor einstellen. Die eigentliche Farbe mischen Sie sich ber die Funktion RGB (Red-
Green-Blue) zusammen. Den genauen Ort im Bericht fr das zustzliche Label legen Sie ber
die Eigenschaft CurrentX fest. Dabei legen Sie fest, dass das Label etwa in der Mitte des Berichts
eingefgt werden soll.
Weitere Eigenschaften fr Formatierungen knnen Sie der Tabelle 129 entnehmen.
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Klasse Report_Umstze nach Jahr
'=====================================================
Private Sub Berichtskopf_Format(Cancel As Integer, FormatCount As Integer)
Dim rpt As Report
Dim strText As String
Set rpt = Me
strText = "Kopie"
With rpt
.ScaleMode = 3
.FontName = "Courier"
.FontSize = 12
.FontBold = True
.ForeColor = RGB(256, 0, 0)
.CurrentX = [Link] / 2
End With
[Link] strText
End Sub
Listing 408: Ein zustzliches Label einfgen Variante 1
Listing 407: Bericht exportieren (Forts.)
Sandini Bib
Berichte formatieren 503
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Makro aus Listing 408 wurde die Eigenschaft RGB verwendet, um die Schriftfarbe eines
Labels zu bestimmen. Alternativ gibt es eine weitere Funktion, um Farben zu erzeugen. Diese
Funktion heit QBColor. ber diese Funktion knnen 15 Standardfarben abgerufen werden,
die Sie in der Tabelle 130 sehen knnen.
Abbildung 256: Das zustzliche Label wurde eingefgt.
Eigenschaft Beschreibung
BackColor
Legt die Hintergrundfarbe fest.
FontBold
Formatiert die Schrift fett sowie die Rahmenfarbe fr
Rechtecke und Kreise.
FillColor
Stellt die Fllfarbe fr Rechtecke und Kreise dar.
FillStyle
Legt das Fllmuster fr Rechtecke und Kreise fest.
ForeColor
Legt die Farbe des Textes fest.
FontItalic
Formatiert die Schrift kursiv.
FontName
Legt den Namen der Schriftart fest.
FontSize
Legt die Schriftgre fest.
FontUnderline
Unterstreicht die einzelnen Zeichen.
Tabelle 129: Die wichtigsten Eigenschaften rund um die Formatierung von Berichten
Farbnummer Farbe
0 Schwarz
1 Blau
2 Grn
3 Cyan
4 Rot
5 Magenta
6 Gelb
7 Wei
Tabelle 130: Die Standardfarben ber die Funktion BQColor
Sandini Bib
504 Berichte und Datenzugriffsseiten
Im folgenden Beispiel aus Listing 408 wird das Beispiel aus Listing 409 ber den Einsatz der
Funktion QBColor gelst.
Beim nchsten Beispiel wird ein Bericht farblich etwas angepasst. Dabei soll jeweils eine Zeile
des Berichts mit der Farbe WEISS und die folgende Zeile mit der Farben GRN formatiert
werden. Dazu setzen Sie das Ereignis Format des Detailbereichs wie in Listing 410 ein.
8 Grau
9 Hellblau
10 Hellgrn
11 Hellcyan
12 Hellrot
13 Hellmagenta
14 Hellgelb
15 Leuchtendes Wei
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Klasse Report_Umstze nach Jahr
'=====================================================
Private Sub Berichtskopf_Format(Cancel As Integer, FormatCount As Integer)
Dim rpt As Report
Dim strText As String
Set rpt = Me
strText = "Kopie"
With rpt
.ScaleMode = 3
.FontName = "Courier"
.FontSize = 12
.FontBold = True
.ForeColor = QBColor(4)
.CurrentX = [Link] / 2
End With
[Link] strText
End Sub
Listing 409: Ein zustzliches Label einfgen Variante 2
Farbnummer Farbe
Tabelle 130: Die Standardfarben ber die Funktion BQColor (Forts.)
Sandini Bib
Berichte auflisten 505
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die statische Variable zu Beginn des Ereignisses wird jeweils um den Wert 1 erhht, wenn das
Ereignis ausgefhrt wird, also eine Formatierung vorgenommen wurde. Innerhalb der
Schleife wird ber die Funktion Mod geprft, ob die Division ein gerades bzw. ungerades
Ergebnis liefert. Je nach Ergebnis wird mithilfe der Eigenschaft BackColor der Hintergrund
des Berichts angesprochen. ber den Einsatz der Funktion RGB wird dann jeweils die
gewnschte Farbe festgelegt.
338 Berichte auflisten
Mit der Eigenschaft AllReports knnen Sie auf die AllReports-Auflistung und deren dazu-
gehrige Eigenschaften zugreifen.
Im folgenden Beispiel aus Listing 411 werden die Namen aller Berichte der Datenbank im
Direktfenster der Entwicklungsumgebung ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Klasse Report_Katalog Unterformular
'=====================================================
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
Static i As Integer
If i Mod 2 = 0 Then
[Link] = QBColor(2)
Else
[Link] = QBColor(7)
End If
End Sub
Listing 410: Bericht im Wechsel einfrben
Abbildung 257: Der etwas andere Look im Bericht
Sandini Bib
506 Berichte und Datenzugriffsseiten
Durchlaufen Sie mit einer Schleife alle in der Datenbank befindlichen Berichte, die im Auf-
listungsobjekt AllReports verzeichnet sind. In der Schleife geben Sie die Namen der einzelnen
Berichte mithilfe der Eigenschaft Name aus.
339 Berichtselemente identifizieren
Gehen Sie nun noch einen Schritt weiter und identifizieren Sie alle Elemente eines bestimm-
ten Berichts. Im Makro aus Listing 412 ffnen Sie den Bericht UMSTZE NACH KATEGORIE in
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlReport
'=====================================================
Sub AlleBerichteAuflisten()
Dim obj As AccessObject
Dim Dbs As Object
Set Dbs = [Link]
For Each obj In [Link]
[Link] [Link]
Next obj
End Sub
Listing 411: Alle Berichte auflisten
Abbildung 258: Die Berichte der aktuellen Datenbank wurden dokumentiert.
Sandini Bib
Berichtselemente identifizieren 507
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
der Entwurfsansicht, lesen danach alle verwendeten Steuerelemente aus und geben diese im
Direktbereich aus. Schlieen Sie danach den Bericht mithilfe der Methode Close.
Geben Sie in der Objektvariablen vom Typ Report den Namen Ihres Berichts ein, den Sie
nher unter die Lupe nehmen mchten. Setzen Sie danach eine Schleife auf, die die einzelnen
Elemente nacheinander ber die Eigenschaft Name ermittelt und ber die Anweisung
[Link] im Direktfenster von Access ausgibt.
Mithilfe der ControlType-Eigenschaft in Visual Basic knnen Sie den Typ eines Steuerele-
ments in einem Formular oder einem Bericht bestimmen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlReport
'=====================================================
Sub AlleElementeVonBerichtAuflisten()
Dim obj As Object
Dim Bericht As Report
[Link] "Umstze nach Kategorie", acViewDesign
Set Bericht = Reports("Umstze nach Kategorie")
For Each obj In Bericht
[Link] [Link]
Next obj
[Link]
End Sub
Listing 412: Alle Berichtselemente auflisten
Abbildung 259: Die Berichtselemente wurden aufgelistet.
Sandini Bib
508 Berichte und Datenzugriffsseiten
Die Typen der einzelnen Steuerelemente knnen Sie aber auch ber Konstanten ermitteln.
Sehen Sie sich dazu die folgende Tabelle an.
Im folgenden Beispiel aus Listing 413 werden die Steuerelemente des Berichts UMSTZE
NACH KATEGORIE identifiziert.
Konstante Steuerelement
acBoundObjectFrame
Gebundenes Objektfeld
acCheckBox
Kontrollkstchen
acComboBox
Kombinationsfeld
acCommandButton
Befehlsschaltflche
acCustomControl
ActiveX-Steuerelement
acImage
Bild
acLabel
Bezeichnungsfeld
acLine
Linie
acListBox
Listenfeld
acObjectFrame
Ungebundenes Objektfeld oder Diagramm
acOptionButton
Optionsschaltflche
acOptionGroup
Optionsgruppe
acPage
Seitenwechsel
acPageBreak
Seitenumbruch
acRectangle
Rechteck
acSubform
Unterformular/-bericht
acTabCtl
Registersteuerelement
acTextBox
Textfeld
acToggleButton
Umschaltflche
Tabelle 131: Die Steuerelementskonstanten der Eigenschaft ControlType
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlReport
'=====================================================
Sub FormularSteuerelementNamen()
Dim obj As Object
Dim strE As String
[Link] "Umstze nach Kategorie", acViewDesign
Set Bericht = Reports("Umstze nach Kategorie")
Listing 413: Berichtselemente identifizieren
Sandini Bib
Berichtselemente identifizieren 509
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Sammeln Sie in einer Select Case-Anweisung die verschiedenen Indizes der Steuerelemente
und weisen Sie ber die Variable strE einen Text zu. Diesen geben Sie dann im Direktbereich
aus.
For Each obj In [Link]
Select Case [Link]
Case 100
strE = "Beschriftung"
Case 101
strE = "Rechteck"
Case 102
strE = "Linie"
Case 103
strE = "Bild"
Case 104
strE = "Schaltflche"
Case 105
strE = "Optionsschaltflche"
Case 106
strE = "Kontrollkstchen"
Case 107
strE = "Gruppenfeld"
Case 109
strE = "Textfeld"
Case 110
strE = "Listenfeld"
Case 111
strE = "Kombinationsfeld"
Case 112
strE = "Unterbericht"
Case 114
strE = "OLE-Objekt - ungebunden"
Case 118
strE = "Seitenumbruch"
Case 122
strE = "Umschaltflche"
Case 123
strE = "Registersteuerelement"
Case Else
strE = ""
End Select
[Link] "Typ: " & [Link] & _
"=" & strE & vbLf & "Name: " & [Link] & vbLf
Next obj
[Link]
End Sub
Listing 413: Berichtselemente identifizieren (Forts.)
Sandini Bib
510 Berichte und Datenzugriffsseiten
340 Berichtsteil ein- und ausblenden
ber den Einsatz der Eigenschaft Visible knnen Sie einzelne Teile eines Berichts bzw. auch
Steuerelemente ein- und ausblenden, indem Sie diese Eigenschaft auf den Wert True bzw.
False setzen.
Wie kann man nun einen bestimmten Teil eines Berichts ausblenden?
Ein Bericht ist standardmig in verschiedene Sektionen unterteilt. Mithilfe der Eigenschaft
Section knnen Sie daher ganz gezielt bestimmte Teile des Berichts ansprechen. Die Berichts-
teile knnen entweder ber einen Index oder ber eine Konstante angesprochen werden.
Entnehmen Sie aus der folgenden Tabelle die dabei mglichen Werte.
Abbildung 260: Die einzelnen Berichtselemente wurden identifiziert.
Index Konstante Beschreibung
0 acDetail
Detailbereich
1 acHeader
Berichtskopf
2 acFooter
Berichtsfu
3 acPageHeader
Seitenkopfbereich
4 acPageFooter
Seitenfubereich
5 acGroupLevel1Header
Kopfbereich der Gruppenebene 1
6 acGroupLevel1Footer
Fubereich der Gruppenebene 1
7 acGroupLevel2Header
Kopfbereich der Gruppenebene 2
8 acGroupLevel2Footer
Fubereich der Gruppenebene 2
Tabelle 132: Die Berichtssegmente
Sandini Bib
Eigene Berichte erstellen 511
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Das folgende Beispiel aus Listing 414 blendet beispielsweise den Detailbereich beim ffnen
des Formulars aus. Dabei soll nur die Struktur eines Berichts, ohne Daten, angezeigt werden.
Das Ereignis Report_Open tritt automatisch dann ein, wenn der Bericht geffnet wird. Dies ist
der ideale Zeitpunkt, um einzelne Sektionen ein- bzw. auszublenden. Eine Sektion knnen
Sie ausblenden, indem Sie die Eigenschaft Visible auf den Wert False setzen.
341 Eigene Berichte erstellen
Um einen Bericht mithilfe von VBA anzulegen, setzen Sie die Methode CreateReport ein. Die
Syntax dieser Methode lautet:
[Link](Datenbank, Berichtsvorlage)
Im folgenden Beispiel aus Listing 415 wird ein leerer Bericht auf Basis der Tabelle KATEGO-
RIEN erzeugt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Klassen Report_Alphabetische Artikelliste
'=====================================================
Private Sub Report_Open(Cancel As Integer)
[Link](acDetail).Visible = False
End Sub
Listing 414: Bestimmten Teil des Berichts ausblenden
Argument Beschreibung
Ausdruck Erforderlich. Gibt ein Application-Objekt zurck.
Datenbank Optional. Gibt an, aus welcher Datenbank die Berichtsvorlage fr
den neuen Bericht verwendet werden soll. Lassen Sie dieses Argu-
ment komplett weg, wenn Sie einen leeren Bericht ohne Vorlage
erstellen mchten.
Berichtsvorlage Optional. Enthlt den Namen des Berichts, auf dessen Basis Sie den
neuen Bericht erstellen mchten. Wenn Sie dieses Argument weg-
lassen, legt Microsoft Access dem neuen Bericht die Vorlage
zugrunde, die im Dialogfeld OPTIONEN auf der Registerkarte
FORMULARE/BERICHTE angegeben ist.
Tabelle 133: Die Argumente der Methode CreateReport
Sandini Bib
512 Berichte und Datenzugriffsseiten
Definieren Sie im ersten Schritt eine Objektvariable vom Typ Report. Damit haben Sie
Zugriff auf alle berichtsbezogenen Methoden und Eigenschaften. Um einen neuen Bericht
anzulegen, setzen Sie die Methode CreateReport ein. Mithilfe der Eigenschaft RecordSource
geben Sie die Tabelle an, auf die sich der Bericht beziehen soll.
Die Eigenschaft Name gibt den Namen des Berichts aus, den Sie verwenden, um den Bericht zu
speichern. Schlieen Sie den noch geffneten Bericht mithilfe der Methode Close.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlReport
'=====================================================
Sub NeuenBerichtEinfgen()
Dim Bericht As Report
Dim strName As String
Set Bericht = CreateReport
[Link] = "Kategorien"
strName = [Link]
[Link] acReport, strName, acSaveYes
End Sub
Listing 415: Einen neuen Bericht erzeugen
Abbildung 261: Einen neuen, noch leeren Bericht erzeugen
Sandini Bib
Berichtselemente einfgen 513
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
342 Berichtselemente einfgen
ber die Methode CreateReportControl knnen Sie Steuerelemente in einen Bericht einf-
gen. Die Syntax dieser Methode lautet:
CreateReportControl(Berichtsname, Steuerelementtyp, Bereich, bergeordnet,
Spaltenname, Links, Oben, Breite, Hhe)
Argument Beschreibung
Berichtsname Erforderlich. Gibt den Namen des Berichts an, in den Sie
die Steuerelemente einfgen mchten.
Steuerelementtyp Erforderlich. Bestimmt die Art des Steuerelements.
acBoundObjectFrame: gebundenes Objektfeld
acCheckBox: Kontrollkstchen
acComboBox: Kombinationsfeldliste
acCommandButton: Befehlsschaltflche
acCustomControl: Zusatzsteuerelement
acImage: Bild
acLabel: Bezeichnungsfeld
acLine: Linie
acListBox: Listenfeld
acObjectFrame: ungebundenes Objektfeld
acOptionButton: Optionsschaltflche
acOptionGroup: Gruppenfeld
acPage: Seitenwechsel
acPageBreak: Seitenumbruch
acRectangle: Rechteck
acSubform: Unterbericht
acTabCtl: Registersteuerelement
acTextBox: Textfeld
acToggleButton: Umschaltflche
Tabelle 134: Die Argumente der Methode CreateReportControl
Sandini Bib
514 Berichte und Datenzugriffsseiten
Im folgenden Beispiel aus Listing 416 wird ein neuer Bericht auf Basis der Tabelle Kategorien
erstellt und mit einem Text sowie einem Bezeichnungsfeld angelegt.
Bereich
Optional. Gibt an, wo das Steuerelement genau eingefgt
werden soll. Auch hierfr gibt es vorgefertigte Konstanten:
acDetail: Bei dieser Standardeinstellung wird das Steuer-
element im Detailbereich des Berichts eingefgt.
acFooter: Das Steuerelement wird im Berichtsfu einge-
fgt.
acGroupLevel1Footer: Gruppenfu 1
acGroupLevel1Header: Gruppenkopf 1
acGroupLevel2Footer: Gruppenfu 2
acGroupLevel2Header: Gruppenkopf 2
acHeader: Berichtskopf
acPageFooter: Seitenfu
acPageHeader: Seitenkopf
bergeordnet
Optional. Gibt den Namen des bergeordneten Steuerele-
ments eines zugeordneten Steuerelements an. Bei Steuer-
elementen ohne bergeordnetes Steuerelement verwenden
Sie eine leere Zeichenfolge fr dieses Argument oder lassen
es weg.
Spaltennamen
Optional. Gibt den Feldnamen des verknpften Felds der
Tabelle an, sofern es sich um ein gebundenes Steuerele-
ment handelt. Mchten Sie keine Verknpfung zu einem
Tabellenfeld herstellen, dann geben Sie dieses Argument
nicht an.
Links, Oben, Breite und Hhe Optional. Damit knnen Sie die genaue Position sowie des-
sen Abmessung einstellen. Die Einheit fr diese Positionie-
rung wird in Twips ausgegeben. Dabei entsprechen 567
Twips einem Zentimeter.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlReport
'=====================================================
Sub BerichtselementeEinfgen()
Dim Bericht As Report
Dim ctrlBez As Control
Dim ctrlText As Control
Listing 416: Einen Bericht mit Feldern fllen
Argument Beschreibung
Tabelle 134: Die Argumente der Methode CreateReportControl (Forts.)
Sandini Bib
Berichtselemente einfgen 515
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mchten Sie einen Bericht noch schneller und komfortabler erstellen, dann knnen Sie dies
auch ber den Einsatz von ADO machen. Im folgenden Beispiel aus Listing 417 wird ein
Bericht auf Basis der Tabelle Kunden erstellt und alle dazu bentigten Steuerelemente werden
automatisch in den Bericht eingefgt und verknpft.
Set Bericht = CreateReport
[Link] = "Kategorien"
Set ctrlText = CreateReportControl([Link], acTextBox, _
acDetail, "", "Kategoriename", 1500, 50, 1200, 200)
Set ctrlBez = CreateReportControl _
([Link], acLabel, , [Link], "Kategoriename", 150, 50, 800, 200)
[Link] acReport, [Link], acSaveYes
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlReport
'=====================================================
Sub BerichtErstellen()
Dim Conn As New [Link]
Dim Dbs As [Link]
Dim Datenfeld As [Link]
Dim ctrlTextfeld As Control
Dim ctrlBezfeld As Control
Dim lngPosOben As Long
Dim lngPosLinks As Long
Set Bericht = CreateReport
lngPosLinks = 0
lngPosOben = 0
[Link] = "Kunden"
Set Conn = [Link]
Set Dbs = New [Link]
[Link] "SELECT * FROM Kunden where (Land = 'Deutschland')", _
Conn, adOpenKeyset, adLockOptimistic
For Each Datenfeld In [Link]
Set ctrlTextfeld = CreateReportControl([Link], acTextBox, _
acDetail, , [Link], lngPosLinks + 1500, lngPosOben)
[Link]
Set ctrlBezfeld = CreateReportControl([Link], acLabel, _
acDetail, [Link], [Link], _
lngPosLinks, lngPosOben, 1400, [Link])
[Link]
Listing 417: Die vollautomatische Berichtserstellung
Listing 416: Einen Bericht mit Feldern fllen (Forts.)
Sandini Bib
516 Berichte und Datenzugriffsseiten
Erstellen Sie im ersten Schritt ber die Methode CreateReport einen neuen, noch leeren
Bericht. Legen Sie danach die Koordinaten fr das erste Bezeichnungsfeld durch die Variab-
len lngPosOben und lngPosLinks fest. Diese Festlegung der Positionen fhren Sie ganz bewusst
ber Variablen schon am Beginn des Makros durch, damit Sie spter diese nur hoch addieren
mssen, um zur jeweils nchsten Einfgeposition zu gelangen.
Mithilfe der Eigenschaft RecordSource geben Sie bekannt, dass der Bericht auf die Tabelle
Kunden zugreifen soll. Stellen Sie danach die Verbindung zur Datenquelle her und erstellen Sie
ein neues Recordset-Objekt.
Fhren Sie nach dem ffnen der Tabelle Kunden eine SQL-Abfrage durch, die alle Kunden aus
Deutschland im Recordset-Objekt DBS speichert. ber das Auflistungsobjekt Fields knnen
Sie nun alle Datenfelder in einer Schleife abarbeiten. Fr jedes Datenfeld wird sowohl ein
Textfeld als auch ein Bezeichnungsfeld angelegt. Das Bezeichnungsfeld erhlt dabei automa-
tisch die Beschriftung des Datenfelds.
Mithilfe der Methode SizeTofit knnen Sie einen weiteren Automatismus ntzen. Diese
Eigenschaft passt das angegebene Steuerelement automatisch an den Text an, den das Steuer-
element zugewiesen bekommt.
Damit die Einfgeposition der neuen Steuerelemente am Ende der Schleife verschoben wird,
addieren Sie zur Variablen lngPosOben den Wert 1500. Beim nchsten Schleifendurchlauf
wird dadurch die neue Einfgeposition festgelegt.
343 Datenzugriffsseiten
Die Datenzugriffsseiten erstellen Sie wie ganz normale Formulare, die Sie ber den Assisten-
ten erzeugen.
Befolgen Sie nun die nchsten Arbeitsschritte, um eine Datenzugriffsseite zu erstellen.
1. Klicken Sie in der Datenbankleiste auf den Eintrag Seiten.
2. Fhren Sie danach einen Doppelklick auf den Befehl ERSTELLT EINE DATENZUGRIFFSSEITE
UNTER VERWENDUNG DES ASSISTENTEN aus.
3. Whlen Sie im Drop-down-Feld TABELLEN/ABFRAGEN die Quelle fr Ihr Online-Formu-
lar aus.
lngPosOben = lngPosOben + [Link] + 50
Next Datenfeld
[Link]
Set Dbs = Nothing
End Sub
Listing 417: Die vollautomatische Berichtserstellung (Forts.)
Sandini Bib
Datenzugriffsseiten 517
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
4. Entscheiden Sie sich fr die Felder, die in der Datenzugriffsseite angezeigt werden sollen.
bertragen Sie die gewnschten Felder vom linken in das rechte Listenfeld, indem Sie die
Schaltflchen einsetzen.
5. Klicken Sie danach auf die Schaltflche WEITER.
6. Whlen Sie bei Bedarf eine Gruppierungsebene aus. Betrachten Sie die Auswirkung der
Gruppierung im Vorschaufenster.
7. Klicken Sie auf die Schaltflche WEITER, um zum nchsten Schritt des Assistenten zu
gelangen.
8. Bestimmen Sie die Sortierreihenfolge der Datenzugriffsseite, indem Sie das gewnschte
Sortierfeld aus den Drop-down-Listen auswhlen und mithilfe der Umschaltflche AUF-
STEIGEND bzw. ABSTEIGEND die Sortierung festlegen.
9. Klicken Sie auf WEITER.
10. Geben Sie der Zugriffsseite einen Namen.
11. Aktivieren Sie die Option SEITE FFNEN, damit das Resultat sofort angezeigt wird.
12. Klicken Sie auf die Schaltflche FERTIG STELLEN, um die Datenzugriffsseite zu erzeugen.
Abbildung 262: Der Bericht wurde angelegt.
Sandini Bib
518 Berichte und Datenzugriffsseiten
Die Datenzugriffsseite wird standardmig als HTML-Datei im selben Verzeichnis gespei-
chert wie die aktuelle Datenbank.
Das Erstellen einer Datenzugriffsseite kann auch ber das Makro aus Listing 418 erledigt
werden.
Abbildung 263: Datenzugriffsseite erstellen
Abbildung 264: Die fertige Datenzugriffsseite
Sandini Bib
Datenzugriffsseiten 519
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Methode CreateDataAccessPage erstellen Sie eine Datenzugriffsseite. Mit der
Methode ApplyTheme knnen Sie das Microsoft Office-Design fr eine angegebene Daten-
zugriffsseite festlegen. Dazu mssen Sie die standardmig angebotenen Designs natrlich
kennen. Ein paar davon knnen Sie der folgenden Tabelle entnehmen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDap
'=====================================================
Sub DatenzugriffsseiteErzeugen()
Dim dapSeite As DataAccessPage
Set dapSeite = [Link]("Artikelbestand", True)
[Link] "citrus"
[Link] acDataAccessPage, [Link], acSaveYes
End Sub
Listing 418: Datenzugriffsseite erstellen
Design Beschreibung
artsy
Ein Design mit einem leichten schwarzen Hintergrund.
blank
Dieses Design hat einen leeren Hintergrund.
blends
Bei diesem Design wird am linken Rand ein blulicher Balken angezeigt.
BluePrnt
Dieses Design beinhaltet einen weien Hintergrund und kleine hellblaue
Quadrate.
BoldStri
Bei diesem Design ist die Datenzugriffsseite vertikal liniert.
CapSules
Dieses Design gibt die Datenzugriffsseite mit weiem Hintergrund und form-
schnen grnlichen Elementen aus.
Citrus
Bei diesem Design wird ein frhlingshaftes Muster verwendet.
expeditn
Dieses Design gibt die Datenzugriffsseite in einem sandfarbenen Muster aus.
indust
Dieses Design belegt die Datenzugriffsseite mit einem gleichmigen grauen
Muster auf weiem Hintergrund.
ricepapr
Dieses Design weist der Datenzugriffsseite eine reisfrmige Musterung auf
olivgrnem Hintergrund zu.
rmnsque
Bei diesem Design wird der Datenzugriffsseite ein gepunktetes Muster auf hell-
grauem Hintergrund zugewiesen.
strtedge
Dieses Design erzeugt eine ganz feine horizontale Linierung auf weiem
Grund.
sumipntg
Bei diesem Design wird ein marmorhnlicher Effekt auf der Datenzugriffsseite
erzeugt.
Tabelle 135: Mgliche Designkonstanten fr Datenzugriffsseiten
Sandini Bib
520 Berichte und Datenzugriffsseiten
344 Datenzugriffsseiten auslesen
Um zu ermitteln, welche Datenzugriffsseiten in Ihrer aktuellen Datenbank vorhanden sind,
knnen Sie das Makro aus Listing 419 einsetzen.
ber das Objekt CurrentProject kommen Sie an alle Access-Objekte der aktuellen Daten-
bank heran. So haben Sie auch Zugriff auf das Auflistungsobjekt AllDataAccessPages, in dem
alle Datenzugriffsseiten der aktuellen Datenbank verzeichnet sind. Diese geben Sie ber die
Anweisung [Link] im Direktfenster der Entwicklungsumgebung aus.
345 Speicherort der Datenzugriffsseiten ermitteln
Um herauszufinden, wo genau sich die Datenzugriffsseiten auf Ihrer Festplatte befinden,
knnen Sie das Makro aus Listing 420 einsetzen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDap
'=====================================================
Sub DatenzugriffsseitenAusgeben()
Dim dap As AccessObject
Set Conn = [Link]
For Each dap In [Link]
[Link] [Link]
Next dap
End Sub
Listing 419: Alle Datenzugriffsseiten dokumentieren
Abbildung 265: Alle Datenzugriffsseiten wurden ermittelt.
Sandini Bib
Datenzugriffsseiten anzeigen 521
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mit der Eigenschaft FullName knnen Sie den vollstndigen Pfad (einschlielich des Datei-
namens) der Datenzugriffsseite ermitteln.
346 Datenzugriffsseiten anzeigen
Um eine Datenzugriffsseite anzuzeigen knnen Sie die Methode OpenDataAccessPage einset-
zen. Diese Methode hat folgende Syntax:
OpenDataAccessPage(DatenzugriffsseitenName, Ansicht)
Im Argument DatenzugriffsseitenName geben Sie den Namen der Seite an, die Sie ffnen
mchten.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDap
'=====================================================
Sub DatenzugriffsseitenQuellenAusgeben()
Dim dap As AccessObject
Set Conn = [Link]
For Each dap In [Link]
[Link] "Die Datenzugriffsseite:'" & _
[Link] & vbLf & "' ist gespeichert unter: " & _
vbLf & [Link] & vbLf
Next dap
End Sub
Listing 420: Die Speicherorte von Datenzugriffsseiten finden
Abbildung 266: Die Speicherpfade der Datenzugriffsseiten werden ausgelesen.
Sandini Bib
522 Berichte und Datenzugriffsseiten
Im Argument Ansicht knnen Sie mithilfe einer Konstanten entscheiden, wie Sie diese
Datenzugriffsseite ffnen mchten. Es stehen dabei folgende Konstanten zur Verfgung:
acDataAccessPageBrowse: Bei dieser Standardeinstellung wird die Datenzugriffsseite in der
Seitenansicht von Access geffnet.
acDataAccessPageDesign: Die Datenzugriffsseite wird in der Entwurfsansicht geffnet.
Im folgenden Beispiel aus Listing 421 wird die Datenzugriffsseite ARTIKEL geffnet.
347 Datenzugriffsseite anpassen
ber VBA-Makros knnen Sie jederzeit bestehende Datenzugriffsseiten anpassen und wieder
speichern. Im folgenden Makro aus Listing 422 wird eine Datenzugriffsseite geffnet, ein
bestimmtes Steuerelement angesprungen und verndert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDap
'=====================================================
Sub Datenzugriffsseiteffnen()
[Link] "Artikel", acDataAccessPageBrowse
End Sub
Listing 421: Datenzugriffsseite ffnen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap07
' Dateiname [Link]
' Modul mdlDap
'=====================================================
Sub DatenzugriffsseiteffnenUndndern()
Const Dap = "Alphabetische Artikelliste"
With DoCmd
.Echo False
.OpenDataAccessPage Dap, acDataAccessPageDesign
With DataAccessPages(Dap)
.ApplyTheme "expeditn"
.[Link]("Bezeichnungsfeld0").InnerText = _
"Heute ist " & Format(Date, "[Link]")
End With
.Close acDataAccessPage, Dap, acSaveYes
.OpenDataAccessPage Dap, acDataAccessPageBrowse
Listing 422: Datenzugriffsseite anpassen
Sandini Bib
Datenzugriffsseite anpassen 523
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Beim Ausfhren eines Makros in Microsoft Access werden durch Bildschirmaktualisierungen
oft Informationen angezeigt, die fr die Funktionalitt des Makros ohne Bedeutung sind.
Wenn Sie das Argument Echo auf den Wert False setzen, wird das Makro ohne Bildschirmak-
tualisierung ausgefhrt. Beim Beenden des Makros schaltet Microsoft Access automatisch
Echo wieder ein und aktualisiert das Fenster.
ffnen Sie die Datenzugriffsseite im Entwurfsmodus mithilfe der Methode OpenDataAcces-
sPage, indem Sie die Konstante acDataAcessPageDesign einsetzen. Fhren Sie danach die
Methode ApplyTheme aus, um der Datenzugriffsseite ein neues Design zuzuweisen. Danach
greifen Sie auf das Bezeichnungsfeld zu und legen ber die Eigenschaft InnerText den Text
des Felds fest. Dabei geben Sie das aktuelle Datum aus. Schlieen Sie die Datenzugriffsseite
und speichern Sie dabei die nderungen, indem Sie der Methode Close den Namen der Seite
sowie die Konstante acSaveYes bergeben. ffnen Sie danach gleich im Anschluss die Daten-
zugriffsseite in der Seitenansicht.
.Echo True
End With
End Sub
Listing 422: Datenzugriffsseite anpassen (Forts.)
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Ereignisprogrammierung
In Access gibt es jede Menge Ereignisse, die Sie fr die Programmierung einsetzen knnen.
Diesen Ereignissen lassen sich dann zustzliche Befehle zuweisen. So knnen Sie beispiels-
weise beim Starten eines Formulars weitere Aktionen wie die Vorbelegung bestimmter Felder
vornehmen, die im Dialog angeboten werden sollen.
In diesem Kapitel knnen Sie die wichtigsten Ereignisse nachschlagen.
348 Zugangsverwaltung in Access (Formular)
Das Ereignis Open tritt dann ein, wenn Sie ein Formular oder einen Bericht aufrufen. Damit
ist genau der Zeitpunkt gemeint, bevor der erste Datensatz angezeigt wird. Dieses Ereignis
knnen Sie einsetzen, um Initialisierungsarbeiten im Formular/Bericht bzw. Vorbelegungen
einiger Steuerelemente vorzunehmen.
Im folgenden Beispiel richten Sie ber das Ereignis Open eine Art Zugangsschutz fr ein For-
mular ein. Dabei knnen Sie beim ffnen eines Formulars ber eine API-Funktion den
Namen des Anwenders abfragen und in Abhngigkeit davon entweder den Zugang zulassen
oder das Formular wieder schlieen. Um diese Aufgabe umzusetzen, legen Sie ein neues
Makro auf Modulebene an, das Sie in Listing 423 sehen knnen.
Stellen Sie jetzt das Ereignis Open im Formular Personal ein, indem Sie folgende Arbeits-
schritte befolgen:
1. Gehen Sie in die Entwurfsansicht des Formulars, in dem Sie das Ereignis einstellen mch-
ten.
2. Klicken Sie mit der rechten Maustaste auf eine freie Stelle des Formulars und whlen Sie
den Befehl EIGENSCHAFTEN aus dem Kontextmen.
3. Wechseln Sie auf die Registerkarte EREIGNIS.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Modul mdlAPI
'=====================================================
Declare Function GetUserName Lib "[Link]" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Listing 423: Den Anwendernamen auslesen
Sandini Bib
526 Die Ereignisprogrammierung
4. Whlen Sie aus dem Drop-down-Men den Befehl FORMULAR.
5. Setzen Sie den Mauszeiger in die Zeile BEIM FFNEN und klicken Sie auf das Symbol mit
den drei Punkten ganz rechts in der Zeile.
6. Im Dialogfeld GENERATOR AUSWHLEN whlen Sie den Eintrag CODE-GENERATOR und
besttigen mit OK.
7. Erfassen Sie dann das folgende Ereignismakro aus Listing 424.
Abbildung 267: Ein Ereignis einstellen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Personal
'=====================================================
Private Sub Form_Open(Cancel As Integer)
Dim strID As String
Dim lngSize As Long
Dim lngAns As Long
lngSize = 8
strID = " "
lngAns = GetUserName(strID, lngSize)
strID = Trim(strID)
If strID = "Held" Or strID = "admin" Then
Listing 424: Die Benutzerverwaltung ber ein Ereignismakro einstellen
Sandini Bib
Zugangsverwaltung in Access (Bericht) 527
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die API-Funktion GetUser knnen Sie den angemeldeten Benutzer ermitteln. In einer
anschlieenden Abfrage stellen Sie fest, ob der berechtigte Anwender Held bzw. admin ver-
sucht, das Formular Personal zu ffnen. Wenn es sich dabei um einen anderen Anwender
handelt, dann darf nur das erste Registerblatt des Formulars angezeigt werden. Das erste
Registerblatt wird ber die Nummer 0, das zweite durch die Nummer 1 reprsentiert. Blen-
den Sie daher das zweite Registerblatt aus, indem Sie die Eigenschaft Visible auf den Wert
False setzen.
349 Zugangsverwaltung in Access (Bericht)
Auch fr einen Bericht knnen Sie das Ereignis Open einsetzen. Dabei wird im folgenden Bei-
spiel aus Listing 425 das Ereignis Report_Open im Bericht5 eingestellt und dabei geprft, ob
der Anwender den Bericht berhaupt anzeigen darf. Die berprfung des Anwenders wird
in diesem Beispiel alternativ zur letzten Aufgabe nicht ber eine API-Funktion GetUserName,
sondern ber die Funktion Environ berprft.
[Link](1).Visible = True
Else
[Link](1).Visible = False
End If
End Sub
Abbildung 268: Als zugelassener Anwender drfen Sie beide Registerbltter einsehen.
Listing 424: Die Benutzerverwaltung ber ein Ereignismakro einstellen (Forts.)
Sandini Bib
528 Die Ereignisprogrammierung
ber eine Select Case-Anweisung berprfen Sie mittels der Funktion Environ, der Sie als
Konstante Username bergeben, welcher Anwender gerade versucht, den Bericht zu ffnen.
Im Beispiel wird das ffnen des Berichts nur den drei genannten Personen gestattet. Allen
anderen wird der Zugang zum Bericht verweigert, indem das Argument Cancel auf den Wert
True gesetzt wird. Damit wird das Ereignis automatisch abgebrochen, noch bevor es zum
Einsatz kommt.
350 Bestimmtes Feld fokussieren
Im folgenden Beispiel setzen Sie das Ereignis Open ein, um nach dem Anzeigen eines Formu-
lars den Mauszeiger in ein bestimmtes Datenfeld zu setzen. So setzen Sie im Listing 426 den
Mauszeiger im Formular LIEFERANTEN nach dem ffnen in das Feld TELEFON.
Mithilfe des Schlsselworts Me haben Sie Zugriff auf alle Steuerelemente des aktiven Formu-
lars. So knnen Sie auch das Steuerelement TELEFON ansprechen und ber die Methode
SetFocus den Mauszeiger in das Feld hineinsetzen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Report_Bericht5
'=====================================================
Private Sub Report_Open(Cancel As Integer)
Select Case Environ("Username")
Case "Held", "Mueller", "Schmitt"
'Zugriff erlaubt
Case Else
'Zugriff verweigert
MsgBox "Keine Berechtigung diesen Bericht auszufhren!"
Cancel = True
End Select
End Sub
Listing 425: Zugangsberechtigung bei Berichten prfen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Lieferanten
'=====================================================
Private Sub Form_Open(Cancel As Integer)
[Link]
End Sub
Listing 426: Den Fokus in ein bestimmtes Feld setzen
Sandini Bib
Sicherheitscheck durchfhren 529
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
351 Sicherheitscheck durchfhren
Haben Sie ein Formular (Artikel3) mit einer Tabelle (Artikel3) verknpft und mchten Sie
beim ffnen prfen, ob sich berhaupt Datenstze in der verknpften Tabelle befinden, set-
zen Sie das Makro aus Listing 427 fr das Formular Artikel3 ein.
Abbildung 269: Der Fokus befindet sich nach dem ffnen des Formulars im Feld Telefon.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel3
'=====================================================
Private Sub Form_Open(Cancel As Integer)
Dim conn As Database
Dim dbs As Recordset
Set conn = CurrentDb
Set dbs = [Link]("Artikel3", dbOpenDynaset)
If [Link] = 0 Then
MsgBox "Es sind keine Daten in der Tabelle " & [Link]
Cancel = True
End If
[Link]
Set conn = Nothing
End Sub
Listing 427: Vor dem ffnen prfen, ob Daten bereitstehen
Sandini Bib
530 Die Ereignisprogrammierung
Mithilfe der Methode CurrentDB ermitteln Sie den Namen der momentan geffneten Daten-
bank. ffnen Sie danach die verknpfte Tabelle und berprfen Sie, ob in der Tabelle ber-
haupt Datenstze vorhanden sind. Ist dies der Fall, meldet die Eigenschaft RecordCount einen
Wert > 0. In diesem Fall knnen Sie das Ereignis weiter fortfhren. Im anderen Fall geben Sie
eine Meldung auf dem Bildschirm aus und setzen das Argument Cancel auf den Wert False,
um den ffnen-Vorgang des Formulars abzubrechen.
352 Alle beteiligten Elemente schlieen
Sicherheitshalber knnen Sie beim Schlieen eines Formulars eventuell geffnete Tabellen
und Formulare automatisch schlieen, indem Sie das Ereignis Form_Close einsetzen. Das fol-
gende Beispiel aus Listing 428 schliet nach dem Beenden des Formulars Lieferanten die
Formulare Artikel und Artikelliste, sofern diese noch geffnet sind.
Mithilfe der Eigenschaft IsLoaded (ursprnglich aus der Microsoft-Beispieldatenbank Nord-
[Link]) knnen Sie berprfen, ob ein bestimmtes Access-Objekt noch geffnet ist.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Modul Dienstprogramme
'=====================================================
Function IsLoaded(ByVal strFormName As String) As Boolean
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, _
acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Function
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Lieferanten
'=====================================================
Private Sub Form_Close()
If IsLoaded("Artikelliste") Then [Link] acForm, "Artikelliste"
If IsLoaded("Artikel") Then [Link] acForm, "Artikel"
End Sub
Listing 428: Geffnete Tabellen werden mit geschlossen.
Sandini Bib
Nach fnf Sekunden automatisch schlieen 531
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Wenn ja, dann wird der Wert True gemeldet. In diesem Fall wenden Sie die Methode Close
an, um ein Formular zu schlieen.
353 Nach fnf Sekunden automatisch schlieen
Stellen Sie sich vor, Sie haben die Mglichkeit, mithilfe von Ereignissen einen schnen
Countdown zu programmieren. So programmieren Sie im nchsten Beispiel das Formular
Lieferanten so, dass es nach ca. fnf Sekunden automatisch das dazugehrige Formular
Artikel schliet.
Diesen Countdown stellen Sie ein, indem Sie beim Schlieen des Formulars Lieferanten
den Zeitznder scharf machen. Dabei geben Sie folgendes Ereignis aus Listing 429 ein.
Mit der Eigenschaft TimerInterval knnen Sie in Millisekunden die Lnge des Intervalls
angeben, das zwischen zwei Timer-Ereignissen eines Formulars liegen soll.
Stellen Sie nun auf der anderen Seite im Formular Artikel das Ereignis aus Listing 430 ein.
Setzen Sie die Eigenschaft TimerInterval auf den Wert 0. Rufen Sie danach als Test beide For-
mulare auf und beenden Sie dann das Formular Lieferanten. Gedulden Sie sich fnf Sekun-
den und sehen Sie dabei zu, wie auch das Formular Artikel automatisch geschlossen wird.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Lieferanten
'=====================================================
Sub Form_Close()
Form_Artikel.TimerInterval = 5000
End Sub
Listing 429: Den Schlie-Verzgerer setzen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Sub Form_Timer()
[Link] = 0
MsgBox "Zeit abgelaufen!"
[Link] acForm, "Artikel"
End Sub
Listing 430: Das Formular Artikel wird nach fnf Sekunden geschlossen.
Sandini Bib
532 Die Ereignisprogrammierung
354 Zugriff dokumentieren
In der folgenden Lsung wird der Zugriff auf den Bericht5 in der Tabelle Zugriffe festgehal-
ten. Dabei soll beim Schlieen des Berichts ein Datensatz in die Tabelle Zugriffe geschrieben
werden, aus dem hervorgeht, wer und wann jemand den Bericht verwendet hat. Legen Sie
dazu eine Datentabelle gem folgender Abbildung 270 an.
Stellen Sie jetzt das Ereignis Report_Close ein und ergnzen Sie den Ereignisrahmen wie in
Listing 431 angezeigt.
Abbildung 270: Die Tabelle fr die Zugriffsberwachung
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Report_Bericht5
'=====================================================
Private Sub Report_Close()
Dim Conn As New [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
With DBS
.Open "Zugriffe", Conn, adOpenKeyset, adLockOptimistic
Listing 431: Jeder Zugriff auf den Bericht wird festgehalten.
Sandini Bib
Listenfeld beim Laden des Formulars fllen 533
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ffnen Sie zuerst die Tabelle ber die Methode Open. ber die Methode AddNew wird ein
neuer, noch leerer Datensatz in die Tabelle geschrieben. Danach werden die Felder ber die
Auflistung Fields gefllt. ber den Einsatz der Methode Update wird der Datensatz gesichert.
Die Methode Close schliet die Tabelle wieder.
355 Listenfeld beim Laden des Formulars fllen
Das Ereignis Load tritt ein, wenn ein Formular geffnet und dessen Datenstze angezeigt wer-
den. Dabei wird dieses Ereignis in der zeitlichen Reihenfolge vor dem Ereignis Open abgewi-
ckelt. Wenn Sie auf Werte bestimmter Datenfelder reagieren mchten, die nach dem Ereignis
zur Verfgung stehen, dann ist dieses Ereignis das richtige.
Im folgenden Beispiel aus Listing 432 wird im Listenfeld aus ListboxFllen ein Listenfeld mit
den in der Datenbank enthaltenen Tabellen gefllt und der letzte Eintrag im Listenfeld mar-
kiert.
.AddNew
.Fields("ZugriffAm") = Now
.Fields("ZugriffVon") = Environ("Username")
.Update
.Close
End With
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 271: Alle Zugriffe werden im Hintergrund dokumentiert.
Listing 431: Jeder Zugriff auf den Bericht wird festgehalten. (Forts.)
Sandini Bib
534 Die Ereignisprogrammierung
Mithilfe der Eigenschaft ListCount ermitteln Sie die Anzahl der Eintrge im Listenfeld Liste0.
Da die Zhlung bei Null anfngt, also der erste Eintrag im Listenfeld den Index 0 hat, mssen
Sie vom letzten Eintrag des Listenfelds den Wert 1 subtrahieren. ber die Eigenschaft
Selected markieren Sie einen Eintrag im Listenfeld.
356 Schlieen verhindern
In der folgenden Lsung soll verhindert werden, dass ein Formular geschlossen werden kann.
Genauer gesagt, es soll eine Rckfrage angezeigt werden, ob das Formular geschlossen wer-
den soll oder nicht.
Im Beispiel aus Listing 433 wird beim Schlieen des Formulars Kunden2 nachgefragt, ob der
Vorgang wirklich durchgefhrt werden soll.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_ListboxFllem
'=====================================================
Private Sub Form_Load()
Dim Katalog As [Link]
Dim TabInfo As [Link]
Dim intZ As Integer
Set Katalog = New [Link]
[Link] = [Link]
For Each TabInfo In [Link]
With TabInfo
If [Link] = "TABLE" Then
Me![Link] .Name
End If
End With
Next
intZ = [Link]
[Link](intZ - 1) = True
Set Katalog = Nothing
End Sub
Listing 432: Listenfeld fllen und letzten Eintrag markieren
Sandini Bib
Schlieen verhindern 535
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Konstante vbYesNo definieren Sie, dass das Meldungsfenster mit den beiden Schalt-
flchen JA und NEIN angezeigt wird. Die Konstante vbQuestion sorgt dafr, dass ein zustzli-
ches Fragezeichensymbol im Fenster angezeigt wird. Fr den Fall, dass die Schaltflche JA
angeklickt wird, wird der Rckgabewert 6 geliefert. In diesem Fall setzen Sie das Argument
Cancel auf den Wert True, wenn der Anwender die Schaltflche NEIN anklickt. Das Formular
bleibt dann geffnet (siehe Abbildung 273).
Abbildung 272: Der letzte Eintrag im Listenfeld wurde markiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden2
'=====================================================
Private Sub Form_Unload(Cancel As Integer)
Dim strRck As String
strRck = MsgBox("Mchten Sie beenden?", vbYesNo + vbQuestion)
If strRck <> "" Then
If strRck = 6 Then
Cancel = False
Else
Cancel = True
End If
End If
End Sub
Listing 433: Abfrage beim Schlieen des Formulars anzeigen
Sandini Bib
536 Die Ereignisprogrammierung
357 Rechnungsflligkeiten berwachen
Gegeben ist eine Tabelle mit dem Namen Rechnungsliste aus der Abbildung 274 und ein For-
mular Rechnungsliste, ber das Sie Ihre Rechnungen erfassen und berwachen. Wenn Sie
durch das Formular blttern, dann wollen Sie auf Rechnungen, deren Flligkeitstermin
bereits berschritten ist, sofort aufmerksam gemacht werden (siehe Abbildung 274).
Abbildung 273: Beim Beenden der Form erscheint die Rckfrage.
Abbildung 274: Der Aufbau der Rechnungsliste
Sandini Bib
Rechnungsflligkeiten berwachen 537
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Erstellen Sie im nchsten Schritt ein Formular auf Basis der Tabelle Rechnungsliste. Nutzen
Sie den Formular-Assistenten, um auf schnellstem Wege ein dazugehriges Formular zu
erzeugen. Hinterlegen Sie danach das Ereignismakro Form_Current aus Listing 434, das auto-
matisch beim Blttern durch das Formular ausgelst wird.
berprfen Sie, ob im Feld Flligkeit ein Datum steht, das kleiner bzw. gleich dem heutigen
Datum ist. Ist dies der Fall, dann setzen Sie die Eigenschaft ForeColor ein, um die Schriftfarbe
des Felds zu formatieren. Die gewnschte Farbe mischen Sie ber die Funktion RGB. ber die
Eigenschaft FontBold weisen Sie der Schriftart die Formatierung FETT zu, indem Sie diese mit
dem Wert True versehen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Rechnungsliste
'=====================================================
Private Sub Form_Current()
If [Link] <= Date Then
[Link] = RGB(255, 0, 0)
[Link] = True
Else
[Link] = RGB(0, 0, 0)
[Link] = True
End If
End Sub
Listing 434: Rechnungsflligkeiten berwachen
Abbildung 275: Die Rechnungsflligkeit wurde berschritten.
Sandini Bib
538 Die Ereignisprogrammierung
358 Information beim letzten Satz
Das Ereignis Current tritt ein, wenn der Fokus auf einen Datensatz verschoben wird, der
somit zum aktuellen Datensatz wird. Es tritt auerdem ein, wenn das Formular aktualisiert
bzw. erneut abgefragt wird.
Im nchsten Beispiel aus Listing 435 soll eine Meldung im Formular Artikel ausgegeben wer-
den, wenn Sie durch die einzelnen Datenstze blttern und am letzten Satz angekommen sind.
Mit der Eigenschaft RecordsetClone stellen Sie eine Kopie der Abfrage oder Tabelle her, die
dem Formular zugrunde liegt und von der Einstellung der Eigenschaft RecordSource des For-
mulars festgelegt wird. Mit dieser Kopie knnen Sie jetzt machen, was Sie wollen, ohne dass
Sie damit Schaden anrichten knnen. Wenden Sie Eigenschaft RecordCount an, um die Anzahl
der hinterlegten Datenstze zu erfragen. Diese Anzahl vergleichen Sie dann mit dem
momentan eingestellten Datensatz im Formular. Fr den Fall, dass der letzte Datensatz
erreicht ist, geben Sie eine Meldung aus. Damit beim ffnen des Formulars nicht gleich die
Meldung angezeigt wird, fragen Sie ab, ob der aktuell eingestellte Satz einen Wert ungleich 1
aufweist. Danach stellen Sie ber den Einsatz der Methode GoToRecord den ersten Datensatz
im Formular wieder ein.
359 Dynamisches Ein- und Ausblenden von Feldern
In Abhngigkeit bestimmter Datenfelder im Formular knnen Sie andere Formularfelder ein-
und ausblenden. Im folgenden Beispiel wurde im Formular Personal das Feld Position ber-
wacht. Dabei soll die Telefonnummer dann ausgeblendet werden, wenn im Feld Position der
Eintrag Geschftsfhrer steht. Die Lsung fr diese Aufgabe sehen Sie in Listing 436.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Form_Current()
If [Link] <> 1 Then
If [Link] = [Link] Then
MsgBox "Letzter Satz erreicht!", vbInformation
[Link] acDataForm, "Artikel", acFirst
End If
End If
End Sub
Listing 435: Bei Erreichen des letzten Satzes eine Meldung anzeigen
Sandini Bib
Variablen Titel im Formular einstellen 539
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Eigenschaft Visible knnen Sie ein Feld ausblenden, indem Sie dieser Eigen-
schaft den Wert False zuweisen.
Achten Sie bei Datenfeldern, die Leerzeichen im Feldnamen enthalten, darauf, dass Sie den
Feldnamen in eckige Klammern setzen.
360 Variablen Titel im Formular einstellen
Das Ereignis Form_Current knnen Sie auch einsetzen, um Informationen in der Titelleiste
des Formulars anzuzeigen. Standardmig wird hierbei der Name des Formulars angezeigt.
Im Formular Kategorien wird in Listing 437 der Name der jeweiligen Kategorie in Grobuch-
staben angezeigt. Wenn eine neue Kategorie hinzugefgt wird, erfolgt die Ausgabe des aktu-
ellen Datums in der Titelleiste.
Abbildung 276: Der letzte Satz im Formular wurde erreicht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Personal
'=====================================================
Private Sub Form_Current()
If [Link] = "Geschftsfhrer" Then
Me.[Durchwahl Bro].Visible = False
Else
Me.[Durchwahl Bro].Visible = True
End If
End Sub
Listing 436: Bestimmte Felder ein- und ausblenden
Sandini Bib
540 Die Ereignisprogrammierung
Mit der Eigenschaft NewRecord knnen Sie berprfen, ob der aktuell ausgewhlte Datensatz
ein neuer Datensatz ist. ber die Eigenschaft Caption knnen Sie die Titelleiste im Formular
fllen. Dabei kann auch die Funktion UCase zum Einsatz kommen, um den Titel in Gro-
buchstaben umzuwandeln.
361 QuickInfos definieren
Im nchste Beispiel aus Listing 438 setzen Sie das Ereignis Form_Current dazu ein, um fr
jedes Textfeld im Formular Artikel2 eine QuickInfo zu definieren. Diese QuickInfo wird
angezeigt, wenn Sie ein Textfeld aktivieren. Als Text fr die QuickInfo definieren Sie in die-
sem Beispiel den augenblicklichen Inhalt des Textfelds.
Abbildung 277: Beim Geschftsfhrer wurde die Telefonnummer ausgeblendet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kategorien
'=====================================================
Private Sub Form_Current()
If [Link] Then
[Link] = "Neue Kategorie " & Date
Else
[Link] = UCase([Link])
End If
End Sub
Listing 437: Einen variablen Titel im Formular einstellen
Sandini Bib
Eingaben limitieren 541
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
In einer For each next-Schleife durchlaufen Sie alle Steuerelemente in dem Formular. Inner-
halb der Schleife prfen Sie ber die Eigenschaft ControlType, ob das jeweilige Steuerelement
ein Textfeld ist. Wenn ja, dann wenden Sie die Eigenschaft ControlTipText an, um eine
QuickInfo festzulegen. ber die Eigenschaft Value bertragen Sie dabei den Wert des Text-
felds.
362 Eingaben limitieren
Stellen Sie sich vor, Sie haben ein Formular, in dem Sie die Anlage neuer Stze beschrnken
mchten. Dabei sollen in der verknpften Tabelle, die hinter dem Formular hinterlegt ist,
nur 100 Stze maximal eingegeben werden knnen.
Abbildung 278: Der Kategoriename wird als Fensterberschrift definiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel2
'=====================================================
Private Sub Form_Current()
Dim ctrl As Control
For Each ctrl In [Link]
If [Link] = acTextBox Then
[Link] = [Link]
End If
Next ctrl
End Sub
Listing 438: Den Feldwert zustzlich als QuickInfo angeben
Sandini Bib
542 Die Ereignisprogrammierung
Im Beispiel aus Listing 439 wird im Formular Kunden2 die Eingabe von hchstens 100 Stzen
erlaubt.
Mit der Eigenschaft RecordsetClone erstellen Sie eine Kopie der Tabelle, die dem Formular
zugrunde liegt. ber die Methode RecordCount zhlen Sie die bereits erfassten Datenstze der
mit dem Formular verknpften Tabelle. Fragen Sie ber die Eigenschaft NewRecord nach, ob
es sich bei dem aktuell eingestellten Satz im Formular um einen neuen Satz handelt oder
nicht. Da Sie alle nderungen an bereits bestehenden Datenstzen zulassen mchten, setzen
Sie diese Eigenschaft AllowEdits im Else-Zweig der If-Anweisung auf den Wert True. Im
Then-Zweig der If-Anweisung definieren Sie die Bedingung intzl < 100.
Abbildung 279: Die QuickInfo beim Feld Liefereinheit
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden2
'=====================================================
Private Sub Form_Current()
Dim DBS As Recordset
Dim intz As Integer
Set DBS = RecordsetClone
intz = [Link]
If [Link] Then
[Link] = (intz < 100)
MsgBox "Die max. Anzahl der Stze ist erreicht!"
Else
[Link] = True
End If
End Sub
Listing 439: Die Eingabe von Datenstzen einschrnken
Sandini Bib
Neue Mitarbeiter dokumentieren 543
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
363 Neue Mitarbeiter dokumentieren
Im folgenden Beispiel werden ber das Formular PERSONAL neue Mitarbeiter erfasst. Um
nun eine lckenlose Dokumentation der Neueinstellungen zu erhalten, erstellen Sie zunchst
eine Tabelle wie in Abbildung 280 gezeigt.
Erfassen Sie das Ereignis AfterInsert und ergnzen Sie es wie in Listing 440 gezeigt.
Abbildung 280: Die Tabelle zur Dokumentierung des Personals
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Personal
'=====================================================
Private Sub Form_AfterInsert()
Dim conn As New [Link]
Dim dbs As [Link]
If [Link] = False Then
MsgBox "Neuanlage"
Set conn = [Link]
Set dbs = New [Link]
[Link] "PersonalDoku", conn, adOpenKeyset, adLockOptimistic
[Link]
[Link]("PersNR") = Me.[Personal-Nr]
Listing 440: Neue Einstellungen werden in einer Tabelle dokumentiert.
Sandini Bib
544 Die Ereignisprogrammierung
Nachdem Sie Ihre Eingaben vorgenommen haben, berprfen Sie mithilfe der Eigenschaft
NewRecord, ob der erfasste Datensatz ein Neuzugang ist. Dabei ist zu anzumerken, dass hier
nicht wie erwartet und in der Online-Hilfe beschrieben die Abfrage nach True zum Erfolg
fhrt, sondern die Abfrage mit False.
Wenn es sich um einen neuen Datensatz handelt, dann stellen Sie die Verbindung zur Tabelle
PersonalDoku her. Legen Sie ber die Methode AddNew einen neuen Satz in der Tabelle an und
bertragen Sie die Felder aus dem Formular Personal in die Tabelle. Vergessen Sie dabei
nicht, die Methode Update am Ende des bertragungsvorgangs anzugeben. Damit wird der
Satz endgltig in der Tabelle gespeichert. Schlieen Sie danach die Tabelle ber die Methode
Close und heben Sie die Objektverknpfung auf.
364 Felder automatisch vorbelegen
Das Ereignis BeforeInsert tritt auf, wenn der Benutzer das erste Zeichen in einen neuen
Datensatz eingibt, jedoch bevor der entsprechende Datensatz tatschlich erstellt wird. Dieses
Ereignis knnen Sie beispielsweise einsetzen, um bestimmte Felder im Formular automatisch
vorzubelegen.
Im nchsten Beispiel aus Listing 441 werden Sie im Formular Kunden whrend der Anlage
eines neuen Kunden die Felder Region, Land und Ort automatisch fllen. Gehen Sie bei die-
sem Beispiel davon aus, dass diese drei Felder nahezu immer dem zuletzt angelegten Daten-
satz entsprechen, da Sie gewhnlich immer alle Kunden aus einem Land, einem Ort bzw.
einer Region nacheinander eingeben.
[Link]("Name") = [Link] & ", " & [Link]
[Link]("Datum") = Date
[Link]("Vorgang") = "Neueinstellung"
[Link]
[Link]
Set dbs = Nothing
Set conn = Nothing
End If
End Sub
Abbildung 281: Alle Neueinstellungen werden lckenlos festgehalten.
Listing 440: Neue Einstellungen werden in einer Tabelle dokumentiert. (Forts.)
Sandini Bib
Felder automatisch vorbelegen 545
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Funktion DLast knnen Sie den zuletzt erfassten Datensatz in einer Tabelle
ermitteln und beispielsweise in ein Formular bertragen.
Wenn Sie lieber feste Werte als Vorbelegungstexte haben mchten, dann geben Sie diese wie
in Listing 442 gezeigt in doppelten Anfhrungszeichen an.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden
'=====================================================
Sub Form_BeforeInsert(Cancel As Integer)
With Me
.Ort = DLast("Ort", "Kunden")
.Region = DLast("Region", "Kunden")
.Land = DLast("Land", "Kunden")
End With
End Sub
Listing 441: Die Vorbelegung einiger Felder vornehmen
Abbildung 282: Die zuletzt vorgenommenen Eintrge wurden automatisch eingestellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden (auskommentiert)
'=====================================================
Listing 442: Feste Texte als Vorgabe verwenden
Sandini Bib
546 Die Ereignisprogrammierung
Als weitere Variante knnen Sie sich einen Dummysatz in einer Tabelle definieren, z. B. den
ersten Datensatz, den Sie dann immer standardmig bertragen, wenn Sie das erste Zeichen
in einem neuen Datensatz im Formular eingeben. Im folgenden Beispiel aus Listing 443 wird
in Artikel2 jeweils der erste Satz der Tabelle Artikel eingesetzt, wenn ein neuer Satz angegan-
gen wird.
Mit der Eigenschaft RecordsetClone erstellen Sie eine Kopie des Datensatzes, der dem Formu-
lar zugrunde liegt und von der Einstellung der Eigenschaft RecordSource des Formulars fest-
gelegt wird. Danach aktivieren Sie den ersten Satz der Tabelle ber die Methode MoveFirst.
Jetzt bertragen Sie die Inhalte dieses Satzes Feld fr Feld in die Formularfelder.
Sub Form_BeforeInsert(Cancel As Integer)
With Me
.Ort = "Gerlingen"
.Region = "BW"
.Land = "Deutschland"
End With
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel2
'=====================================================
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim DBS As Recordset
Set DBS = [Link]
With Me
If [Link] > 0 Then
[Link]
.Artikelname = DBS!Artikelname
.[LieferantenNr] = DBS![Lieferanten-Nr]
.[KategorieNr] = DBS![Kategorie-Nr]
.Liefereinheit = DBS!Liefereinheit
.Einzelpreis = DBS!Einzelpreis
.Lagerbestand = DBS!Lagerbestand
.BestellteEinheiten = DBS!BestellteEinheiten
.Mindestbestand = DBS!Mindestbestand
.Auslaufartikel = DBS!Auslaufartikel
End If
End With
End Sub
Listing 443: Den ersten Satz im Formular einstellen
Listing 442: Feste Texte als Vorgabe verwenden (Forts.)
Sandini Bib
Rckfrage vor dem Speichern einholen 547
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
365 Rckfrage vor dem Speichern einholen
Das Ereignis BeforeUpdate knnen Sie einsetzen, um vor dem Speichern eines neuen Daten-
satzes bzw. einer nderung eines bereits angelegten Datensatzes eine Rckfrage einzuholen.
Im Makro aus Listing 444 wurde fr das Formular Lieferanten diese Rckfrage eingebaut.
Fragen Sie ber eine MsgBox ab, ob der vernderte Wert auch tatschlich zurckgeschrieben
werden soll. Ist dies nicht der Fall, dann wenden Sie die Methode Undo an, um den ursprng-
lichen Wert wieder einzustellen, und setzen Sie das Argument Cancel auf den Wert True, um
das Ereignis abzubrechen.
366 Eingabeprfung vornehmen
Das Ereignis Form_BeforeUpdate knnen Sie unter anderem gut einsetzen, wenn Sie Eingaben
in Formularfeldern kontrollieren mchten.
Abbildung 283: Der erste Datensatz wurde als Vorlage verwendet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Lierferanten
'=====================================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
If MsgBox("Mchten Sie wirklich speichern?", _
vbYesNo + vbQuestion, "Speichern besttigen") <> vbYes Then
Cancel = True
[Link]
End If
End Sub
Listing 444: Eine Rckfrage vor dem Speichern einholen
Sandini Bib
548 Die Ereignisprogrammierung
Im folgenden Beispiel aus Listing 445 wird im Formular Personal geprft, ob die Eingabe
einer Postleitzahl richtig durchgefhrt wurde. Fr die Lnder Frankreich, Italien, Spanien
und Deutschland gilt eine einheitliche Lnge von fnf Zeichen. In Australien und Singapur
wird mit einer vierstelligen Postleitzahl gearbeitet. In Kanada enthlt die Postleitzahl sowohl
numerische als auch alphanumerische Zeichen in zwei Dreierblcken, z. B. H1J 1C3 fr
Quebec.
ber eine Select Case-Anweisung wird das Feld Land ausgewertet. Ist kein Land erfasst, kann
auch die PLZ-Prfung unterbleiben. Daher wird in diesem Zweig das Makro ber den Befehl
Exit Sub sofort verlassen. ber die Funktion Len prfen Sie die Textlnge der verschiedenen
Postleitzahlen. Entspricht dabei die Vorgabe nicht der Realitt, setzen Sie das Argument
Cancel auf den Wert True, um die Speicherung des Datensatzes abzubrechen. Mithilfe der
Methode SetFocus setzen Sie den Mauszeiger danach direkt in das Feld PLZ, um eine schnelle
Korrektur zu ermglichen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Personal
'=====================================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
Select Case Me!Land
Case IsNull(Me![Land])
Exit Sub
Case "Frankreich", "Italien", "Spanien", "Deutschland"
If Len(Me![PLZ]) <> 5 Then
MsgBox "Postleitzahl muss 5 Zeichen lang sein"
Cancel = True
Me![PLZ].SetFocus
End If
Case "Australien", "Singapur"
If Len(Me![PLZ]) <> 4 Then
MsgBox "Postleitzahl muss 4 Zeichen lang sein"
Cancel = True
Me![PLZ].SetFocus
End If
Case "Kanada"
If Not Me![PLZ] Like "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" Then
MsgBox "Postleitzahl ist ungltig. "
Cancel = True
Me![PLZ].SetFocus
End If
Case Else
'keine Prfung
End Select
End Sub
Listing 445: Die PLZ-Prfung vor dem Speichern des Satzes durchfhren
Sandini Bib
Muss-Felder definieren 549
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Postleitzahl von Kanada erfordert einen Abgleich eines Musters, bestehend aus zwei
Dreierblcken. Dabei entspricht die erste Ziffer im ersten Block einem Buchstaben zwischen
A und Z, die zweite Ziffer setzt sich aus einer Zahl zwischen 0 und 9 zusammen, die dritte
Ziffer muss dann wieder im Buchstabenbereich A bis Z liegen. Der zweite Block enthlt als
erstes und drittes Zeichen eine Zahl zwischen 0 und 9. In der Mitte muss wieder ein Buch-
stabe stehen. Einen solchen Vergleich fhren Sie ber Like durch.
367 Muss-Felder definieren
Auf eine ganz hnliche Weise knnen Sie Muss-Felder definieren, d.h., in diesen Feldern
muss ein Eintrag erfolgen, damit der Datensatz gespeichert werden kann.
Im folgenden Beispiel aus Listing 446 werden die beide Felder Lagerbestand sowie
Mindestbestand im Formular Artikel als Muss-Felder definiert.
Abbildung 284: Eine ungltige Postleitzahl fr Deutschland wurde erfasst.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull([Link]) Then
MsgBox "Geben Sie eine Lagerbestandsmenge ein!"
Cancel = True
Listing 446: Muss-Felder definieren
Sandini Bib
550 Die Ereignisprogrammierung
Mithilfe der Funktion IsNull berprfen Sie, ob in einem Feld eine Eingabe vorgenommen
wurde. Wenn nicht, dann machen Sie den Anwender darauf mit einer Bildschirmmeldung
aufmerksam.
368 nderungen in Textdatei festhalten
Im nchsten Beispiel aus Listing 447 werden alle nderungen im Formular Kunden bzw. in der
dahinter liegenden Tabelle Kunden in eine Textdatei geschrieben.
Sobald Sie eine nderung in der Tabelle Kunden ber das Formular Kunden vornehmen, wird
im Hintergrund eine Textdatei geffnet. Dabei geben Sie bei der Methode Open das Argument
For Append an. Damit werden alle nderungen in der Textdatei jeweils am Ende der Textdatei
angehngt. Schreiben Sie zu Beginn der jeweiligen nderung das nderungsdatum sowie
den Namen des Anwenders mithilfe der Anweisung Print. Danach durchlaufen Sie mittels
einer Schleife alle Textfelder des Formulars. Innerhalb der Schleife setzen Sie die Eigenschaft
End If
If IsNull([Link]) Then
MsgBox "Geben Sie einen Mindestbestand ein!"
Cancel = True
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden
'=====================================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim ctrl As Control
Open "C:\Eigene Dateien\[Link]" For Append As #1
Print #1, "Letzte nderung: " & Now & " von " & Environ("username")
For Each ctrl In [Link]
With ctrl
If .ControlType = acTextBox Then
Print #1, .OldValue
End If
End With
Next ctrl
Print #1, "-*-*-*-"
Close #1
End Sub
Listing 447: nderungen am Kundenstamm zustzlich festhalten
Listing 446: Muss-Felder definieren (Forts.)
Sandini Bib
Neuanlage von Datenstzen verhindern 551
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
OldValue ein, um die ursprnglichen Werte vor der nderung zu ermitteln. Schlieen Sie
nach dem Schleifenaustritt die Textdatei ber die Methode Close.
369 Neuanlage von Datenstzen verhindern
Das Ereignis Form_BeforeUpdate knnen Sie ebenso einsetzen, wenn Sie die Neuanlage eines
Datensatzes ber ein Formular verhindern mchten.
Im Beispiel aus Listing 448 wird im Formular KATEGORIEN fr bestimmte Anwender die
Neuanlage von Datenstzen verweigert.
Abbildung 285: Alle nderungen werden in einer separaten Textdatei festgehalten.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kategorien
'=====================================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
If [Link] And Environ("username") <> "admin" Then
MsgBox "Es ist nicht mglich, neue Stze anzuhngen!"
[Link]
Cancel = True
End If
End Sub
Listing 448: Die Neuanlage von Datenstzen wird verweigert.
Sandini Bib
552 Die Ereignisprogrammierung
Mithilfe der Eigenschaft NewRecord knnen Sie berprfen, ob ein Satz neu angelegt wurde.
In diesem Fall wird der Wert True zurckgegeben. Die Methode Undo setzen Sie ein, um die
ursprnglichen Werte im Formular wieder herzustellen. Indem Sie das Argument Cancel auf
den Wert True setzen, wird der Speichervorgang abgebrochen.
370 berhaupt keine nderungen zulassen
Gehen Sie einen Schritt weiter und lassen Sie im nchsten Beispiel in Listing 449 berhaupt
keine nderung zu. Auch hier knnen Sie das Ereignis Form_BeforeUpdate einsetzen.
Mit der Eigenschaft Dirty ermitteln Sie, ob der aktuelle Datensatz seit dem letzten Speichern
verndert wurde. Wenn ja, wenden Sie die Methode Undo an, um diese nderung rckgngig
zu machen. Setzen Sie das Argument Cancel auf den Wert True, um den Speichervorgang
abzubrechen.
371 Letzte nderung festhalten
Im Makro aus Listing 450 wurde in der Tabelle Artikel ein zustzliches Feld mit dem Namen
LetzterUpdate angelegt. Nachdem eine nderung an einem Datensatz im Formular Artikel
ausgefhrt wird, wird in der Tabelle beim betreffenden Satz das nderungsdatum automa-
tisch geschrieben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kategorien (auskommentiert)
'=====================================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
If [Link] Then
MsgBox "Es ist nicht mglich, Stze zu ndern!"
[Link]
Cancel = True
End If
End Sub
Listing 449: Das Ereignis BeforeUpdate einsetzen, um nderungen an Stzen rckgngig zu machen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Listing 450: Die letzte nderung an einem Datensatz in der Tabelle zurckschreiben
Sandini Bib
Letzte nderung festhalten 553
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Funktion DLookup suchen Sie in der Tabelle Artikel nach dem gerade genderten
Datensatz im Formular. Das eindeutige Suchkriterium ist hierfr die Artikelnummer. Bilden
Sie danach den Suchbegriff, der sich aus dem Feldnamen in der Tabelle sowie der eigentli-
chen Artikelnummer zusammensetzt, und bergeben Sie diesen Suchbegriff nach dem ff-
nen der Tabelle der Methode Find. Wurde der Datensatz der Tabelle gefunden, dann
bertragen Sie die aktuelle Zeit, inklusive des Datums, ber die Funktion Now in das Feld
LetzterUpdate. Wenden Sie danach die Methode Update an, um den Datensatz zu speichern.
Im Anschluss daran schlieen Sie die Tabelle ber die Methode Close und heben den Objekt-
verweis auf.
Private Sub Form_AfterUpdate()
Dim DBS As [Link]
Dim varx As Variant
varx = DLookup("[Artikel-Nr]", "Artikel", "[Artikel-Nr] = " _
& Forms!Artikel!ArtikelNr)
varx = "[Artikel-Nr]='" & varx & "'"
On Error GoTo fehler
Set DBS = New [Link]
With DBS
.Open Source:="Artikel", ActiveConnection:=[Link], _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
.Find Criteria:=varx, SearchDirection:=adSearchForward
If Not .EOF Then
.Fields("LetzterUpdate") = Now
End If
End With
[Link]
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 450: Die letzte nderung an einem Datensatz in der Tabelle zurckschreiben (Forts.)
Sandini Bib
554 Die Ereignisprogrammierung
372 Lschen von Datenstzen verhindern
Um einen Datensatz aus einem Formular zu lschen, knnen Sie standardmig aus dem
Men BEARBEITEN den Befehl DATENSATZ LSCHEN durchfhren. Haben Sie wichtige Daten-
stze in Ihrem Datenbestand, die auf keinen Fall gelscht werden drfen, knnen Sie das
Argument Cancel des Ereignisses Form_Delete einsetzen, um eine Lschung zu verhindern.
Im folgenden Beispiel aus Listing 451 wird im Formular Artikel jegliche Lschung von Arti-
keln verhindert.
Indem Sie das Argument Cancel auf den Wert True setzen, brechen Sie den Lschvorgang ab.
Wenn Sie diese Lsung so einsetzen, dann sollten Sie den Anwender dabei aber auf diese
Funktion mittels einer Bildschirmmeldung aufmerksam machen.
In der Praxis wird man hin und wieder zustzliche Kriterien definieren, die generell eine
Lschung von Datenstzen erlauben, jedoch nicht in speziellen Fllen.
Im folgenden Beispiel aus Listing 452 drfen Kunden aus Deutschland im Formular Kunden
nicht gelscht werden.
Abbildung 286: Die letzten nderungen sind jetzt sofort ersichtlich.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Form_Delete(Cancel As Integer)
MsgBox "Es drfen keine Datenstze gelscht werden!", vbCritical
Cancel = True
End Sub
Listing 451: Das Lschen von Datenstzen wird verhindert.
Sandini Bib
Eine eigene Lschabfrage einsetzen 555
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
373 Eine eigene Lschabfrage einsetzen
Das Ereignis BeforeDelConfirm tritt auf, nachdem ein Anwender einen oder mehrere Daten-
stze gelscht hat, jedoch bevor Microsoft Access ein Dialogfeld anzeigt, in dem der Benutzer
zur Besttigung des Lschvorgangs aufgefordert wird.
Wenn Sie einen Datensatz aus einem Formular ber das Men BEARBEITEN und den Befehl
DATENSATZ LSCHEN entfernen mchten, wird von Access ein Standarddialogfeld angezeigt,
in dem Sie die Lschaktion besttigen mssen. Dieses Standarddialogfeld knnen Sie durch
ein eigenes Dialogfeld im Formular Artikel2 wie in Listing 453 gezeigt ersetzen.
Das Dialogfeld soll die Schaltflchen OK und ABBRECHEN enthalten. Wenn die Schaltflche
ABBRECHEN angeklickt wurde, wird der Wert 2 zurckgemeldet, was der Konstanten vbCancel
entspricht. In diesem Fall setzen Sie das Argument Cancel auf den Wert True, um die Stan-
dardlschabfrage von Access abzubrechen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden
'=====================================================
Private Sub Form_Delete(Cancel As Integer)
If [Link] = "Deutschland" Then
MsgBox "Datenstze mit Kunden aus " & [Link] & _
" knnen nicht gelscht werden!"
Cancel = True
End If
End Sub
Listing 452: Das Lschen von Datenstzen gilt nur fr bestimmte Datenstze.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel2
'=====================================================
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
If MsgBox("Mchten Sie wirklich lschen?", _
vbOKCancel + vbQuestion) = vbCancel Then
Cancel = True
End If
End Sub
Listing 453: Eine eigene Lschabfrage einsetzen
Sandini Bib
556 Die Ereignisprogrammierung
374 Den letzten Datensatz einstellen
Im Beispiel aus Listing 454 wird im Formular Artikel2 standardmig der letzte Datensatz
der damit verknpften Tabelle Artikel angezeigt.
Setzen Sie die Methode GoToRecord ein und bergeben Sie dieser Methode die Konstante
acLast, um das Formular mit dem letzten Datensatz der verknpften Tabelle einzustellen.
375 Den zuletzt genderten Satz einstellen
Erinnern Sie sich noch, wie Sie vorher die letzte nderung eines Datensatzes in der Tabelle
Artikel im Feld LetzterUpdate ber das Ereignis Form_AfterUpdate vorgenommen haben?
Jetzt knnen Sie genau auf diese letzte nderung zugreifen und beim Aktivieren des Formu-
lars genau diesen Satz einstellen, indem Sie das Ereignis aus Listing 455 einsetzen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel2
'=====================================================
Private Sub Form_Activate()
[Link] , , acLast
End Sub
Listing 454: Den letzten Datensatz der Tabelle im Formular einstellen
Abbildung 287: Der letzte Satz wird angezeigt.
Sandini Bib
Den zuletzt genderten Satz einstellen 557
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Funktion DMax suchen Sie in der Tabelle Artikel nach dem zuletzt genderten
Datensatz. Dieser Datensatz hat das grte Datum. Das eindeutige Suchkriterium ist hier-
fr das Datum der letzten nderung aus dem Feld LetzterUpdate. Bilden Sie danach den
Suchbegriff, der sich aus dem Feldnamen in der Tabelle sowie dem ermittelten hchsten
Datum zusammensetzt, und bergeben Sie diesen Suchbegriff nach dem ffnen der Tabelle
der Methode Find. Wurde der Datensatz der Tabelle gefunden, dann speichern Sie die aktu-
elle Position des Recordset-Objekts ber die Eigenschaft AbsolutePosition in der Variablen
lngPos. bergeben Sie diese Position dann an die Methode GoToRecord. Damit wird der
zuletzt genderte Datensatz im Formular angezeigt. Wenden Sie danach die Methode Close
an, um die Tabelle zu schlieen, und heben Sie den Objektverweis auf.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Form_Activate()
Dim DBS As [Link]
Dim varx As Variant
Dim lngPos As Integer
varx = DMax("LetzterUpdate", "Artikel")
varx = "LetzterUpdate='" & varx & "'"
On Error GoTo fehler
Set DBS = New [Link]
With DBS
.Open Source:="Artikel", ActiveConnection:=[Link], _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
.Find Criteria:=varx, SearchDirection:=adSearchForward
lngPos = .AbsolutePosition
If Not .EOF Then
[Link] acDataForm, "Artikel", acGoTo, lngPos
End If
End With
[Link]
Set DBS = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 455: Den zuletzt genderten Datensatz im Formular voreinstellen
Sandini Bib
558 Die Ereignisprogrammierung
376 Variable Feldanpassung vornehmen
Bei Eintreten des Resize-Ereignisses knnen Sie ein Steuerelement verschieben oder dessen
Gre ndern, wenn sich die Gre des Formulars ndert, in dem sich dieses Steuerelement
befindet.
Im nchsten Beispiel aus Listing 456 werden Sie die Lnge der beiden Textfelder Firma und
Strae im Formular Kunden variabel gestalten.
ber die Eigenschaft WindowWidth ermitteln Sie die aktuelle Breite eines Formulars. Die so
ermittelte Breite dividiert durch 2 weisen Sie den Textfeldern Firma und Strae als neue Breite
zu. Sie erhalten somit einen Bewegungseffekt in Ihrem Formular.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden
'=====================================================
Private Sub Form_Resize()
Dim intBreite As Integer
intBreite = [Link]
Me![Link] = intBreite / 2
Me![Link] = intBreite / 2
End Sub
Listing 456: Textfelder werden dynamisch angepasst.
Abbildung 288: Beim Verbreitern des Formulars werden die Textfelder Firma und Strae angepasst.
Sandini Bib
Mit Doppelklick Felder ein- und ausblenden 559
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
377 Mit Doppelklick Felder ein- und ausblenden
Bei Formularen tritt das Ereignis DblClick ein, wenn der Benutzer auf eine leere Flche oder
auf einen Datensatzmarkierer des Formulars doppelt klickt. Im folgenden Beispiel aus
Listing 457 werden mit einem Doppelklick auf das Formular Artikel bestimmte Felder je
nach augenblicklichem Status entweder ein- oder ausgeblendet.
Prfen Sie zuerst am Feld Lagerbestand, ob das Feld gerade sichtbar ist oder nicht. Je nach-
dem blenden Sie die restlichen Felder ein, indem Sie die Eigenschaft Visible der Steuerele-
mente auf den Wert True setzen, bzw. blenden Sie die Felder aus, indem Sie der Eigenschaft
Visible den Wert False zuweisen.
Klicken Sie doppelt auf eine freie Flche im Formular, um die Felder auszublenden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Detail_DblClick(Cancel As Integer)
With Me
If .[Link] = True Then
.[Link] = False
.[Link] = False
.[Link] = False
.[Link] = False
.[Link] = False
.[Link] = False
.[Link] = False
.[Link] = False
Else
.[Link] = True
.[Link] = True
.[Link] = True
.[Link] = True
.[Link] = True
.[Link] = True
.[Link] = True
.[Link] = True
End If
End With
End Sub
Listing 457: Felder dynamisch ein- und ausblenden
Sandini Bib
560 Die Ereignisprogrammierung
378 Lagerbestand per Mausklick erhhen
Das Ereignis Click tritt auf, wenn der Benutzer die linke Maustaste klickt, whrend sich der
Mauszeiger auf einem freien Bereich oder auf Datensatzmarkierern in der Datenblattansicht
des Formulars befindet. Dieses Ereignis kann man selbstverstndlich auf jedes andere Steuer-
element im Formular anwenden.
Eine kleine Erleichterung knnen Sie beispielsweise im Formular Artikel integrieren. Dabei
soll durch einen Klick auf das Textfeld Lagerbestand derselbe jeweils um den Wert 1 erhht
werden. Stellen Sie dazu das Click-Ereignis fr das Textfeld Lagerbestand wie in Listing 458
gezeigt ein.
Abbildung 289: Alle Felder sind sichtbar.
Abbildung 290: Einige Felder sind nun ausgeblendet.
Sandini Bib
Welche Taste wurde gedrckt? 561
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
379 Welche Taste wurde gedrckt?
Listing 459 zeigt, wie man feststellen kann, welche Maustaste im Detailbereich des Formulars
Kunden gedrckt wurde. Dabei kann es vorkommen, dass vorher zustzlich zu den gedrckt
gehaltenen Maustasten eine der Tasten (Alt), () oder (Strg) gedrckt wurde.
Das Argument Button hat drei Konstanten, ber die Sie ermitteln knnen, welche Taste auf
der Maus gedrckt wurde. Die dazugehrigen Konstanten bzw. Zahlenwerte sind:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel
'=====================================================
Private Sub Lagerbestand_Click()
[Link] = [Link] + 1
End Sub
Listing 458: Lagerzugnge per Mausklick einpflegen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden
'=====================================================
Private Sub Detail_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = acLeftButton Then
MsgBox "Sie haben die linke Taste gedrckt."
End If
If Button = acRightButton Then
MsgBox "Sie haben die rechte Taste gedrckt."
End If
If Button = acMiddleButton Then
MsgBox "Sie haben die mittlere Taste gedrckt."
End If
If Shift = 1 Then MsgBox "Umschalt-Taste gedrckt"
If Shift = 2 Then MsgBox "Strg-Taste gedrckt"
If Shift = 4 Then MsgBox "Alt-Taste gedrckt"
End Sub
Listing 459: Feststellen, welche Maustaste gedrckt wurde
Sandini Bib
562 Die Ereignisprogrammierung
acLeftButton: 1
acRightButton: 2
acMiddleButton: 4
Mithilfe des Arguments Shift knnen Sie feststellen, welche Tasten zustzlich zu den Maus-
tasten gedrckt wurden.
Hinter den Argumenten X und Y steht eine Zahl, die die aktuelle Position des Mauszeigers
anzeigt. Die Werte X und Y bilden dabei die linke obere Ecke des Objekts.
380 Schaltflche beim Klicken verndern
Im folgenden Beispiel aus Listing 460 wird im Formular ListboxFllen die Schaltflche beim
Klicken verndert. Dabei wird der Schriftschnitt FETT sowie die Schriftfarbe ROT eingestellt.
Beim erneuten Freigeben der linken Maustaste wird die Standardformatierung wieder herge-
stellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_ListboxFllen
'=====================================================
Private Sub Befehl2_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Dim lngRot As Long
lngRot = QBColor(4)
With Me.Befehl2
.FontBold = True
.ForeColor = lngRot
End With
End Sub
Private Sub Befehl2_MouseUp(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Dim lngBlack As Long
lngBlack = QBColor(0)
With Me.Befehl2
.FontBold = False
.ForeColor = lngBlack
End With
End Sub
Listing 460: Schaltflchen beim Klicken verndern
Sandini Bib
Kontextmen deaktivieren 563
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Funktion QBColor bestimmen Sie die Farbe, die Sie ber die Eigenschaft ForeColor der
Beschriftung der Schaltflche zuweisen. Die genaue Farbbelegung der Funktion QBColor kn-
nen Sie im Anhang nachschlagen. Indem Sie die Eigenschaft FontBold auf den Wert True setzen,
erreichen Sie, dass der Beschriftungstext der Schaltflche im Fettdruck ausgegeben wird.
381 Kontextmen deaktivieren
Wenn Sie in einem Formular die rechte Maustaste drcken, wird Ihnen standardmig ein
Kontextmen angeboten, ber das Sie beispielsweise in eine andere Formularansicht sprin-
gen knnen. Dieses Kontextmen knnen Sie ausschalten, indem Sie das Ereignis MouseDown
einsetzen. Dazu legen Sie fest, in welchem Bereich des Formulars dieses Kontextmen ausge-
schaltet werden soll.
Im folgenden Beispiel aus Listing 461 wird im Detailbereich des Formulars Lieferanten das
Kontextmen deaktiviert.
ber die Abfrage der gedrckten Taste auf Ihrer Maus knnen Sie ber das Argument
acRightButton abfragen, ob die rechte Maustaste gedrckt wurde. Ist dies der Fall, schalten
Sie das Kontextmen ab, indem Sie die Eigenschaft ShortcutMenu auf den Wert False setzen.
382 Spezialeffekte einsetzen
Zu nahezu jedem Steuerelement stehen Ihnen Spezialeffekte zur Verfgung. Sie knnen bei-
spielsweise Textfelder erhht oder vertieft einstellen. Das folgende Beispiel geht vom Formu-
lar SPEZIALEFFEKTE aus und sieht wie in Abbildung 291 gezeigt aus.
Sie knnen jetzt das Ereignis MouseOver einsetzen, um einen anderen Spezialeffekt fr die Fel-
der einzustellen, ber die Sie streichen.
Im folgenden Beispiel aus Listing 462 wird beim berstreichen der Textfelder geprft, wel-
cher Spezialeffekt eingestellt ist, und dementsprechend ein anderer Spezialeffekt eingestellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Lieferanten
'=====================================================
Private Sub Detail_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = acRightButton Then
[Link] = False
End If
End Sub
Listing 461: Das Kontextmen deaktivieren
Sandini Bib
564 Die Ereignisprogrammierung
Abbildung 291: Die Textfelder sind alle identisch eingestellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Spezialeffekt
'=====================================================
Private Sub Text0_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Me![Link] = 1 Then
Me![Link] = 2
Else
Me![Link] = 1
End If
End Sub
Private Sub Text2_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Me![Link] = 1 Then
Me![Link] = 2
Else
Me![Link] = 1
End If
End Sub
Listing 462: Spezialeffekte fr Textfelder einsetzen
Sandini Bib
Ins Internet verzweigen 565
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Wenden Sie die Eigenschaft SpecialEffect an, um nach einer Mausbewegung ber das ent-
sprechende Textfeld ein erhhtes Textfeld anzuzeigen.
Selbstverstndlich stehen Ihnen noch weitere Spezialeffekte zur Verfgung, die Sie der fol-
genden Tabelle entnehmen knnen.
383 Ins Internet verzweigen
In dem Formular Spezialeffekt wurde bei der folgenden Aufgabe eine weitere Schaltflche
integriert, deren Beschriftung eine gltige Internetadresse beinhaltet. Wenn man ber diese
Schaltflche mit der Maus streicht, wird dabei eine Rckfrage am Bildschirm angezeigt, ob
ins Internet verzweigt werden soll oder nicht. Um diese Aufgabe zu lsen, kann die API-
Funktion mit dem Namen ShellExecute aus Listing 463 gestartet werden.
Private Sub Text4_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Me![Link] = 1 Then
Me![Link] = 2
Else
Me![Link] = 1
End If
End Sub
Einstellung Wert Beschreibung
Flach
0
Das Objekt wird flach und in den Standardfarben des Systems oder in
benutzerdefinierten Farben angezeigt, die in der Entwurfsansicht ein-
gestellt wurden.
Erhht
1
Das Objekt ist oben und links hervorgehoben und hat unten und
rechts einen Schatten.
Vertieft
2
Das Objekt hat oben und links einen Schatten und ist unten und rechts
hervorgehoben.
Graviert
3
Das Objekt hat eine vertiefte Linie um das Steuerelement.
Schattiert
4
Das Objekt hat einen Schatten unterhalb und rechts des Steuer-
elements.
Unterstrichen
5
Das Objekt hat eine vertiefte Linie unterhalb des Steuerelements.
Tabelle 136: Die Spezialeffekte in Access
Listing 462: Spezialeffekte fr Textfelder einsetzen (Forts.)
Sandini Bib
566 Die Ereignisprogrammierung
Die Sprungadresse fr die Internetseite holen Sie sich direkt aus der Beschriftung der Schalt-
flche mithilfe der Eigenschaft Caption. Die notwendige Aktion heit open, was nichts ande-
res bedeutet, als dass die Internetseite geffnet werden soll.
Eine alternative Lsung, eine Internetseite aufzurufen, ist der Einsatz des Internet Explorers.
Dazu wurde im Formular eine zustzliche Schaltflche eingefgt und als Beschriftung die
Internetseite von n-TV mit der URL [Link] angegeben. Danach wurde das
Click-Ereignis fr diese Schaltflche eingestellt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Spezialeffekt
'=====================================================
Private Declare Function ShellExecute Lib
"[Link]" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal bShowCMD As Long) As Long
Private Sub Befehl10_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Dim strR As String
strR = MsgBox _
("Mchten Sie eine Verbindung ins Internet herstellen?", vbYesNo + vbQuestion)
If strR <> "" Then
If strR = 6 Then
ShellExecute [Link], "open", [Link], 0, 0, 5
End If
End If
End Sub
Listing 463: Eine Internetseite besuchen
Sandini Bib
Ins Internet verzweigen 567
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie zuerst einmal ein Objekt vom Typ Object. Zu diesem Zeitpunkt geben Sie
also noch nicht bekannt, dass Sie eigentlich mit Objekten des Internet Explorers arbeiten
mchten. Diese Vorgehensweise wird als Late-Binding bezeichnet. Bei diesem Late-Binding
brauchen Sie keine Objektbibliotheken in der Entwicklungsumgebung unter EXTRAS/VER-
WEISE einzubinden, sondern das Objekt wird ber die Funktion CreateObject erstellt. Danach
knnen Sie auf Methoden und Eigenschaften zugreifen, die fr den Internet Explorer ange-
boten werden. Unter anderem ist dies die Methode Navigate, die es erlaubt, eine Internet-
adresse oder eine andere Office-Datei (keine Access-Datenbanken) im Internet Explorer zu
ffnen.
Abbildung 292: Rckfrage vor dem Sprung ins Internet
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Spezialeffket
'=====================================================
Private Sub Befehl11_Click()
Dim IE As Object
Set IE = CreateObject("[Link]")
[Link] [Link]
End Sub
Listing 464: Den Internet Explorer starten
Sandini Bib
568 Die Ereignisprogrammierung
384 Textfelder optisch hervorheben
Eine Standardanwendung fr die beiden Ereignisse ist das Ein- und Entfrben von Textfel-
dern beim Fokuserhalt bzw. Fokusverlust.
Im folgenden Beispiel aus Listing 465 wird im Formular Textfelder diese Methode angewen-
det. Dabei wird bei Fokuserhalt des Textfelds die Hintergrundfarbe des Textfelds mit GELB
formatiert. Beim Fokusverlust wird die Standardfarbe des jeweiligen Textfelds wieder herge-
stellt.
ber die Eigenschaft BackColor knnen Sie den Hintergrund eines Textfelds mit einer Farbe
belegen. Die Farbe wird ber die Funktion QBColor erzeugt. Dabei wird die Farbe Gelb ber
die Nummer 6 und die blendend weie Farbe ber die Nummer 15 reprsentiert. Eine
Tabelle mit den Farbzuordnungen finden Sie im Anhang dieses Buchs.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Textfelder
'=====================================================
Private Sub Text0_GotFocus()
[Link] = QBColor(6)
End Sub
Private Sub Text0_LostFocus()
[Link] = QBColor(15)
End Sub
Private Sub Text2_GotFocus()
[Link] = QBColor(6)
End Sub
Private Sub Text2_LostFocus()
[Link] = QBColor(15)
End Sub
Private Sub Text4_GotFocus()
[Link] = QBColor(6)
End Sub
Private Sub Text4_LostFocus()
[Link] = QBColor(15)
End Sub
Listing 465: Textfelder bei Fokuserhalt frben
Sandini Bib
Tasten erkennen 569
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
385 Tasten erkennen
Um berhaupt einmal zu erkennen, wie man Tasten abfangen kann, wurde ein neues Formular
mit dem Namen Tasten eingefgt, in dem eine Schaltflche integriert wurde. Nach dem Aufruf
dieses Formulars knnen Sie die Tasten (Pos1), (Ende), (Esc), (Enter), (Entf), (Rcktaste),
() und (Strg) drcken. Alle diese Tasten werden im Makro aus Listing 466 erkannt.
Abbildung 293: Das zweite Feld wurde bei Fokuserhalt mit Gelb hinterlegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Tasten
'=====================================================
Private Sub Befehl0_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyHome
MsgBox "Sie haben die Pos1-Taste gedrckt!"
Case vbKeyEnd
MsgBox "Sie haben die Ende-Taste gedrckt!"
Case vbKeyEscape
MsgBox "Sie haben die Esc-Taste gedrckt!"
Case vbKeyReturn
MsgBox "Sie haben die Enter-Taste gedrckt!"
Case vbKeyDelete
MsgBox "Sie haben die Entf-Taste gedrckt!"
Case vbKeyBack
MsgBox "Sie haben die Rcktaste gedrckt!"
Case vbKeyShift
MsgBox "Sie haben die Umschalttaste gedrckt!"
Case vbKeyControl
MsgBox "Sie haben die Strg-Taste gedrckt!"
Listing 466: Tasten auswerten ber den KeyCode
Sandini Bib
570 Die Ereignisprogrammierung
Jede Taste kann ber eine so genannte KeyCode-Konstante angesprochen werden.
386 Tastenkombinationen einrichten
Im folgenden Beispiel wurde ein neues Formular mit drei Textfeldern angelegt und unter
dem Namen Tastenkombinationen gespeichert. Das Befllen des Formulars kann entweder
Feld fr Feld ber die Eingabe der Informationen Anwendername, Datum und Uhrzeit erfol-
gen oder eleganter und schneller ber Tastenkombinationen erledigt werden. Fr das Fllen
der Felder wurden folgende Tastenkombinationen definiert:
(Strg) + (U): fgt den Namen des Anwenders ins Feld Text0 ein.
(Strg) + (D): fgt das aktuelle Datum ins Feld Text2 ein.
(Strg) + (T): Fgt die aktuelle Uhrzeit ins Feld Text4 ein.
Die Tastenkombinationen werden ber das Ereignis KeyDown der jeweiligen Textfelder wie in
Listing 467 gezeigt eingestellt, d.h., die Tastenkombinationen sind nur gltig, wenn der
Mauszeiger im jeweiligen Textfeld steht.
End Select
End Sub
Abbildung 294: Die Abfrage von bestimmten Tasten in einem Formular
H
i
n
w
e
i
s
Weitere Informationen ber die Belegung der Tasten finden Sie im Antwort-Assisten-
ten der Online-Hilfe unter dem Stichwort Tasten-Code-Konstanten.
Listing 466: Tasten auswerten ber den KeyCode (Forts.)
Sandini Bib
Aktuellen Datensatz ans Ende kopieren 571
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Da das Argument KeyCode einen numerischen Wert erwartet, wenden Sie die Funktion Asc an
und bergeben ihr den gewnschten Buchstaben, zu dem Sie den zugeordneten numerischen
Wert erhalten mchten. Im Argument Shift knnen Sie die Taste (Strg) abfragen, indem Sie
die Konstante acCtrlMask verwenden. Den Anwendernamen knnen Sie ber die Funktion
Environ und die Konstante Username abfragen. Das Datum fgen Sie ber die Funktion Date,
die Uhrzeit ber die Funktion Time ein.
387 Aktuellen Datensatz ans Ende kopieren
Im folgenden Beispiel wird die Tastenkombination (Strg) + (Y) im Feld Artikelname des For-
mulars Artikel2 verwendet, um den aktuell aktiven Datensatz 1:1 ans Ende zu kopieren. Die
Artikelnummer wird jedoch noch wie gewnscht selbst von Access vergeben. Legen Sie das
Makro aus Listing 468 hinter das Feld Artikelname.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Tastenkombinationen
'=====================================================
Private Sub Text0_KeyDown(KeyCode As Integer, Shift As Integer)
'Die Tastenkombination Strg + U wird abgefragt
If (Shift = acCtrlMask) And (KeyCode = Asc("U")) Then
Me.Text0 = Environ("username")
End If
End Sub
Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
'Die Tastenkombination Strg + D wird abgefragt
If (Shift = acCtrlMask) And (KeyCode = Asc("D")) Then
Me.Text2 = Date
End If
End Sub
Private Sub Text4_KeyDown(KeyCode As Integer, Shift As Integer)
'Die Tastenkombination Strg + T wird abgefragt
If (Shift = acCtrlMask) And KeyCode = Asc("T") Then
Me.Text4 = Time
End If
End Sub
Listing 467: Die Tastenkombinationen abfragen und Aktionen durchfhren
Sandini Bib
572 Die Ereignisprogrammierung
Abbildung 295: Schnellere Eingabe durch Tastenkombinationen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Artikel2
'=====================================================
Private Sub Artikelname_KeyDown(KeyCode As Integer, Shift As Integer)
Dim DBS As Recordset
'Aktuellen Satz kopieren
If (Shift = acCtrlMask) And KeyCode = Asc("Y") Then
Set DBS = [Link]
If [Link] > 0 Then
[Link]
DBS!Artikelname = [Link]
DBS![Lieferanten-Nr] = Me.[Lieferanten-Nr]
DBS![Kategorie-Nr] = Me.[Kategorie-Nr]
DBS!Liefereinheit = [Link]
DBS!Einzelpreis = [Link]
DBS!Lagerbestand = [Link]
DBS!BestellteEinheiten = [Link]
DBS!Mindestbestand = [Link]
DBS!Auslaufartikel = [Link]
[Link]
End If
End If
End Sub
Listing 468: Aktuellen Datensatz ans Ende kopieren
Sandini Bib
Doppelte Eingaben verhindern 573
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Erstellen Sie zunchst mithilfe der Methode RecordsetClone einen Klon vom aktuell einge-
stellten Datensatz. Danach fgen Sie einen neuen Datensatz ber die Methode AddNew im For-
mular ein und fllen diesen mit den Werten aus dem Klon. Anschlieend bertragen Sie die
Werte aus dem Formular in den neuen Datensatz. ber die Methode Update speichern Sie
den neuen Datensatz.
388 Doppelte Eingaben verhindern
Bei der Erfassung von neuen Kunden im Formular Kunden haben Sie beschlossen, nur noch
eindeutige Firmennamen einzugeben. Dabei soll Access Sie untersttzen und sofort eine
Meldung auf dem Bildschirm erscheinen lassen, wenn Sie im Feld Firma einen Kunden einge-
ben, der bereits in der verknpften Tabelle Kunden gespeichert ist.
Setzen Sie fr diese Aufgabe das Ereignis BeforeUpdate des Felds Firma ein, welches Sie in
Listing 469 sehen knnen.
Prfen Sie mithilfe der Methode DLookup, ob der eingegebene Firmenname bereits in der ver-
knpften Tabelle Kunden erfasst wurde. Diese berprfung kann natrlich entfallen, wenn Sie
in dem Feld noch keinen Firmennamen erfasst haben. Dafr sorgt die Funktion IsNull, die
einen Wert vom Typ Boolean nmlich True zurckgibt, wenn das Feld leer ist. Befindet
sich der eingegebene Firmenname bereits in der verknpften Tabelle, dann knnen Sie das
Argument Cancel einsetzen, welches Sie auf den Wert True setzen, um die Speicherung des
Kunden abzubrechen.
H
i
n
w
e
i
s
Die Tastenkombination (Strg) + (Y) funktioniert nur, wenn der Mauszeiger im Feld
Artikelname des Formulars Artikel2 steht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden
'=====================================================
Private Sub Firma_BeforeUpdate(Cancel As Integer)
If (Not IsNull(DLookup("[Firma]", "Kunden", "[Firma] ='" _
& Me!Firma & "'"))) Then
MsgBox "Diese Firma wurde in der Tabelle schon angelegt!"
Cancel = True
Me![Link]
End If
End Sub
Listing 469: Dubletten-Check bei der Eingabe vornehmen
Sandini Bib
574 Die Ereignisprogrammierung
389 Eingaben vorwegnehmen
Das Ereignis BeforeUpdate lsst sich auch verwenden, um einige Formularfelder automatisch
fllen zu lassen. So knnen Sie beispielsweise bei der Eingabe der Postleitzahl den dazugeh-
rigen Ort, die Region und das Land automatisch in die dafr zur Verfgung stehenden For-
mularfelder einfgen.
Im folgenden Beispiel aus Listing 470 wird im Formular Kunden2 das Feld PLZ berwacht.
Sobald dort eine Eingabe vorgenommen wird, wird im bisherigen Kundenstamm nachgese-
hen, ob diese Postleitzahl bereits verwendet wurde. Wenn ja, dann werden der dazugehrige
Ort, die Region und das Land an den neuen Datensatz vererbt.
Prfen Sie mithilfe der Methode DLookup, ob die eingegebene Postleitzahl bereits in der ver-
knpften Tabelle Kunden erfasst wurde. Befindet sich die eingegebene Postleitzahl bereits in
der verknpften Tabelle, dann wenden Sie abermals die Methode DLookup an, um die Textfel-
der Ort, Region sowie das Kombinationsfeld Land zu fllen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Kunden2
'=====================================================
Private Sub PLZ_BeforeUpdate(Cancel As Integer)
Me!Ort = (DLookup("[Ort]", "Kunden", "[PLZ] ='" & Me!PLZ & "'"))
Me!Region = (DLookup("[Region]", "Kunden", "[PLZ] ='" & Me!PLZ & "'"))
Me!Land = (DLookup("[Land]", "Kunden", "[PLZ] ='" & Me!PLZ & "'"))
End Sub
Listing 470: ber die Postleitzahl wird im Kundenstamm nach weiteren Informationen gesucht.
Abbildung 296: Die Postleitzahl wurde erfasst.
Sandini Bib
Lschen von Feldern verhindern 575
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Und mit der Taste () ins nchste Feld positioniert. Dieser Vorgang lst das Ereignis
BeforeUpdate aus.
390 Lschen von Feldern verhindern
Mithilfe des Ereignisses BeforeUpdate knnen Sie Ihre Anwender auch davon abhalten,
bestimmte Felder im Formular Lieferanten zu lschen.
Im folgenden Ereignismakro aus Listing 471 wird verhindert, dass bereits erfasste Werte im
Textfeld Kontaktperson gelscht werden.
Mithilfe der Funktion IsNull finden Sie heraus, ob das Textfeld Kontaktperson leer ist. Wenn
ja, dann wurde die bereits erfasste Information gelscht oder es wurde bei einer Neuanlage
eines Satzes keine Kontaktperson angegeben. Im ersten Fall geben Sie eine Bildschirmmel-
dung aus und widerrufen die Lschung mithilfe der Methode Undo. Setzen Sie das Argument
Abbildung 297: Die Felder Ort, Region und Land wurden automatisch gefllt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Lieferanten
'=====================================================
Private Sub Kontaktperson_BeforeUpdate(Cancel As Integer)
If IsNull([Link]) Then
MsgBox "Sie drfen keine Kontaktperson lschen!", vbCritical
Me![Link]
Cancel = True
End If
End Sub
Listing 471: Die Lschung von Daten verhindern
Sandini Bib
576 Die Ereignisprogrammierung
Cancel auf den Wert True, damit die Lschung des Textfelds Kontaktperson in der verknpften
Tabelle Lieferanten nicht durchgefhrt wird.
Sobald Sie die Schaltflche OK anklicken, wird der ursprngliche Wert wieder im Formular
eingefgt. Sie haben keine Mglichkeit, einen Datensatz ohne Kontaktperson zu speichern.
391 QuickInfos anzeigen
Im folgenden Beispiel aus Listing 472 wurde im Formular Personal auf der Registerkarte PER-
SNLICHE DATEN das Textfeld Bemerkungen mit einer QuickInfo ausgestattet. Diese QuickInfo
wird angezeigt, sobald das Feld aktiviert wird. Selbstverstndlich muss die untersttzende
QuickInfo nicht angezeigt werden, wenn das Feld bereits gefllt ist.
Abbildung 298: Beim Lschen einer Kontaktperson wird eine Meldung angezeigt.
H
i
n
w
e
i
s
Bei der Neuanlage eines Satzes hilft Ihnen dieses Ereignis nicht wirklich weiter. Dazu
mssen Sie das Ereignis Exit einsetzen, welches im Anschluss beschrieben wird.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap08
' Dateiname [Link]
' Klasse Form_Personal
'=====================================================
Listing 472: Eine QuickInfo anzeigen
Sandini Bib
Reihenfolge beim ffnen und Schlieen eines Formulars 577
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Eigenschaft ControlTipText knnen Sie eine QuickInfo fr ein Steuerelement
anzeigen. Diese Info wird jedoch nur angezeigt, wenn das Feld Bemerkungen noch nicht gefllt
ist.
392 Reihenfolge beim ffnen und Schlieen eines
Formulars
Wenn Sie ein Formular zum ersten Mal ffnen, treten die folgenden Ereignisse in der angege-
benen Reihenfolge ein:
Open, Load, Resize, Activate, Current
Mchten Sie die Ereignisse ber das Eigenschaftenfenster einstellen, lauten die einzustellen-
den Ereignisse wie folgt:
Beim ffnen, Beim Laden, Bei Grennderung, Bei Aktivierung, Beim Anzeigen
Private Sub Bemerkungen_Enter()
Dim strText As String
strText = "Bitte eigene Informationen angeben!"
If [Link] <> "" Then
[Link] = strText
End If
End Sub
Abbildung 299: QuickInfo bei Aktivieren des Felds anzeigen
Listing 472: Eine QuickInfo anzeigen (Forts.)
Sandini Bib
578 Die Ereignisprogrammierung
Wenn Sie ein Formular schlieen, treten die folgenden Ereignisse in der angegebenen Rei-
henfolge ein:
Unload, Deactivate, Close
Um diese Ereignisse im Eigenschaftenfenster auf der Registerkarte EREIGNISSE einzusehen,
klicken Sie folgende Ereignisse an:
Bei Entladen, Bei Deaktivierung, Beim Schlieen
393 Aktivierreihenfolge bei Steuerelementen
Wenn Sie beispielsweise ber die Taste () von einem Textfeld in ein anderes wechseln, wer-
den folgende Ereignisse nacheinander ausgelst:
Enter, GotFocus, Exit, LostFocus
Diese Ereignisse heien im Eigenschaftenfenster auf der Registerkarte EREIGNISSE wie folgt:
Beim Hingehen, Bei Fokuserhalt, Beim Verlassen, Bei Fokusverlust (siehe Abbildung 301)
394 Reihenfolge der Aktualisierungsereignisse
Fr die Aktualisierung von Ereignissen stehen zwei Ereignisse in unmittelbarer Reihenfolge
untereinander: BeforeUpdate und AfterUpdate.
Diese Ereignisse heien im Eigenschaftenfenster Vor Aktualisierung und Nach Aktualisierung.
Wenn Sie in ein Steuerelement eines Formulars neue oder genderte Daten eingeben und
dann zu einem anderen Datensatz wechseln oder den Datensatz mit dem Befehl DATENSATZ
Abbildung 300: Formularereignisse ber das Eigenschaftenfenster einstellen
Sandini Bib
Eine komplette Kette von Ereignissen 579
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
SPEICHERN aus dem Men DATENSTZE speichern, tritt zunchst das BeforeUpdate-Ereignis
des Steuerelements und unmittelbar danach das BeforeUpdate-Ereignis des Formulars ein.
395 Eine komplette Kette von Ereignissen
Stellen Sie sich jetzt einmal vor, Sie mssten ein Formular ffnen, dann ein Textfeld ansprin-
gen, dort einen Wert eingeben und mit der Taste () zum nchsten Formularfeld wechseln.
Die komplette Reihenfolge der Ereignisse sieht so aus:
Open, Load, Enter, GotFocus, KeyDown, KeyPress, Change, KeyUp, BeforeUpdate, AfterUpdate, Exit,
LostFocus
Mchten Sie die Ereignisse ber das Eigenschaftenfenster einsehen, lauten die Ereignisse wie
folgt:
Beim ffnen, Bei Laden, Beim Hingehen, Bei Fokuserhalt, Bei Maustaste Ab, Bei Taste, Bei Gen-
dert, Bei Taste Auf, Vor Aktualisierung, Nach Aktualisierung, Beim Verlassen, Bei Fokusver-
lust.
Abbildung 301: Die Steuerelementereignisse
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
VBE und Security
ber die VBE-Programmierung knnen Sie direkt auf Module, Makros, Berichte und For-
mulare in einer Datenbank zugreifen. Dies werden Sie dann tun, wenn Sie beispielsweise
Ihren Quellcode in Textdateien sichern oder auch weitergeben mchten. Ebenso knnen
Sie VBE zum Subern einer Datenbank von Modulen, Ereignissen und Formularen ver-
wenden. Auerdem setzen Sie VBE ein, um Datenbanken gezielt mit bestimmten Makros
zu bestkken bzw. bereits vorhandenen Quellcode an einer bestimmten Stelle zu aktualisie-
ren oder zu ersetzen.
Bevor aber auf das Thema VBE eingegangen wird, noch ein paar Worte zum Schutz von
Quellcodes und Datenbanken sowie zum Einrichten und Verwalten von Arbeitsgruppen.
Um Ihren Quellcode zu schtzen, bieten sich Ihnen mehrere Mglichkeiten:
1. Hinterlegen eines Kennworts, mit dem Sie die Anzeige des Quellcodes verhindern kn-
nen
2. Umwandeln der Datenbank in ein Format, bei dem der Quellcode nur noch kompiliert
vorliegt und weder verndert noch eingesehen werden kann
3. Verschlsseln Ihrer Datenbank
396 Kennwort fr die Anzeige des Quellcodes anlegen
Mchten Sie Ihren Quellcode vor neugierigen Augen schtzen, dann vergeben Sie ein Kenn-
wort. Dabei befolgen Sie die folgenden Arbeitsschritte:
1. Wechseln Sie in die Entwicklungsumgebung von Access.
2. Klicken Sie Ihr VBA-Projekt im Projekt-Explorer mit der rechten Maustaste an und wh-
len Sie aus dem Kontextmen den Befehl EIGENSCHAFTEN VON.
3. Wechseln Sie auf die Registerkarte SCHUTZ.
4. Aktivieren Sie das Kontrollkstchen PROJEKT FR DIE ANZEIGE SPERREN.
5. Erfassen und besttigen Sie ein Kennwort in den unteren beiden Eingabefeldern.
6. Besttigen Sie Ihre Einstellung mit OK.
Damit diese Einstellung wirksam wird, schlieen Sie Ihre Datenbank und ffnen Sie diese
direkt im Anschluss. Wechseln Sie ber die Tastenkombination (Alt) + (F11) in die Entwick-
lungsumgebung und versuchen Sie, Ihr VBA-Projekt zu ffnen. Der Code wird nur ange-
zeigt, wenn Sie das richtige Kennwort eingeben.
Sandini Bib
582 VBE und Security
397 Datenbank ohne Quellcode speichern
Wenn Sie sich entschlieen, eine Datenbank ohne Quellcode zu speichern, oder liegt der
Quellcode kompiliert vor, mssen Sie Ihre Datenbank im MDE-Format abspeichern. Wenn
Sie eine Datenbank in diesem Format speichern, dann wird eine Kopie Ihrer Datenbank
erstellt, die keinen VBA-Quellcode enthlt und zudem kleiner ist als die Originaldatenbank.
Die Codeanweisungen liegen nun kompiliert vor und knnen weiterhin und sogar noch
schneller ausgefhrt werden. Es besteht jedoch keine Mglichkeit, den Quellcode anzuzeigen
bzw. zu bearbeiten.
Als kleiner Nebeneffekt haben Sie bei diesem Format auch keine Mglichkeit mehr, die Ent-
wurfsansicht von Formularen und Berichten aufzurufen. Kurz gesagt, es sind auch die For-
mulare und Berichte vor einer Vernderung sicher. Nebenbei haben Sie auch keine Chance,
neue Formulare oder Berichte in die MDE-Datei einzufgen. Selbst das Einfgen von Modu-
len ist hierbei nicht mglich. Aus einer MDE-Datei knnen auch keine Tabellen, Abfragen,
Formulare oder Berichte importiert bzw. exportiert werden, so dass Sie auch hierbei auf der
sicheren Seite sind.
Um eine MDE-Datei aus Ihrer Datenbank zu erzeugen, befolgen Sie die nchsten Arbeits-
schritte:
1. Stellen Sie zuvor sicher, dass kein anderer Anwender diese Datenbank im Zugriff hat.
2. Rufen Sie aus dem Men EXTRAS den Befehl DATENBANK-DIENSTPROGRAMME/MDE-
DATEI ERSTELLEN auf.
3. Whlen Sie im Dialog ALS MDE ZU SPEICHERNDE DATENBANK eine Datenbank aus, die
Sie umwandeln mchten.
4. Besttigen Sie diesen Vorgang mit Klick auf MDE ERSTELLEN.
Abbildung 302: Kennwort festlegen
Sandini Bib
Datenbanken verschlsseln 583
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
398 Datenbanken verschlsseln
Mchten Sie eine geschtzte Datenbank vor dem unbefugten Zugriff durch andere Anwen-
der bewahren, haben Sie die Mglichkeit, die Datenbank zu verschlsseln. Durch die Ver-
schlsselung wird die Datenbank unlesbar und so gegen ein unbefugtes Anzeigen oder
Verwenden geschtzt.
Damit die Verschlsselung berhaupt etwas bringt, muss die Datenbank vorher durch ein
Kennwort geschtzt werden. Befolgen Sie die nchsten Arbeitsschritte, um eine Datenbank
zu verschlsseln:
1. Sorgen Sie dafr, dass die Datenbank, die Sie verschlsseln mchten, momentan von nie-
mandem geffnet ist.
2. Whlen Sie aus dem Men EXTRAS den Befehl SICHERHEIT/DATENBANK VER-/ENTSCHLS-
SELN.
3. Geben Sie im Dialogfeld DATENBANK VERSCHLSSELN ALS im Feld DATEINAME den
Namen der neuen verschlsselten Datei an.
4. Klicken Sie auf die Schaltflche SPEICHERN.
Durch das Verschlsseln wird die Leistungsfhigkeit einer Datenbank um bis zu 15% redu-
ziert. Des Weiteren kann eine verschlsselte Datenbank mit Programmen wie DriveSpace,
WinZip oder PKZIP nicht weiter komprimiert werden. Wenn Sie eine verschlsselte Daten-
bank komprimieren, ndert sich die Gre der Datenbank daher nicht.
399 Access-Lsung mithilfe von Startparametern
absichern
Startoptionen ermglichen es Ihnen, den Zugriff auf bestimmte Standardmens und Sym-
bolleisten, auf das Datenbankfenster sowie Spezialtasten weitreichend einzuschrnken.
Im folgenden Beispiel mchten Sie das Formular Artikel gleich nach dem Start der Daten-
bank einblenden und bestimmte Aktionen verhindern.
1. Whlen Sie aus dem Men EXTRAS den Befehl START.
2. Im Drop-down-Men FORMULAR/SEITE ANZEIGEN stellen Sie das Formular Artikel ein.
3. Klicken Sie im Feld MENLEISTE auf den Namen der gewnschten Menleiste.
4. Deaktivieren Sie die Kontrollkstchen UNBESCHRNKTE MENS ANZEIGEN, STANDARD-
KONTEXTMENS ZULASSEN, DATENBANKFENSTER ANZEIGEN, EINGEBAUTE SYMBOLLEISTEN
ZULASSEN, SYMBOLLEISTEN- UND MENNDERUNGEN ZULASSEN und ACCESS-SPEZIAL-
TASTEN VERWENDEN.
5. Besttigen Sie Ihre Einstellung mit OK.
6. Schlieen Sie jetzt Ihre Datenbank.
Sandini Bib
584 VBE und Security
Nach dem erneuten Starten von Access wird das Formular Artikel direkt geffnet. Sie haben
jetzt beispielsweise keine Mglichkeit mehr, ber die Tastenkombination (Alt) + (F11) in die
Entwicklungsumgebung zu gelangen.
400 Schtzen einer Datenbank ber ein Kennwort
Eine weitere Mglichkeit, eine Datenbank zu schtzen, besteht darin, diese mit einem
Zugangskennwort zu belegen. Bevor Sie diese Aufgabe vornehmen, sollten Sie sicherstellen,
dass die Datenbank momentan nicht von einem weiteren Anwender geffnet ist.
Um eine Datenbank mit einem Zugriffskennwort zu schtzen, gehen Sie wie folgt vor:
1. Schlieen Sie die Datenbank.
2. Starten Sie Access erneut und whlen Sie aus dem Men DATEI den Befehl FFNEN.
3. Im Dialogfeld FFNEN markieren Sie die Datenbank, die Sie ber ein Kennwort absichern
mchten, und klicken auf den Pfeil der Schaltflche FFNEN.
4. Whlen Sie aus dem Kontextmen der Schaltflche den Befehl EXKLUSIV FFNEN.
5. Nachdem die Datenbank geffnet wurde, whlen Sie aus dem Men EXTRAS den Befehl
SICHERHEIT/DATENBANKKENNWORT FESTLEGEN.
6. Geben Sie im Dialogfeld DATENBANKKENNWORT FESTLEGEN ein Kennwort ein und best-
tigen Sie dieses.
7. Klicken Sie danach auf die Schaltflche OK.
Wenn nun in Zukunft versucht wird, die so geschtzte Datenbank zu ffnen, muss das Kenn-
wort eingegeben werden. Achten Sie darauf, dass Sie sich das Kennwort aufschreiben und an
einer sicheren Stelle deponieren. Es gibt standardmig keine Mglichkeit, eine Datenbank
ohne das Kennwort zu ffnen.
Abbildung 303: Startoptionen einstellen
Sandini Bib
Schtzen einer Datenbank ber ein Kennwort 585
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Geschtzte Datenbank per VBA ffnen (DAO)
In Zusammenhang mit dem ffnen geschtzter Datenbanken besteht auerdem die interes-
sante Mglichkeit, diese Aufgabe ber ein VBA-Makro auszufhren. Das Makro aus Listing
473 ffnet die geschtzte Datenbank [Link], die sich im Verzeichnis C:\Eigene
Dateien befindet.
Als kleine Vorarbeit fr diese Aufgabe aktivieren Sie eine zustzliche Bibliothek, indem Sie
wie folgt vorgehen:
1. Wechseln Sie in die Entwicklungsumgebung.
2. Whlen Sie aus dem Men EXTRAS den Befehl VERWEISE.
3. Aktivieren Sie die Bibliothek MICROSOFT DAO 3.6 OBJECT LIBRARY.
4. Besttigen Sie Ihre Einstellung mit OK.
Erfassen Sie jetzt das Makro aus Listing 473:
Abbildung 304: Die DAO-Bibliothek aktivieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Listing 473: Geschtzte Datenbank ffnen (DAO)
Sandini Bib
586 VBE und Security
Im ersten Schritt erstellen Sie mithilfe der Methode CreateObject ein neues Access-2003-
Objekt. Danach setzen Sie das Kennwort in der Variablen strPass zusammen. Die DBEngine
ist das Objekt der obersten Ebene in einem DAO-Objektmodell. Das DBEngine-Objekt enthlt
und steuert alle anderen Objekte in der DAO-Objekthierarchie. ber dieses Objekt knnen
Sie die Methode OpendDatabase einsetzen, um eine angegebene Datenbank in einem
Workspace-Objekt zu ffnen. Dabei wird ein Verweis auf das Database-Objekt zurckgegeben,
das diese Datenbank reprsentiert. Geben Sie in dieser Methode als Argument Ihr Kennwort
ein, welches Sie vorher Ihrer Datenbank zugewiesen haben. ffnen Sie die Datenbank letzt-
endlich ber die Methode OpenCurrentDatabase in dem neuen Access-Objekt und schlieen
Sie das Database-Objekt ber die Methode Close.
Geschtzte Datenbank per VBA ffnen (ADO)
Selbstverstndlich knnen Sie eine geschtzte Datenbank auch ber ADO ffnen und verar-
beiten. Im folgenden Beispiel aus Listing 474 wird die Datenbank [Link] im Hinter-
grund geffnet, die Tabelle ARTIKEL geffnet, die Artikelnamen werden ausgelesen, die Tabelle
und die Datenbank danach wieder geschlossen.
Sub DatenbankMitKennwortffnen()
Dim accObj As Object
Dim strPass As String
Dim db As Database
Set accObj = CreateObject("[Link].11")
strPass = ";PWD=test;"
On Error GoTo fehler
Set db = [Link] _
("C:\Eigene Dateien\[Link]", False, False, sPass)
[Link] "C:\Eigene Dateien\[Link]"
[Link]
Set db = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Listing 474: Geschtzte Datenbank ffnen (ADO)
Listing 473: Geschtzte Datenbank ffnen (DAO) (Forts.)
Sandini Bib
Schtzen einer Datenbank ber ein Kennwort 587
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Eigenschaft Provider geben Sie den Namen des Providers fr das Connection-Objekt
an. ber die Properties-Auflistung bergeben Sie der Verbindung Ihr Kennwort. ber die
Eigenschaft Mode knnen Sie die Berechtigungen fr das ndern von Daten im Connection-
Objekt conn bestimmen. Dabei haben Sie die folgenden Mglichkeiten aus Tabelle 137:
Sub DatenbankffnenADO()
Dim conn As [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set conn = New [Link]
With conn
.Provider = "[Link].4.0"
.Properties("Jet OLEDB:Database Password") = "test"
.Mode = adModeReadWrite
.Open "C:\Eigene Dateien\[Link]"
End With
Set DBS = New [Link]
[Link] = adOpenDynamic
[Link] = adLockPessimistic
[Link] "Artikel", conn, , , adCmdTable
Do While Not [Link]
[Link] DBS!Artikelname
[Link]
Loop
[Link]
[Link]
Set conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Konstante Beschreibung
adModeUnknown
Diese Standardeinstellung gibt an, dass die Berechtigungen
noch nicht festgelegt wurden oder nicht bestimmt werden
knnen.
adModeRead
Gibt schreibgeschtzte Berechtigungen an.
adModeWrite
Gibt Nur-Lese-Berechtigungen an.
Tabelle 137: Die Konstanten der Eigenschaft Mode
Listing 474: Geschtzte Datenbank ffnen (ADO) (Forts.)
Sandini Bib
588 VBE und Security
Mithilfe der Methode Open ffnen Sie die Datenbank. Im nchsten Schritt erzeugen Sie ein
neues Recordset-Objekt und geben ber die Eigenschaft CursorType an, welcher Cursor beim
ffnen des Recordset-Objekts verwendet werden soll. Diese Eigenschaft legen Sie ber Cur-
sor-Konstanten fest, die Sie in der Tabelle 138 einsehen knnen.
ber die Eigenschaft LockType legen Sie die Art der Sperrung fest, die whrend des Bearbei-
tens auf Datenstze angelegt wird. Auch bei dieser Eigenschaft knnen Sie die Sperrung ber
Konstanten festlegen, die Sie in Tabelle 139 sehen knnen.
adModeReadWrite
Gibt Schreib-/Leseberechtigungen an.
adModeShareDenyRead
Verhindert das ffnen einer Verbindung mit Lese-
berechtigungen durch andere Personen.
adModeShareDenyWrite
Verhindert das ffnen einer Verbindung mit Schreib-
berechtigungen durch andere Personen.
adModeShareExclusive
Verhindert das ffnen einer Verbindung durch andere
Personen.
adModeShareDenyNone
Verhindert das ffnen einer Verbindung mit beliebigen
Berechtigungen durch andere Personen.
Konstante Beschreibung
adOpenForwardOnly
Vorwrts-Cursor (Voreinstellung). Dieser Cursor ist identisch mit
einem statischen Cursor, mit dem Unterschied, dass ein Blttern
durch die Datenstze nur in Vorwrtsrichtung mglich ist. Dies
verbessert die Leistung in Situationen, in denen nur ein einziger
Durchlauf durch ein Recordset durchgefhrt werden muss.
adOpenKeyset
Cursor vom Typ Keyset. hnelt einem dynamischen Cursor, mit
dem Unterschied, dass von anderen Personen hinzugefgte Daten-
stze nicht angezeigt werden knnen, obwohl ein Zugriff auf von
anderen Benutzern gelschte Datenstze von Ihrem Recordset aus
nicht mglich ist. Von anderen Personen vorgenommene Daten-
nderungen knnen weiterhin angezeigt werden.
adOpenDynamic
Dynamischer Cursor. Von anderen Personen vorgenommene
Zustze, nderungen und Lschvorgnge knnen angezeigt wer-
den. Alle Bewegungsarten durch den Datensatz sind zulssig, auer
Lesezeichen (sofern der Provider diese nicht untersttzt).
adOpenStatic
Statischer Cursor. Eine statische Kopie einer Gruppe von Datenst-
zen, anhand deren Daten gesucht und Berichte generiert werden
knnen. Von anderen Benutzern vorgenommene Zustze, nde-
rungen oder Lschvorgnge knnen nicht angezeigt werden.
Tabelle 138: Die Konstanten der Eigenschaft CursorType
Konstante Beschreibung
Tabelle 137: Die Konstanten der Eigenschaft Mode (Forts.)
Sandini Bib
Datenbankkennwort ndern 589
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ffnen Sie die Tabelle ARTIKEL, indem Sie die Methode Open einsetzen. ber die Konstante
adCmdTable geben Sie an, dass ADO eine SQL-Abfrage generieren soll, um alle Zeilen der in
Source benannten Tabelle zurckzugeben.
Durchlaufen Sie im Anschluss eine Schleife, die so lange durchlaufen wird, bis die Eigen-
schaft EOF erfllt ist. Dann ist der letzte Satz erreicht. Innerhalb der Schleife geben Sie die
Artikelnamen der Tabelle Artikel im Direktbereich von Access aus. Positionieren Sie mit der
Methode MoveNext jeweils auf den nchsten Datensatz in der Tabelle.
Schlieen Sie danach die Tabelle und die Datenbank ber die Methode Close und heben Sie
die Objektverknpfung auf.
401 Datenbankkennwort ndern
Im nchsten Beispiel ndern Sie ein Kennwort fr eine Datenbank ber ein VBA-Makro.
Dabei entfallen die sonst blichen Arbeitsschritte zum ndern eines Kennworts. Stellen Sie
sicher, dass der Objektverweis auf die DAO-Bibliothek gesetzt ist, und starten Sie danach das
Makro aus Listing 475.
Konstante Beschreibung
adLockReadOnly
Voreinstellung. Schreibgeschtzt Sie knnen die Daten
nicht ndern.
adLockPessimistic
Vollstndiges Sperren, Datensatz fr Datensatz der Provi-
der fhrt die notwendigen Schritte aus, um das erfolgreiche
Bearbeiten der Datenstze sicherzustellen, blicherweise,
indem er Datenstze in der Datenquelle sofort beim
Bearbeiten sperrt.
adLockOptimistic
Teilweises Sperren, Datensatz fr Datensatz der Provider
verwendet teilweises Sperren, indem er Datenstze nur
sperrt, wenn Sie die Update-Methode aufrufen.
adLockBatchOptimistic
Teilweise Stapelaktualisierungen erforderlich fr den Sta-
pelaktualisierungsmodus, im Gegensatz zum Modus fr
sofortige Aktualisierung.
Tabelle 139: Die Konstanten der Eigenschaft LockType
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub Kennwortndern()
Dim db As [Link]
Dim strK As String
Listing 475: Datenbankkennwort ndern (DAO)
Sandini Bib
590 VBE und Security
Basteln Sie sich im ersten Schritt einen String, der das Krzel PWD sowie das aktuelle Kenn-
wort Ihrer Datenbank enthlt. Danach definieren Sie zwei Strings, in denen Sie das alte sowie
das neue Passwort ablegen.
ffnen Sie die Datenbank ber die Methode OpenDatabase und setzen Sie danach die
Methode NewPassword ein, um ein neues Kennwort fr die Datenbank einzustellen.
Die Zeichenfolgen strAltPwd und strNeuPwd knnen maximal 14 Zeichen lang sein und alle
Zeichen auer dem ASCII-Zeichen 0 enthalten.
Sie knnen ein Kennwort lschen, indem Sie fr die Zeichenfolge strNeuPwd die Zeichen ""
verwenden.
402 Arbeitsgruppe anlegen
Wenn Ihnen der normale Zugriff ber die Kennworteingabe nicht ausreicht, knnen Sie in
Access auch eine professionelle Benutzerverwaltung einrichten und ganz gezielt bestimmen,
welcher Anwender welche Aufgaben durchfhren darf. Dabei knnen Sie entweder einzelnen
Benutzern Rechte einrumen oder Arbeitsgruppen definieren und damit allen Benutzern
einer Arbeitsgruppe bestimmte Rechte vergeben.
Die Anlage einer neuen Gruppe kann manuell erfolgen, aber auch ber ein VBA-Makro
erledigt werden. Sehen Sie sich dazu das Makro aus Listing 476 an.
Dim strAltPwd As String
Dim strNeuPwd As String
strK = ";pwd=test"
strAltPwd = "test"
strNeuPwd = "testNeu"
On Error GoTo fehler
Set db = OpenDatabase (Name:="C:\Eigene Dateien\[Link]", _
Options:=True, ReadOnly:=False, Connect:=strK)
With db
.NewPassword strAltPwd, strNeuPwd
.Close
End With
Set db = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 475: Datenbankkennwort ndern (DAO) (Forts.)
Sandini Bib
Arbeitsgruppe anlegen 591
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Setzen Sie die Methode CreateGroup ein, um eine neue Gruppe zu erzeugen. Dabei mssen
Sie den Namen sowie eine eindeutige ID angeben. ber die Methode Append hngen Sie diese
neue Gruppe an. Fgen Sie danach der neuen Gruppe einen Administrator als Mitglied
hinzu, indem Sie das entsprechende Group-Objekt mithilfe der Methode CreateGroup erstellen
und der Groups-Auflistung des Benutzers ber die Methode Append hinzufgen.
Wenn Sie diese Aufgabe mit ADO lsen mchten, binden Sie vorher in der Entwicklungsum-
gebung ber das Men EXTRAS und den Befehl VERWEISE die Bibliothek MICROSOFT ADO
EXT 2.5 fr Office 2002 bzw. MICROSOFT ADO EXT 2.7 fr Office 2003 ein. Starten Sie
danach das Makro aus Listing 477.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub NeueGruppeErzeugen()
Dim WS As Workspace
Dim NeueGruppe As Group
Dim NeueGrT As Group
Set WS = [Link](0)
With WS
Set NeueGruppe = .CreateGroup("NeueGruppe", "XYZ09012892")
.[Link] NeueGruppe
Set NeueGrT = .Users("Admin").CreateGroup("NeueGruppe")
.Users("Admin").[Link] NeueGrT
End With
End Sub
Listing 476: Neue Arbeitsgruppe anlegen (DAO)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub GruppeAnlegenADO()
Dim KDB As [Link]
On Error GoTo fehler
Set KDB = New [Link]
With KDB
.ActiveConnection = [Link]
.[Link] "ATeam"
Listing 477: Neue Arbeitsgruppe anlegen (ADO)
Sandini Bib
592 VBE und Security
Erstellen Sie eine neue Gruppe, indem Sie die Methode Append einsetzen. Geben Sie dabei den
Namen der Gruppe an.
403 Arbeitsgruppe entfernen (DAO)
Um eine Gruppe wieder zu lschen, knnen Sie das Makro aus Listing 478 verwenden.
Geben Sie den Namen der Gruppe in einer String-Variablen an und bergeben Sie diesen an
die Methode Delete.
Den entsprechenden Code in ADO knnen Sie dem Listing 479 entnehmen.
End With
Set KDB = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub GruppeEntfernen()
Dim WS As Workspace
Dim strGruppe As String
On Error GoTo fehler
Set WS = [Link](0)
strGruppe = [Link]("NeueGruppe").Name
[Link] strGruppe
Exit Sub
fehler:
MsgBox "die Gruppe " & strGruppe & _
" konnte nicht gefunden/gelscht werden!"
End Sub
Listing 478: Arbeitsgruppe lschen (DAO)
Listing 477: Neue Arbeitsgruppe anlegen (ADO) (Forts.)
Sandini Bib
Benutzer anlegen 593
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Greifen Sie auf das Auflistungsobjekt Groups zu, in dem alle Gruppen verzeichnet sind. Setzen
Sie dort die Methode Delete ein, um die Gruppe zu lschen.
404 Benutzer anlegen
Haben Sie die Gruppe angelegt, fgen Sie die Benutzer in die Gruppe mit dem Makro aus
Listing 480 ein.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub GruppeEntfernenADO()
Dim KDB As [Link]
Set KDB = New [Link]
On Error GoTo fehler
With KDB
.ActiveConnection = [Link]
.[Link] "ATeam"
End With
Set catDB = Nothing
Exit Sub
fehler:
MsgBox "Die Gruppe konnte nicht entfernt werden!"
End Sub
Listing 479: Arbeitsgruppe lschen (ADO)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub NeuenBenutzerErzeugen()
Dim WS As Workspace
Dim Benutzer As User
On Error GoTo fehler
Set WS = DBEngine(0)
Set Benutzer = [Link]("Walter", "1002", "Test")
[Link] Benutzer
Listing 480: Neuen Benutzer anlegen (DAO)
Sandini Bib
594 VBE und Security
ber die Methode CreateUser erstellen Sie einen neuen Benutzer. Dabei mssen Sie den
Namen sowie eine eindeutige ID angeben. Optional knnen Sie noch ein Kennwort fr den
Benutzer angeben. Mithilfe der Methode Append hngen Sie diesen Benutzer endgltig an.
Danach weisen Sie dem neuen Benutzer die Gruppe Benutzer zu.
Soll der Vorgang mit ADO gelst werden, dann wenden Sie das Makro aus Listing 481 an.
ffnen Sie das Catalog-Objekt ber die Verknpfung mit der aktuellen Datenbank und
fgen Sie der Users-Auflistung ein neues User-Objekt hinzu, indem Sie die Methode Append
einsetzen. Hngen Sie danach das neue Benutzerkonto an die Standard-Benutzergruppe wie-
derum ber die Methode Append an.
[Link] [Link]("Users")
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub BenutzerAnlegenADO()
Dim KDB As [Link]
On Error GoTo fehler
Set KDB = New [Link]
With KDB
.ActiveConnection = [Link]
.[Link] "Hero", "Test"
.Groups("Users").[Link] "Hero"
End With
Set KDB = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 481: Neuen Benutzer anlegen (ADO)
Listing 480: Neuen Benutzer anlegen (DAO) (Forts.)
Sandini Bib
Benutzer entfernen 595
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
405 Benutzer entfernen
Mchten Sie einen Benutzer per VBA wieder entfernen, starten Sie das Makro aus Listing
482.
Mithilfe der Methode Delete lschen Sie einen bereits angelegten Benutzer. Geben Sie dabei
den Namen des Benutzers in einem String an.
Das Makro in ADO sehen Sie in Listing 483:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub BenutzerEntfernen()
Dim strBenutzer As String
Dim WS As Workspace
On Error GoTo fehler
Set WS = DBEngine(0)
strBenutzer = [Link]("Walter").Name
[Link] strBenutzer
Exit Sub
fehler:
MsgBox "Der Benutzer konnte nicht gelscht werden!"
End Sub
Listing 482: Benutzer entfernen (DAO)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub BenutzerEntfernenADO()
Dim KDB As [Link]
On Error GoTo fehler
Set KDB = New [Link]
With KDB
.ActiveConnection = [Link]
.[Link] "Hero"
End With
Listing 483: Benutzer entfernen (ADO)
Sandini Bib
596 VBE und Security
Setzen Sie die Methode Delete ein, um einen Benutzer zu lschen. Wenden Sie diese Methode
innerhalb des Auflistungsobjekts Users an, in dem alle Benutzer verzeichnet sind.
406 Benutzer auslesen
Um zu erfahren, welche Benutzer berhaupt bereits angelegt wurden, knnen Sie das Auf-
listungsobjekt Groups anzapfen und die Namen der Benutzer im Direktbereich ausgeben.
407 Berechtigungen zuweisen
Nachdem Sie sowohl die Gruppe(n) als auch den Benutzer angelegt haben, ordnen Sie die
Benutzer einzelnen Gruppen zu. Mithilfe eines Makros knnen Sie gezielt Berechtigungen
zuweisen. Im nchsten Beispiel aus Listing 485 weisen Sie dem Benutzer Schmidt eine spe-
zielle Berechtigung fr die Tabelle Artikel zu.
Set catDB = Nothing
Exit Sub
fehler:
MsgBox "Der Benutzer konnte nicht entfernt werden!"
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlDAO
'=====================================================
Sub Benutzeranzeigen()
Dim WS As Workspace
Dim Benutzer As User
Set WS = DBEngine(0)
For Each Benutzer In [Link]
[Link] [Link]
Next Benutzer
End Sub
Listing 484: Benutzer auslesen (DAO)
Listing 483: Benutzer entfernen (ADO) (Forts.)
Sandini Bib
Berechtigungen zuweisen 597
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Methode SetPermissions knnen Sie die einzelnen Berechtigungen hinzufgen.
Dabei hat diese Methode folgende Syntax:
SetPermissions Name, ObjectType, Action, Rights
Im Argument Name geben Sie den Namen des Access-Objekts an, welches Sie schtzen mch-
ten. Beim Argument ObjectType setzen Sie eine der in der Tabelle 140 aufgelisteten Konstan-
ten ein.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlADO
'=====================================================
Sub BerechtigungenHinzufgenADO()
Dim conn As New [Link]
Dim KDB As New [Link]
On Error GoTo fehler
[Link] = "[Link].4.0"
Set [Link] = [Link]
[Link]("Schmidt").SetPermissions "Artikel", _
adPermObjTable, adAccessSet, adRightInsert
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 485: Berechtigungen hinzufgen (ADO)
Konstante Beschreibung
adPermObjTable
Objekt ist eine Tabelle.
adPermObjColumn
Objekt ist eine Spalte.
adPermObjDatabase
Objekt ist eine Datenbank.
adPermObjProcedure
Objekt ist eine Prozedur.
adPermObjView
Objekt ist eine Ansicht.
adPermObjSchema
Objekt ist ein Schema.
adPermObjDomain
Objekt ist eine Domne.
adPermObjCollation
Objekt ist eine Zusammenstellung.
adPermObjSchemaRowset
Objekt ist ein Rowset eines Schemas.
adPermObjCharacterSet
Objekt ist ein Zeichensatz.
adPermObjTranslation
Objekt ist eine bersetzung.
Tabelle 140: Die Objekttypen der Methode SetPermissions
Sandini Bib
598 VBE und Security
Im Argument Action geben Sie an, welcher Aktivittstyp beim Festlegen von Berechtigungen
durchgefhrt werden soll. Die folgenden Konstanten stellen gltige Werte fr Action dar:
Im letzten Argument Rights geben Sie die einzelnen Rechte an, die der Benutzer/die Gruppe
bekommen soll.
Konstante Beschreibung
adAccessGrant
Die Gruppe oder der Benutzer erhlt mindestens die
angeforderten Berechtigungen.
adAccessSet
Die Gruppe oder der Benutzer erhlt genau die angefor-
derten Berechtigungen.
adAccessDeny
Der Gruppe oder dem Benutzer werden die angegebenen
Berechtigungen verweigert.
adAccessRevoke
Alle der Gruppe oder dem Benutzer ausdrcklich
gewhrten Zugriffsrechte werden widerrufen.
adAccessAuditSuccess
Die Gruppe wird berprft, wenn das Objekt, das die
angeforderten Berechtigungen verwendet, erfolgreich
geffnet wird.
adAccessAuditFailure
Die Gruppe wird berprft, wenn das ffnen des
Objekts, das die angeforderten Berechtigungen verwen-
det, fehlschlgt.
Tabelle 141: Die Action-Konstanten der Methode SetPermissions
Konstante Beschreibung
adRightExecute
Der Benutzer bzw. die Gruppe hat die Berechtigung,
das Objekt auszufhren.
adRightRead
Der Benutzer bzw. die Gruppe hat die Berechtigung,
das Objekt zu lesen.
adRightUpdate
Der Benutzer bzw. die Gruppe hat die Berechtigung,
das Objekt zu aktualisieren.
adRightInsert
Der Benutzer bzw. die Gruppe hat die Berechtigung,
das Objekt einzufgen.
adRightDelete
Der Benutzer bzw. die Gruppe hat die Berechtigung,
das Objekt zu lschen.
adRightReference
Der Benutzer bzw. die Gruppe hat die Berechtigung,
auf das Objekt zu verweisen.
adRightCreate
Der Benutzer bzw. die Gruppe hat die Berechtigung,
das Objekt zu erstellen.
Tabelle 142: Die Rights-Konstanten der Methode SetPermissions
Sandini Bib
Der Zugriff auf die VBE 599
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
berprfen Sie die zugewiesenen Berechtigungen, indem Sie aus dem Men EXTRAS den
Befehl SICHERHEIT/BENUTZER- UND GRUPPENBERECHTIGUNGEN auswhlen.
408 Der Zugriff auf die VBE
Ganz oben in der Hierarchie der Objekte der Entwicklungsumgebung steht das Objekt VBE.
Das VBE-Objekt hat mehrere Auflistungsobjekte bzw. Objekte fr den Zugriff auf die einzel-
nen Elemente:
adRightWithGrant
Der Benutzer bzw. die Gruppe hat die Berechtigung,
Berechtigungen fr das Objekt zu erteilen.
adRightDesign
Der Benutzer bzw. die Gruppe hat die Berechtigung,
das Objekt zu entwerfen.
adRightAll
Der Benutzer bzw. die Gruppe hat alle Berechtigungen
fr das Objekt.
H
i
n
w
e
i
s
Mchten Sie mehrere Rechte vergeben, trennen Sie die einzelne Rechte durch ein Plus-
zeichen voneinander ab.
[Link]("Schmidt").SetPermissions "Artikel", adPermObjTable, adAccessSet,
adRightInsert + adRightRead
Objekt Beschreibung
AddIns-Auflistung Sie regelt den Zugriff auf die Auflistung der
Add-Ins.
Windows-Auflistung Stellt Methoden und Eigenschaften fr den
Zugriff auf die Fenster, wie z. B. Projekt- und
Eigenschaftenfenster, bereit.
CodePanes-Auflistung Ist fr den Zugriff auf die geffneten Code-
Bereiche eines Projekts verantwortlich.
CodeModul
Enthlt den Code fr Komponenten, wie z. B.
Formulare, Klassen oder Dokumente.
CommandBars- Auflistung Kmmert sich um den Zugriff auf die Auf-
listung der Befehlsleisten.
VBComponent
Stellt eine Komponente dar, wie z. B. ein Klas-
senmodul oder ein Standardmodul eines
Projekts.
Tabelle 143: Die wichtigsten Objekte in der VBE
Konstante Beschreibung
Tabelle 142: Die Rights-Konstanten der Methode SetPermissions (Forts.)
Sandini Bib
600 VBE und Security
Auf den folgenden Seiten knnen Sie typische Beispiele rund um den Einsatz der VBE-Pro-
grammierung nachschlagen.
VBProjects-Auflistung In diesem Auflistungsobjekt sind alle geffneten
Projekte in der Entwicklungsumgebung ver-
zeichnet.
H
i
n
w
e
i
s
Wenn Sie herausfinden mchten, welche Objekte, Methoden und Eigenschaften in
einer bestimmten Bibliothek enthalten sind, mssen Sie diese vorher einbinden.
Anschlieend knnen Sie in der Entwicklungsumgebung die Taste (F2) drcken, um
den Objektkatalog anzuzeigen.
Abbildung 305: Der Objektkatalog gibt Auskunft ber die einsetzbaren Befehle einer Bibliothek.
Objekt Beschreibung
Tabelle 143: Die wichtigsten Objekte in der VBE (Forts.)
Sandini Bib
Die VBE-Bibliothek einbinden 601
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
409 Die VBE-Bibliothek einbinden
Als wichtigste Bibliothek, bevor Sie berhaupt mit der VBE-Programmierung beginnen soll-
ten, muss zunchst die VBE-Bibliothek eingebunden werden. Mithilfe der Methoden und
Eigenschaften dieser Bibliothek knnen Sie frei in der Entwicklungsumgebung herumpro-
grammieren.
Manuelles Einbinden der VBE-Bibliothek
Um die Objektbibliothek MICROSOFT VISUAL BASIC FOR APPLICATIONS EXTENSIBILITY 5.3 ein-
zubinden, verfahren Sie wie folgt:.
1. Wechseln Sie in die Entwicklungsumgebung.
2. Whlen Sie aus dem Men EXTRAS den Befehl VERWEISE.
3. Klicken Sie im Listenfeld VERFGBARE VERWEISE auf das Kontrollkstchen der Bibliothek
MICROSOFT VISUAL BASIC FOR APPLICATIONS EXTENSIBILITY 5.3.
4. Besttigen Sie diese Einstellung mit OK.
Whlen Sie aus dem Drop-down-Men links oben die gewnschte Bibliothek aus, zu
der Sie die zur Verfgung stehenden Objekte, Methoden und Eigenschaften einsehen
mchten. Standardmig ist der Eintrag ALLE BIBLIOTHEKEN ausgewhlt, was bedeutet,
dass alle Objekte, Methoden und Eigenschaften der momentan aktivierten Biblio-
theken angezeigt werden.
Abbildung 306: Die VBE-Bibliothek einbinden
Sandini Bib
602 VBE und Security
Automatisches Einbinden der VBE-Bibliothek
Selbstverstndlich knnen Sie diese manuelle Einstellung auch elegant durch das Makro aus
Listing 486 vornehmen.
Die Methode AddFromGuid fgt der References-Auflistung einen Verweis hinzu, wobei der glo-
bal eindeutige Bezeichner (GUID) des Verweises verwendet wird. Die Syntax der Methode
lautet:
AddFromGuid(GUID, HauptNr, NebenNr) As Reference
Das Argument Guid gibt einen Wert vom Typ String zurck, der die Klassen-ID eines Objekts
enthlt. Bei der Guid handelt es sich um eine eindeutige Nummer, welche die Bibliothek iden-
tifiziert.
Das Argument HauptNr gibt einen Wert vom Typ Long zurck, der die Hauptversionsnummer
der Klassenbibliothek, auf die verwiesen wird, enthlt.
Das Argument NebenNr gibt einen Wert vom Typ Long zurck, der die Nebenversionsnummer
der Klassenbibliothek, auf die verwiesen wird, anzeigt. Beide Nummern sind notwendig, um
die Bibliothek richtig zu adressieren. Anhand dieser beiden Nummern durchsucht die
Methode AddFromGuid die Registrierung, um den hinzuzufgenden Verweis zu ermitteln und
einzubinden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub VBEAktivieren()
Dim VBEObj As Object
On Error Resume Next
VBEObj = [Link]. _
AddFromGuid("{0002E157-0000-0000-C000-000000000046}", 5, 3)
Set VBObj = Nothing
End Sub
Listing 486: Die VBE-Bibliothek ber ein Makro aktivieren
H
i
n
w
e
i
s
Sobald Sie die Bibliothek fr die VBE-Programmierung eingebunden haben, knnen
Sie auf alle Objekte, Methoden und Eigenschaften zugreifen, die in dieser Bibliothek
gespeichert sind. Um mehr Informationen zu einem bestimmten Befehl zu erhalten,
knnen Sie sich entweder das Objektmodell ansehen und sich dann hierarchisch von
oben nach unten durcharbeiten oder den Befehl mit dem Mauszeiger markieren und
die Taste (F1) drcken, um die Online-Hilfe aufzurufen.
Sandini Bib
Die VBE-Bibliothek einbinden 603
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die kleine bzw. groe Hilfe
Da es nahezu unmglich ist, smtliche GUIDs, Haupt- und Nebennummern auswendig zu
wissen, wenden Sie das Makro aus Listing 487 an, um alle Informationen diesbezglich im
Direktfenster der Entwicklungsumgebung auszulesen.
In einer For Each Next-Schleife werden alle eingebundenen Bibliotheken ausgelesen. Inner-
halb der Schleife geben Sie die GUIDS, Haupt- und Nebennummern ber die Anweisung
[Link] im Direktfenster der Entwicklungsumgebung aus.
Weitere Bibliotheken einbinden
Mithilfe des Makros aus Listing 487 ist es jetzt nicht mehr allzu schwierig, weitere Bibliothe-
ken bei Bedarf auszulesen und ein Makro zu schreiben, welche die Verweise automatisch
setzt.
Im folgenden Makro aus Listing 488 werden die Objektbibliotheken fr MICROSOFT EXCEL
sowie MICROSOFT WORD automatisch gesetzt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub VerweiseGUID()
Dim Verweis As Reference
For Each Verweis In [Link]
[Link] [Link]
[Link] "GUID" & [Link]
[Link] "HauptNr: " & [Link]
[Link] "NebenNr: " & [Link] & vbLf
Next Verweis
End Sub
Listing 487: Die GUIDs der eingebundenen Bibliotheken auslesen
Sandini Bib
604 VBE und Security
Abbildung 307: Alle GUIDs, Haupt- und Nebennummern wurden ermittelt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub WeitereBibliothekenEinbindenVar1()
Dim VBEObj As Object
On Error Resume Next
'Microsoft Excel 2003 einbinden
VBEObj = [Link]. _
AddFromGuid("{00020813-0000-0000-C000-000000000046}", 1, 5)
'Microsoft Word 2003 einbinden
VBEObj = [Link]. _
AddFromGuid("{00020905-0000-0000-C000-000000000046}", 8, 3)
Set VBEObj = Nothing
End Sub
Listing 488: Bibliotheken einbinden Variante 1
Sandini Bib
Die VBE-Bibliothek einbinden 605
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Methode AddFRomGuid die gewnschten Informationen. Kontrollieren Sie
danach ber den Menbefehl EXTRAS/VERWEISE, ob die Bibliotheken MICROSOFT EXCEL und
MICROSOFT WORD nun gesetzt sind.
Die Alternative zum Einbinden
Eine alternative Mglichkeit, Bibliotheken einzubinden, stellt die Methode AddFromFile zur
Verfgung.
Mit der Methode AddFromFile fgen Sie dem Projekt einen Verweis aus einer Datei hinzu.
Dazu muss allerdings der Name der Bibliothek bekannt sein. Diesen knnen Sie ber den
Menbefehl EXTRAS/VERWEISE im zugehrigen Dialogfeld nachsehen.
Im folgenden Beispiel aus Listing 489 werden die beiden Bibliotheken fr Excel und Word
mithilfe der Methode AddFromFile eingebunden.
Abbildung 308: Die Bibliotheken fr Excel und Word wurden eingebunden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub WeitereBibliothekenEinbindenVar2()
Dim VBEObj As Object
Set VBEObj = [Link]
On Error Resume Next
Listing 489: Bibliotheken einbinden Variante 2
Sandini Bib
606 VBE und Security
bergeben Sie den Namen der Bibliothek der Methode AddFromFile.
Bibliotheks-Objektnamen auslesen
Sollen die Verweise der beiden Bibliotheken wieder entfernt werden, dann kommt die
Methode Remove zum Einsatz. Wenn Sie die Methode Remove zum Entfernen der Verweise auf
eine Bibliothek einsetzen, mssen Sie wissen, wie der entsprechende Objektname der Biblio-
thek lautet. Um also zu erfragen, wie beispielsweise die Objektnamen der Bibliotheken Excel
und Word heien, starten Sie das Makro aus Listing 490, das die Namen aller Bibliotheken
ermittelt.
In einer For Each Next-Schleife werden alle aktiven Verweise durchlaufen. Dabei werden
innerhalb der Schleife die Namen der eingebundenen Bibliotheken ber die Eigenschaft Name
ermittelt und mithilfe der Anweisung [Link] im Direktfenster ausgegeben.
Bibliotheken wieder deaktivieren
Fr Excel wird der Objektname EXCEL, fr Word der Objektname WORD verwendet. berge-
ben Sie diese Namen wie in Listing 491 gezeigt jetzt an die Methode Remove, um die beiden
Objektbibliotheken wieder zu deaktivieren.
[Link] "[Link]"
[Link] "[Link]"
Set VBObj = Nothing
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub Verweisnamen()
Dim ref As Object
For Each ref In [Link]
[Link] [Link]
Next ref
End Sub
Listing 490: Die Namen der aktiven Verweise werden ausgelesen.
Listing 489: Bibliotheken einbinden Variante 2 (Forts.)
Sandini Bib
Verweise auslesen 607
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Methode Remove die jeweiligen Objektnamen, um die Bibliotheken in der
Entwicklungsumgebung zu deaktivieren. Heben Sie danach den Objektverweis wieder auf,
indem die Verbindung der Objektvariablen zum zugehrigen Objekt aufzuheben.
410 Verweise auslesen
Je nachdem, welche VBA-Befehle Sie einsetzen mchten, muss die eine oder andere Biblio-
thek in der Entwicklungsumgebung eingebunden sein, da es sonst zu Fehlern und Makro-
abstrzen kommt.
Das folgende Makro aus Listing 492 listet alle eingebundenen Bibliotheken im Direktfenster
der Entwicklungsumgebung auf.
Abbildung 309: Die Namen der Verweise wurden ermittelt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub BibliothekenDeaktivieren()
Dim VBEObj As Object
On Error Resume Next
Set VBEObj = [Link]
[Link] VBEObj("Word")
[Link] VBEObj("Excel")
Set vbobj = Nothing
End Sub
Listing 491: Bibliotheken deaktivieren
Sandini Bib
608 VBE und Security
Definieren Sie im ersten Schritt eine Objektvariable vom Typ Reference. Danach durchlaufen
Sie in einer Schleife alle Verweise, indem Sie das Auflistungsobjekt References abfragen.
Geben Sie danach den Namen des Verweises mithilfe der Eigenschaft Name sowie den kom-
pletten Pfad des Verweises ber die Eigenschaft FullPath im Direktfenster der Entwicklungs-
umgebung aus (siehe Abbildung 310).
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub VerweiseAusgeben()
Dim Verweis As Reference
For Each Verweis In [Link]
[Link] [Link] & vbLf & [Link] & vbLf
Next Verweis
End Sub
Listing 492: Alle eingebundenen Bibliotheken auslesen
Abbildung 310: Die Namen und Speicherpfade der eingebundenen Bibliotheken ausgeben
Sandini Bib
Auf der Suche nach fehlerhaften Verweisen 609
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
411 Auf der Suche nach fehlerhaften Verweisen
Ist eine Bibliothek in der Entwicklungsumgebung nicht verfgbar, dann kann es beim Aus-
fhren von Makros zu Fehlern kommen. Mit dem Makro aus Listing 493 knnen Sie im Vor-
feld schon fehlerhafte Verweise aufspren und im Direktfenster der Entwicklungsumgebung
ausgeben.
Definieren Sie im ersten Schritt eine Objektvariable vom Typ Reference. Danach durchlaufen
Sie in einer For Each Next-Schleife alle momentan gesetzten Verweise, indem Sie das Auf-
listungsobjekt References abfragen.
ber die Eigenschaft IsBroken knnen Sie prfen, ob der jeweilige Verweis gltig ist. Kann
ein Verweis nicht ermittelt werden, dann liefert diese Eigenschaft den Wert True. In diesem
Fall geben Sie den Namen des Verweises mithilfe der Eigenschaft Name sowie den kompletten
Pfad des Verweises ber die Eigenschaft FullPath im Direktfenster der Entwicklungsumge-
bung aus.
412 VB-Komponenten identifizieren
Neben einzelnen Modulen kann es weitere Komponenten in der Entwicklungsumgebung
geben, wie zum Beispiel Formulare, Berichte und Klassenmodule.
Im Beispiel aus Listing 494 sehen Sie ein Makro, das die verschiedenen Komponenten der
Datenbank im Direktfenster ausgibt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub VerweisCheck()
Dim Verweis As Reference
For Each Verweis In [Link]
If [Link] = True Then
[Link] [Link] & vbLf & [Link] & vbLf
End If
Next Verweis
End Sub
Listing 493: Fehlerhafte Verweise aufspren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Listing 494: Die einzelnen VB-Komponenten ermitteln
Sandini Bib
610 VBE und Security
In Abbildung 311 sehen Sie, dass jede Komponente einen eindeutigen Typ aufweist, der ber
die Eigenschaft Type ermittelt werden kann. Dies ermglicht spter das gezielte Ansprechen
einzelner Komponenten.
413 Die VBE aufrufen
Standardmig drcken Sie die Tastenkombination (Alt) + (F11), um in die Entwicklungs-
umgebung zu gelangen.
Diesen Vorgang knnen Sie aber auch durch ein Makro ausfhren, das Sie im Makro aus
Listing 495 sehen.
Sub KomponentenAusgeben()
Dim VBKomp As VBComponent
For Each VBKomp In [Link]
[Link] "Name der Komponente: " & [Link] & _
vbLf & "Typ der Komponente: " & _
[Link] & vbLf
Next VBKomp
Set VBKomp = Nothing
End Sub
Abbildung 311: Die einzelnen Typen ermitteln
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Listing 495: Die Entwicklungsumgebung aufrufen
Listing 494: Die einzelnen VB-Komponenten ermitteln (Forts.)
Sandini Bib
Neue Module einfgen 611
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Eigenschaft MainWindow gibt ein Window-Objekt zurck, das das Hauptfenster der Entwick-
lungsumgebung von Visual Basic darstellt. Die Methode SetFocus verschiebt den Fokus auf
das angegebene Fenster. ber die Eigenschaft Visible wird fr das Window-Objekt ein Wert
vom Typ Boolean zurckgegeben oder festgelegt, der die Sichtbarkeit von Fenstern angibt.
Setzen Sie diese Eigenschaft auf den Wert True, um ein Fenster anzuzeigen.
414 Neue Module einfgen
Um einer Datenbank ein neues, noch leeres Modul hinzuzufgen, whlen Sie in der Entwick-
lungsumgebung aus dem Men EINFGEN den Befehl MODUL aus.
Wenn diese Aufgabe ber ein Makro erledigt werden soll, dann setzen Sie dazu die Methode
Add ein. Die Syntax dieser Methode lautet:
[Link](Komponente)
Sie knnen eine der folgenden Konstanten fr das Argument Komponente verwenden:
Sub VBEAufrufen()
With [Link]
.SetFocus
.Visible = True
End With
End Sub
Argument Beschreibung
Objekt
Erforderlich. Ein Objektausdruck, der ein VBCompon-
ents-Objekt zurckgibt.
Komponente
Erforderlich. Fr die LinkedWindows-Auflistung ein
Objekt. Fr die VBComponents-Auflistung eine aufge-
listete Konstante, die ein Klassenmodul, ein Formular
oder ein Standardmodul darstellt.
Tabelle 144: Die Argumente der Methode Add
Konstante Beschreibung
vbext_ct_ClassModule
Fgt der Auflistung ein Klassenmodul hinzu.
Vbext_ct_MSForm
Fgt der Auflistung ein Formular hinzu.
Vbext_ct_StdModule
Fgt der Auflistung ein Standardmodul hinzu.
vbext_pt_StandAlone
Fgt der Auflistung ein StandAlone-Projekt hinzu.
Tabelle 145: Die verfgbaren Konstanten der Methode Add
Listing 495: Die Entwicklungsumgebung aufrufen (Forts.)
Sandini Bib
612 VBE und Security
Im folgenden Beispiel aus Listing 496 wird dem aktuellen VBA-Projekt ein neues Modul mit
dem Namen NEUESMODUL hinzugefgt.
Da es sich bei einem neuen Modul um eine VB-Komponente handelt, deklarieren Sie zu
Beginn des Makros eine Objektvariable vom Typ VBComponent. Das Fllen der Objektvaria-
blen wird im Zusammenspiel mit dem Anlegen des neuen Moduls durchgefhrt. Wenden Sie
die Methode Add auf das aktive Projekt an, indem Sie der VBComponents-Auflistung ein weite-
res Modul hinzufgen. ber die Eigenschaft Name geben Sie diesem neuen Modul einen
Namen und heben danach den Objektverweis wieder auf.
415 Modul lschen
Wenn Sie bereits vorhandene Module in einer Datenbank lschen mchten, um z. B. im
Anschluss daran ein neues berarbeitetes Modul einzufgen, dann starten Sie das folgende
Makro aus Listing 497.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub ModulEinfgen()
Dim VBKomp As VBComponent
On Error GoTo fehler
Set VBKomp = _
[Link](vbext_ct_StdModule)
[Link] = "NeuesModul"
Set VBKomp = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 496: Ein neues Modul einfgen
Sandini Bib
Modul lschen 613
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mit der Methode Remove knnen Sie ein bestimmtes Modul lschen.
Abbildung 312: Das neue Modul wurde angelegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub ModulLschen()
Dim VBmodul As Object
On Error GoTo fehler
Set VBmodul = [Link]
With Vbmodul
.[Link] .VBComponents("NeuesModul")
End With
Set VBmodul = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 497: Modul lschen
Sandini Bib
614 VBE und Security
416 Alle Module lschen
Das folgende Makro aus Listing 498 geht noch einen Schritt weiter. Es lscht alle Module der
aktiven Datenbank bis auf das MODUL1 aus der Datenbank.
Bei allen VB-Komponenten, die den Type 1 oder 2 zurckmelden, handelt es sich entweder
um Klassen- oder Standardmodule. Diese knnen Sie dann direkt ber die Methode Remove
aus der Datenbank entfernen.
417 Modulcheck durchfhren
Im letzten Abschnitt haben Sie erfahren, wie Sie ein Modul lschen. Was noch fehlt, ist eine
Prfung, ob ein bestimmtes Modul sich berhaupt in der Datenbank befindet. Diese Pr-
fung knnen Sie beispielsweise ber die Funktion aus Listing 499 durchfhren. Dabei wird
berprft, ob sich das Modul mit dem Namen MODUL2 in der aktuell geladenen Datenbank
befindet.
H
i
n
w
e
i
s
Vorsicht bei der Anwendung dieses Makros! Danach sind tatschlich alle Module weg!
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub AlleModuleBisAufEinesLschen()
Dim VBKomp As Object
On Error GoTo fehler
With [Link]
For Each VBKomp In .VBComponents
If [Link] = 1 Or [Link] = 2 Then
If [Link] <> "Modul1" Then .[Link] VBKomp
End If
Next VBKomp
End With
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 498: Alle Module bis auf das Modul1 werden ohne Rckfrage gelscht.
Sandini Bib
Module drucken 615
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber die Funktion Len knnen Sie prfen, ob eine korrekte Lnge, also ungleich 0, zurckge-
geben wird. Dies ist der Fall, wenn der bergebene Modulname in der Datenbank gefunden
werden kann.
418 Module drucken
Das Drucken von Modulen ist standardmig ber das Men DATEI und den Befehl DRU-
CKEN mglich. Dabei besteht aber keine Mglichkeit, das Aussehen des Ausdrucks sowie die
Formatierung der Schriftart speziell fr den Druck vorzunehmen.
Die Lsung aus Listing 500 fr dieses Problem besteht darin, zuerst das komplette Modul in
eine Textdatei zu schreiben, diese Textdatei dann beispielsweise in Excel zu ffnen und zu
formatieren. Nach dem Ausdruck dieser formatierten Datei erfolgt die Lschung derselben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Function ModulDa(ModulName As String) As Boolean
On Error Resume Next
ModulDa = _
Len([Link](ModulName).Name) <> 0
End Function
Sub ModulCheck()
If ModulDa("Modul2") = True Then
MsgBox "Modul existiert!", vbInformation
Else
MsgBox "Modul existiert nicht!", vbCritical
End If
End Sub
Listing 499: berprfen, ob ein Modul existiert
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub ModulDrucken()
Dim XL As Object
[Link] _
("Modul1").Export "c:\Eigene Dateien\[Link]"
Listing 500: Ein Listing drucken
Sandini Bib
616 VBE und Security
Deklarieren Sie zunchst eine Objektvariable vom Typ Object. Danach wenden Sie die
Methode Export an, um das gewnschte Modul als Textdatei zu exportieren. Geben Sie dabei
neben dem Dateinamen auch den Pfadnamen an. Dies erleichtert spter das Wiederfinden
der Textdatei. Erstellen Sie nun ein Excel-Objekt und ffnen Sie die als Text gespeicherte
Codedatei mithilfe der Methode OpenText. Formatieren Sie danach alle Zellen der aktiven
Tabelle, indem Sie eine gewnschte Schriftart sowie Schriftgre ber die Eigenschaften Name
und Size einstellen. ber die Methode Printout geben Sie die so formatierte Textdatei auf
dem Drucker aus. Schlieen Sie die noch geffnete Excel-Mappe ber die Methode Close.
Geben Sie dabei als Argument SaveChanges:=False an. Diese Einstellung bewirkt, dass Sie
keine Rckfrage erhalten, ob die Datei gespeichert werden soll. Wenden Sie zum Schluss des
Makros noch die Anweisung Kill an, um die Textdatei zu lschen.
419 Makro lschen
Mchten Sie aus einem Modul ein bestimmtes Makro entfernen, dann mssen Sie dieses
Makro zuerst finden. Im folgenden Makro aus Listing 501 wird in MODUL1 nach dem Makro
TEST gesucht. Wenn dieses Makro gefunden wird, dann soll es aus dem Modul entfernt wer-
den.
Set XL = CreateObject("[Link]")
[Link] "c:\Eigene Dateien\[Link]"
With [Link]
.[Link] = "Courier"
.[Link] = 8
.PrintOut
End With
[Link] savechanges:=False
Kill "c:\Eigene Dateien\[Link]"
Set XL = Nothing
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub MakroLschen()
Dim VBKomp As Object
Dim int_Start As Integer
Dim int_Anzahl As Integer
Listing 501: Makro entfernen
Listing 500: Ein Listing drucken (Forts.)
Sandini Bib
Makro lschen 617
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Eigenschaft ProcStartLine gibt die Zeile zurck, an der die festgelegte Prozedur beginnt.
Die Eigenschaft ProcCountLines gibt die Anzahl der Zeilen in der festgelegten Prozedur an.
Die Syntax dieser Eigenschaften lautet:
[Link](ProzName, ProzArt) As Long
[Link](ProzName, ProzArt) As Long
Sie knnen eine der folgenden Konstanten fr das Argument ProzArt verwenden:
Set VBKomp = _
[Link]("Modul1").CodeModule
On Error GoTo fehler
With VBKomp
int_Start = .ProcStartLine("Test", vbext_pk_Proc)
int_Anzahl = .ProcCountLines("Test", vbext_pk_Proc)
.DeleteLines int_Start, int_Anzahl
End With
Exit Sub
fehler:
MsgBox "Ein Makro mit diesem Namen gibt es nicht!"
End Sub
Teil Beschreibung
Objekt
Erforderlich. Ein Objektausdruck, der ein CodeModul-
Objekt zurckgibt.
ProzName
Erforderlich. Ein Wert vom Typ String, der den Namen
der Prozedur enthlt.
ProzArt
Erforderlich. Legt die Art der zu suchenden Prozedur fest.
Tabelle 146: Die Argumente der Eigenschaft ProcStartLine
Konstante Beschreibung
vbext_pk_Get
Legt eine Prozedur fest, die den Wert einer Eigenschaft
zurckgibt.
vbext_pk_Let
Legt eine Prozedur fest, die einer Eigenschaft einen Wert
zuweist.
vbext_pk_Set
Legt eine Prozedur fest, die einen Verweis auf ein Objekt
angibt.
vbext_pk_Proc
Legt alle Prozeduren mit Ausnahme von Eigenschaften-
prozeduren fest.
Tabelle 147: Die Konstanten des Arguments ProzArt
Listing 501: Makro entfernen (Forts.)
Sandini Bib
618 VBE und Security
Bei erfolgreicher Aufsprung des Makros wenden Sie die Methode DeleteLines an, um das
Makro zu lschen. Dabei geben Sie der Methode sowohl die erste als auch die letzte zu
lschende Zeile an. Die Syntax dieser Methode lautet:
[Link] (Startzeile) [, Zhler]
Fr den Fall, dass das gesuchte Makro nicht gefunden werden kann, sorgen Sie mithilfe der
On Error-Anweisung dafr, dass auch dieses Makro nicht abstrzt.
420 Makrocheck durchfhren
Bevor Sie ein Makro lschen bzw. auf ein Makro in irgendeiner Form zugreifen, knnen Sie
vorab eine Prfung vornehmen, ob das entsprechende Makro berhaupt in der Datenbank
existiert. Dazu schreiben Sie eine Funktion, die so aussehen kann wie in Listing 502 darge-
stellt.
Teil Beschreibung
Objekt
Erforderlich. Ein Objektausdruck, der ein CodeModul-
Objekt zurckgibt.
Startzeile
Erforderlich. Ein Wert vom Typ Long, der die erste zu
lschende Zeile angibt.
Zhler
Optional. Ein Wert vom Typ Long, der die Anzahl der zu
lschenden Zeilen angibt.
Tabelle 148: Die Argumente der Methode DeleteLines
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Function ModulDa(ModulName As String) As Boolean
On Error Resume Next
ModulDa = _
Len([Link](ModulName).Name) <> 0
End Function
Function MakroDa(MakroName As String, _
ModulName As String) As Boolean
On Error Resume Next
If ModulDa(ModulName) = True Then
MakroDa = [Link](ModulName) _
.[Link](MakroName, vbext_pk_Proc) <> 0
Listing 502: Existiert ein bestimmtes Makro in einem Modul?
Sandini Bib
Formularereignisse lschen 619
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der Funktion MakroDa den Namen des Makros sowie den Namen des Moduls, in
dem das Makro gespeichert ist. ber die Eigenschaft ProcStartLine wird dann in der
Funktion versucht, das Makro zu finden. Ist die Suche erfolgreich, dann wird eine
Lnge ungleich Null zurckgegeben. Den Abgleich mit dem Modul knnen Sie in der
Beschreibung unterhalb der Funktion aus Listing 499 nachlesen.
421 Formularereignisse lschen
Neben Makros, die in Standardmodulen oder Klassenmodulen gespeichert sind, gibt es auch
noch Ereignismakros, die sich direkt hinter Formularen oder Berichten befinden.
Um alle Makros, die hinter einem Formular liegen, zu entfernen, starten Sie das Makro aus
Listing 503.
End If
End Function
Sub MakroCheck()
If MakroDa("DatumUndZeit", "Modul1") = True Then
MsgBox "Makro existiert!", vbInformation
Else
MsgBox "Makro existiert nicht!", vbCritical
End If
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub FormularCodeLschen()
Dim VBKomp As Object
Set VBKomp = _
[Link]("Form_Artikel").CodeModule
On Error GoTo fehler
With VBKomp
.DeleteLines 1, [Link]
End With
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 503: Alle Makros hinter dem Formular werden gelscht.
Listing 502: Existiert ein bestimmtes Makro in einem Modul? (Forts.)
Sandini Bib
620 VBE und Security
bergeben Sie der Methode DeleteLines als erstes Argument die Startzeile, ab der die
Lschung des Quellcodes beginnen soll. Da Sie im Beispiel aus Listing 503 den kompletten
Code entfernen mchten, bergeben Sie hierbei die Zeile 1. Im zweiten Argument der
Methode DeleteLines ermitteln Sie mithilfe der Eigenschaft CountOfLines die Anzahl der
Codezeilen, die sich hinter dem Formular befinden.
Steuerelemente lschen
Nun ja, wie Sie die Codezeilen hinter einem Formular lschen knnen, wissen Sie jetzt. Was
aber, wenn Sie das komplette Formular bzw. alle Steuerelemente auf einem Formular lschen
mchten?
Im Makro aus Listing 504 werden alle Steuerelemente des Formulars ARTIKEL2 gelscht.
ffnen Sie zuerst das Formular Artikel2 in der Entwurfsansicht, indem Sie die Methode
OpenForm mit der Konstanten acDesign aufrufen. Danach weisen Sie der Objektvariablen frm
den Namen des Formulars zu, indem Sie die Anweisung Set einsetzen. In einer For each next-
Schleife durchlaufen Sie alle Steuerelemente des Formulars und fllen dabei das Datenfeld
arrNamen. In einer zweiten Schleife, beginnend vom ersten Eintrag im Datenfeld (Lbound) bis
zum letzten Eintrag im Datenfeld (Ubound), werden die einzelnen Steuerelemente ber die
Methode DeleteControl gelscht.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub EinzelneSteuerelementeEnfernen()
Dim frm As Form
Dim arrnamen(50) As Variant
Dim ctrl As Control
Dim intz As Integer
[Link] "Artikel2", acDesign
Set frm = Forms!Artikel2
intz = 1
For Each ctrl In [Link]
arrnamen(intz) = [Link]
intz = intz + 1
Next ctrl
On Error Resume Next
For intz = LBound(arrnamen) To Ubound(arrnamen)
DeleteControl "Artikel2", arrnamen(intz)
Next intz
End Sub
Listing 504: Alle Steuerelemente eines Formulars einfernen
Sandini Bib
Einzelne Texte/Befehle im Quellcode finden 621
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Formular lschen
Soll das ganze Formular gelscht werden, dann wenden Sie das Makro aus Listing 505 an.
Setzen Sie die Methode DeleteObject ein, um das Formular zu lschen.
422 Einzelne Texte/Befehle im Quellcode finden
Mchten Sie einen bestimmten Text oder Befehl im Quellcode finden, dann knnen Sie die
Methode Find einsetzen.
Im folgenden Beispiel aus Listing 506 wird nach der Methode ProcCountLines im MODUL1
gesucht. Ist die Suche erfolgreich verlaufen, dann soll der entsprechende Befehl im Quellcode
markiert werden.
Abbildung 313: Das Formular wurde geputzt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub FormularLschen()
[Link] acForm, "Artikel2"
End Sub
Listing 505: Ein Formular lschen
Sandini Bib
622 VBE und Security
Die Methode Find hat fnf Argumente, die gefllt werden mssen. Im ersten Argument
geben Sie den Text an, der im Quellcode gesucht werden soll. Im zweiten Argument wird die
Zeilennummer festgelegt, bei der die Suche beginnen soll. Das dritte Argument legt die Start-
spalte fest, ab der gesucht werden soll. Dabei beginnt die erste Spalte ganz links. Im vierten
Argument wird die Endzeile angegeben, also die Zeile, bis zu der gesucht werden soll. Im
letzten Argument wird die Spalte angegeben, bis zu der gesucht werden soll.
War die Suche erfolgreich, dann wird ein Wahrheitswert zurckgegeben. In diesem Fall wen-
den Sie die Methode SetSelection an und bergeben ihr die gerade durch die Methode Find
gefllten Variablen. Damit wird der gefundene Text im Quellcode markiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub BefehlFinden()
Dim VBKomp As Object
Dim lngZeileStart As Long
Dim lngZeileEnde As Long
Dim lngSpalteStart As Long
Dim lngSpalteEnde As Long
Dim b As Boolean
Set VBKomp = _
[Link]("mdlVBE").CodeModule
With VBKomp
b = .Find("ProcCountLines", lngZeileStart, lngSpalteStart, _
lngZeileEnde, lngSpalteEnde)
If b = True Then
.[Link] lngZeileStart, lngSpalteStart, _
lngZeileEnde, lngSpalteEnde
Else
MsgBox "Der Befehl konnte nicht gefunden werden!"
End If
End With
Set VBKomp = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 506: Befehl im Quellcode suchen und markieren
Sandini Bib
Texte ersetzen 623
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
423 Texte ersetzen
Im folgenden Beispiel aus Listing 507 soll eine E-Mail-Adresse in einem bestimmten Modul
ausgetauscht werden. Da diese Mail-Adresse dort mehrfach vorkommen kann, muss die
Lsung dynamisch programmiert werden.
Abbildung 314: Der Befehl wurde gefunden und markiert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub TextAustauschen()
Dim lngZeileStart As Long
Dim lngZeileEnde As Long
Dim lngSpalteStart As Long
Dim lngSpalteEnde As Long
Dim strAlt As String
Dim strNeu As String
Dim VBCodeMod As CodeModule
Dim b As Boolean
Const SuchText = "Machero@[Link]"
Const ErsetzText = "Held-office@[Link]"
On Error GoTo fehler
Set VBCodeMod = [Link] _
("mdlVBE").CodeModule
Listing 507: Textteile im Code suchen und ersetzen
Sandini Bib
624 VBE und Security
Deklarieren Sie zu Beginn des Makros zunchst den Text, der gesucht werden soll, sowie den
Text, der als Ersatz genommen werden soll. Danach legen Sie ber die Anweisung Set fest, in
welchem Modul gesucht werden soll. Wenden Sie dann die Methode Find an, um den
gewnschten Text aufzuspren. Speichern Sie das Ergebnis der Suche in einer booleschen
Variablen. War die Suche erfolgreich, dann steht in dieser Variablen der Wert True. Auer-
dem sind danach alle Argumente der Methode Find gefllt, so dass feststeht, wo der gesuchte
Text sich im Modul befindet. Die Syntax der Methode Find lautet:
Find(Ziel, Startzeile, Startspalte, Endzeile, Endspalte [, GanzesWort] [, Gro/Klein]
[, Mustersuche]) As Boolean
b = [Link](SuchText, lngZeileStart + 1, _
lngSpalteStart, lngZeileEnde, lngSpalteEnde, False, False)
While b = True
strAlt = [Link](lngZeileEnde, 1)
strNeu = Replace(strAlt, SuchText, ErsetzText)
[Link] lngZeileEnde, strNeu
lngZeileStart = lngZeileEnde + 1
lngZeileEnde = [Link]
lngSpalteStart = 1
lngSpalteEnde = 250
b = [Link](SuchText, lngZeileStart + 1, _
lngSpalteStart, lngZeileEnde, lngSpalteEnde)
Wend
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Teil Beschreibung
Ziel
Erforderlich. Ein Wert vom Typ String, der den zu suchenden Text
oder das zu suchende Muster enthlt.
Startzeile
Erforderlich. Ein Wert vom Typ Long, der die Zeile angibt, in der mit
der Suche begonnen werden soll; falls die Suche erfolgreich ist, wird
dieser Wert auf die gefundene Zeile gesetzt. Die erste Zeile hat die
Nummer 1.
Startspalte
Erforderlich. Ein Wert vom Typ Long, der die Spalte angibt, in der mit
der Suche begonnen werden soll; falls die Suche erfolgreich ist, wird
dieser Wert auf die gefundene Spalte gesetzt. Die erste Spalte hat die
Nummer 1.
Tabelle 149: Die Argumente der Methode Find
Listing 507: Textteile im Code suchen und ersetzen (Forts.)
Sandini Bib
Texte ersetzen 625
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Funktion Replace ersetzen Sie jetzt die alte E-Mail-Adresse durch die neue. Die
Syntax dieser Funktion sieht wie folgt aus:
Replace(expression, find, replace[, start[, count[, compare]]])
Endzeile
Erforderlich. Ein Wert vom Typ Long, der die letzte Zeile der berein-
stimmung angibt, falls die Suche erfolgreich war. Die letzte Zeile kann
als 1 angegeben werden.
Endspalte
Erforderlich. Ein Wert vom Typ Long, der die letzte Spalte der ber-
einstimmung angibt, falls die Suche erfolgreich war. Die letzte Spalte
kann als 1 angegeben werden.
GanzesWort
Optional. Ein Wert vom Typ Boolean, der angibt, ob nur nach ber-
einstimmenden ganzen Wrtern gesucht werden soll. Entspricht die-
ser Wert True, so werden nur ganze Wrter gesucht. False entspricht
der Voreinstellung.
Gro/Klein
Optional. Ein Wert vom Typ Boolean, der angibt, ob die Gro-/Klein-
schreibung bercksichtigt wird. Entspricht dieser Wert True, so wird
bei der Suche die Gro-/Kleinschreibung beachtet. False entspricht
der Voreinstellung.
Mustersuche
Optional. Ein Wert vom Typ Boolean, der angibt, ob die Zielzeichen-
folge ein regulres Ausdrucksmuster angibt. Entspricht dieser Wert
True, so wird die Zielzeichenfolge als regulres Ausdrucksmuster
behandelt. False entspricht der Voreinstellung.
Teil Beschreibung
Expression
Erforderlich. Zeichenfolgenausdruck, der die zu ersetzende, unter-
geordnete Zeichenfolge enthlt.
Find
Erforderlich. Die untergeordnete Zeichenfolge, nach der gesucht
wird.
Replace
Erforderlich. Die untergeordnete Ersatzzeichenfolge.
Start
Optional. Position in expression, an der die Suche nach der unterge-
ordneten Zeichenfolge beginnt. Wird diese Angabe ausgelassen, wird
bei 1 begonnen.
Count
Optional. Anzahl der durchzufhrenden Ersetzungen der untergeord-
neten Zeichenfolge. Wird diese Angabe ausgelassen, ist die Standard-
einstellung 1, d.h., alle mglichen Zeichenfolgen werden ersetzt.
Compare
Optional. Numerischer Wert, der die Art des Vergleichs angibt, der
beim Beurteilen von untergeordneten Zeichenketten verwendet wer-
den soll.
Tabelle 150: Die Argumente der Methode Replace
Teil Beschreibung
Tabelle 149: Die Argumente der Methode Find (Forts.)
Sandini Bib
626 VBE und Security
Die eigentliche Codezeile wird ber die Methode ReplaceLine ausgetauscht. Die Syntax fr
diese Methode lautet:
ReplaceLine(Zeile, Code)
Nach dem ersten Suchtreffer erhhen Sie die Variable lngZeileStart um den Wert 1, um
die Suche nicht wieder von vorne beginnen zu lassen. Wiederholen Sie in einer Schleife so
lange die Suche, bis kein Suchergebnis mehr gefunden werden kann. In diesem Fall wird die
boolesche Variable b dann auf den Wert False gesetzt, was den Abbruch der Schleife zur Folge
hat.
424 Makros eines Moduls auflisten
Um einen berblick ber alle in einem Modul enthaltenen Makros zu gewinnen, knnen Sie
das Makro aus Listing 508 einsetzen:
Teil Beschreibung
Zeile
Erforderlich. Ein Wert vom Typ Long, der die Position der zu ersetzen-
den Zeile angibt.
Code
Erforderlich. Ein Wert vom Typ String, der den einzufgenden Code
enthlt.
Tabelle 151: Die Argumente der Methode ReplaceLine
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub MakrosAuflisten()
Dim VbKomp As Object
Dim lngStart As Long
Set VbKomp = [Link]("mdlVBE").CodeModule
With VbKomp
lngStart = .CountOfDeclarationLines + 1
Do Until lngStart >= .CountOfLines
[Link] .ProcOfLine(lngStart, vbext_pk_Proc)
lngStart = lngStart + .ProcCountLines(.ProcOfLine(lngStart, _
vbext_pk_Proc), vbext_pk_Proc)
Loop
End With
Set VbKomp = Nothing
End Sub
Listing 508: Eine Makroliste erstellen
Sandini Bib
Makros eines Moduls auflisten 627
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Zu Beginn des Makros erfahren Sie mithilfe der Eigenschaft CountOfDeclarationLines die
Anzahl der Codezeilen im Deklarationsabschnitt des Codemoduls. Mithilfe der Eigenschaft
ProcOfLine knnen Sie den Namen des jeweiligen Makros im MDLVBE ermitteln. Diese
Eigenschaft bentigt zwei Argumente: Im ersten Argument geben Sie die Startzeile an, ab der
nach dem Makronamen gesucht werden soll. Das zweite Argument benennt die Art der zu
suchenden Prozedur. ber die Konstante vbext_pk_Proc wird dabei festgelegt, dass Makros
und Funktionen ermittelt werden sollen. ber die Eigenschaft CountOfLines ermitteln Sie die
Gesamtzahl der Codezeilen in einem Modul.
Und jetzt alle ...
Um das Makro aus allen Module der Datenbank auszubauen, starten Sie das Makro aus
Listing 509:
Abbildung 315: Alle Makros aus dem Modul1
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub MakrosAuflistenKomplett()
Dim VbKomp As VBComponent
Dim obj As Object
Dim lngStart As Long
For Each VbKomp In [Link]
If [Link] = 1 Then
Set obj = [Link]
Listing 509: Eine komplette Makroliste erstellen
Sandini Bib
628 VBE und Security
ber die Eigenschaft Type knnen Sie feststellen, ob es sich bei dem jeweiligen Objekt auch
um ein Standardmodul handelt. In diesem Fall meldet die Eigenschaft den Wert 1 zurck.
425 Makros einfgen
Wenn Sie Makros per Code in eine Datenbank einfgen mchten, dann stehen Ihnen zwei
Mglichkeiten zur Verfgung:
zeilenweises Einfgen in das Modul,
Import einer Textdatei, die das komplette Makro in das Modul einfgt.
With obj
lngStart = .CountOfDeclarationLines + 1
Do Until lngStart >= .CountOfLines
[Link] [Link] & " --- > " & _
.ProcOfLine(lngStart, vbext_pk_Proc)
lngStart = lngStart + .ProcCountLines(.ProcOfLine(lngStart, _
vbext_pk_Proc), vbext_pk_Proc)
Loop
End With
End If
Next VbKomp
Set obj = Nothing
Set VbKomp = Nothing
End Sub
Abbildung 316: Die Makroliste mit Modulbezug wurde erstellt.
Listing 509: Eine komplette Makroliste erstellen (Forts.)
Sandini Bib
Makros einfgen 629
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Variante 1 die Lsung ber InsertLines
Im ersten Beispiel fgen Sie Quellcode zeilenweise in Ihr neues Modul ein. Sehen Sie sich
dazu Listing 510 an.
Im Makro wird ein Code zeilenweise bertragen. Die Eigenschaft CountOfLines ermittelt, wie
viele Codezeilen im Modul bereits enthalten sind, und addiert den Wert 1 darauf. Diese
Manahme ist notwendig, um eventuell bereits bestehende Makros nicht zu berschreiben.
Die Konstante vbLF im Makro sorgt jeweils fr den Zeilenvorschub. Die Eigenschaft Now gibt
das aktuelle Datum inklusive der Uhrzeit aus.
Variante 2 die Lsung ber AddFromFile
Selbstverstndlich ist die Variante 1 nur bei krzeren Makros geeignet. Bei der folgenden
zweiten Variante speichern Sie ein Makro in einer Textdatei. Legen Sie zu diesem Zweck ber
den Notizblock im Windows-Zubehr eine Textdatei mit dem Namen [Link] an und
geben Sie dann folgenden Code aus Abbildung 318 ein.
Um die Textdatei [Link] als Makro in das Modul NEUESMODUL einzufgen, starten Sie das
Makro aus Listing 511.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub MakroZeilenHinzufgen()
Dim CodeModul As CodeModule
Dim intZ As Integer
On Error GoTo fehler
Set CodeModul = [Link] _
("NeuesModul").CodeModule
With CodeModul
intZ = .CountOfLines + 1
.InsertLines intZ, "Sub DatumUndZeit()" & vbLf & _
" Msgbox ""Jetzt ist " & Now & "!"" " & vbLf & "End Sub"
End With
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 510: Ein Makro einfgen Variante 1
Sandini Bib
630 VBE und Security
Abbildung 317: Ein krzeres Makro per Quellcode einfgen
Abbildung 318: Dieses Makro soll importiert werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub MakroAusTextdateiImportieren()
Dim CodeModul As CodeModule
Const ImportDatei = "C:\[Link]"
Listing 511: Ein Makro einfgen Variante 2
Sandini Bib
Formularcode importieren 631
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie im ersten Schritt eine Objektvariable vom Typ CodeModule. Das Objekt Code-
Module kann Komponenten wie Formulare, Klassen, Module oder Dokumente enthalten.
ber die Anweisung Set fllen Sie die Variable CodeModul, indem Sie den Namen des Ziel-
moduls abgeben.
Mithilfe der Methode AddFromFile fgen Sie dem Modul NEUESMODUL den Quellcode aus
der Textdatei [Link] hinzu. Die Syntax dieser Methode lautet:
[Link](Dateiname)
Nach dem Import der Textdatei kann der Objektverweis wieder aufgehoben werden und das
Makro ber die Anweisung Exit Sub auf direktem Wege verlassen werden.
426 Formularcode importieren
Das manuelle Einstellen von einzelnen Ereignissen, das Sie in Kapitel 6 nachschlagen kn-
nen, ist eine Lsung. Eine zweite Lsung besteht darin, Ereignisse in einem Formular einzu-
stellen und diese dabei aus einer Textdatei zu importieren.
Im Beispiel aus Listing 512 wird die Textdatei [Link] direkt hinter das Formular
ARTIKEL importiert.
On Error GoTo fehler
Set CodeModul = [Link] _
("NeuesModul").CodeModule
With CodeModul
.AddFromFile ImportDatei
End With
Set CodeModul = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Teil Beschreibung
Objekt
Erforderlich. Ein Objektausdruck, der ein CodeModul-
Objekt oder eine Reference-Auflistung zurckgibt.
Dateiname
Erforderlich. Ein Zeichenfolgenausdruck, der den Namen
der Datei angibt, die Sie dem Projekt oder dem Modul
hinzufgen mchten.
Tabelle 152: Die Argumente der Methode AddFromFile
Listing 511: Ein Makro einfgen Variante 2 (Forts.)
Sandini Bib
632 VBE und Security
Geben Sie den Codenamen des Formulars bei der Set-Anweisung bekannt. Danach impor-
tiert die Methode AddFromFile den Quellcode aus der Textdatei genau hinter das Formular.
427 Formularereignis einstellen
Fr das Einfgen eines einzelnen Ereignisses bietet sich auch die Methode CreateEventProc
an. Im folgenden Beispiel aus Listing 513 wird dem Formular Artikel2 ein Ereignis hinzuge-
fgt. Dabei soll beim Starten des Formulars das aktuelle Datum am Bildschirm angezeigt
werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub FormularCodeImportieren()
Dim CodeModul As CodeModule
Const ImportDatei = "C:\[Link]"
On Error GoTo fehler
Set CodeModul = [Link] _
("Form_Artikel").CodeModule
With CodeModul
.AddFromFile ImportDatei
End With
Set CodeModul = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 512: Formularcode importieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub EreignisHinzufgen()
Dim CodeModul As CodeModule
Dim intz As Integer
Listing 513: Ein Ereignis hinzufgen
Sandini Bib
Formularereignis einstellen 633
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Bevor Sie das Ereignis hinzufgen, ermitteln Sie zunchst, wie viele Codezeilen bereits hinter
dem Formular Artikel2 stehen. Diese Aufgabe erledigen Sie ber die Eigenschaft CountOf-
Lines. Danach wenden Sie die Methode CreateEventProc an, um das Ereignis Load einzustel-
len. Die Syntax dieser Methode lautet:
[Link](Ereignisname, Objektname) As Long
ber die Methode InsertLines fgen Sie innerhalb des Ereignisses die gewnschten Zeilen
ein
.
On Error GoTo fehler
Set CodeModul = [Link] _
("Form_Artikel2").CodeModule
With CodeModul
intz = .CountOfLines + 1
intz = .CreateEventProc("Load", "Form") + 1
.InsertLines intz, " Msgbox ""Hallo " & Date & "!"" "
End With
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Teil Beschreibung
Objekt
Erforderlich. Ein Objektausdruck, der ein CodeModul-Objekt zurck-
gibt.
Ereignisname
Erforderlich. Ein Zeichenfolgenausdruck, der den Namen des Ereig-
nisses angibt, das Sie hinzufgen mchten.
Objektname
Erforderlich. Ein Zeichenfolgenausdruck, der den Namen des
Objekts angibt, das die Ereignisquelle darstellt.
Tabelle 153: Die Argumente der Methode CreateEventProc
Listing 513: Ein Ereignis hinzufgen (Forts.)
Sandini Bib
634 VBE und Security
428 Makros exportieren
Neben dem Import von Textdateien in Modulen ist auch eine Exportfunktion fr Module in
Access vorgesehen, mit der Sie Ihre Programmierung in Textdateien sichern knnen.
ber den Einsatz der Methode Export knnen Sie ein Modul in einer Textdatei speichern. Die
Syntax dieser Methode lautet:
[Link](Dateiname)
Das Makro aus Listing 514 exportiert alle Makros im Modul MDLVBE in eine Textdatei und
speichert diese im Verzeichnis C:\Eigene Dateien unter dem Namen [Link].
Abbildung 319: Das Ereignis wurde eingefgt.
Teil Beschreibung
Objekt
Erforderlich. Ein Objektausdruck, der ein VBComponent-Objekt
zurckgibt.
Dateiname
Erforderlich. Ein Wert vom Typ String, der den Namen der Datei
angibt, in die Sie die Komponente exportieren mchten.
Tabelle 154: Die Argumente der Methode Export
Sandini Bib
Formularcodes sichern 635
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mit der Methode Export sichern Sie alle Makros aus MODUL1 als Textdatei.
429 Formularcodes sichern
Hinter den einzelnen Formularen kann sich Quellcode in Form von Ereignismakros befin-
den. Diese Codes knnen Sie ebenso ber die Methode Export in eine Textdatei berfhren.
Das folgende Makro aus Listing 515 rettet alle Ereignismakros, die sich hinter dem Formular
Artikel befinden, und speichert sie in der Datei ArtikelFormular ab.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub ModulInTextdateiSichern()
Dim VBKomp As Object
Const ExportDatei = "C:\Eigene Dateien\[Link]"
On Error GoTo fehler
Set VBKomp = [Link]("mdlVBE")
With VBKomp
.Export ExportDatei
End With
Set VBKomp = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 514: Ein Modul in eine Textdatei exportieren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub FormularInTextdateiSichern()
Dim VBKomp As Object
Const ExportDatei = "C:\[Link]"
On Error GoTo fehler
Set VBKomp = _
[Link]("Form_Artikel")
Listing 515: Auch Formularcodes knnen exportiert werden.
Sandini Bib
636 VBE und Security
Geben Sie den Codenamen des Formulars bei der Anweisung Set an.
Die Alternative
Eine alternative Mglichkeit, die ohne den Einsatz von VBE auskommt, sehen Sie in Listing
516. Dabei werden alle Formulare der Datenbank, die Quellcode enthalten, als separate Text-
dateien gespeichert.
With VBKomp
.Export ExportDatei
End With
Set VBKomp = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 320: Die Ereignisse des Formulars Artikel wurden gesichert.
Listing 515: Auch Formularcodes knnen exportiert werden. (Forts.)
Sandini Bib
Formularcodes sichern 637
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
In einer for each next-Schleife durchlaufen Sie alle Dokumente des Containers. Innerhalb
der Schleife ffnen Sie die einzelnen Formulare in der Entwurfsansicht und prfen ber die
Eigenschaft HasModul, ob Quellcode hinter dem Formular liegt. Wenn ja, dann wenden Sie die
Methode OutPutTo an, um die Codes zu exportieren. Dabei speichern Sie die Dateien im Ver-
zeichnis C:\Eigene Dateien unter dem jeweiligen Formularnamen und mit der Endung txt.
Schlieen Sie danach das jeweilige Formular ber die Methode Close.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap09
' Dateiname [Link]
' Modul mdlVBE
'=====================================================
Sub FormularCodeExportieren()
Dim dbs As Database
Dim doc As Document
Dim frm As Form
Dim strName As String
Set dbs = CurrentDb
With [Link]!Forms
For Each doc In .Documents
strName = [Link]
[Link] strName, acDesign
Set frm = Forms(strName)
If [Link] Then
[Link] acModule, Forms(strName).Module, _
acFormatTXT, "C:\Eigene Dateien\" & strName & ".Txt"
[Link] acForm, strName
Else
[Link] acForm, strName
End If
Next
End With
[Link]
Set dbs = Nothing
End Sub
Listing 516: Alle Formularcodes in Textdateien berfhren
Sandini Bib
638 VBE und Security
Abbildung 321: Alle Code-Formulare wurden exportiert.
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Access und ...
In diesem Kapitel knnen Sie Lsungen nachschlagen, die ber einen bloen Einsatz in
Access hinausgehen. Eine Strke der Programmiersprache VBA ist die universelle Verwend-
barkeit im ganzen Office-Paket. So knnen Sie Daten zwischen den einzelnen Anwendungen
problemlos importieren sowie exportieren und somit die Strke einer jeder Office-Anwen-
dung einsetzen.
430 Early-Binding und Late-Binding
Um von Access aus andere Office-Anwendungen einsetzen zu knnen, gibt es zwei Vorge-
hensweisen: Early-Binding und Late-Binding. Bei den in diesem Kapitel vorgestellten Lsun-
gen werden beide Methoden gleichermaen beliebig eingesetzt.
Early-Binding
Beim Early-Binding werden bereits vor dem eigentlichen Makrostart die spter gebrauchten
Funktionen in Form einer Bibliothek eingebunden. Dabei wird in der Entwicklungsumge-
bung aus dem Men EXTRAS der Befehl VERWEISE ausgewhlt und die gewnschte Bibliothek
eingebunden. Danach stehen alle Objekte, Methoden und Eigenschaften aus dieser Biblio-
thek bereits vor dem Makrostart zur Verfgung.
Diese Methode ist die schnellere von beiden. Auerdem stehen Ihnen schon beim Editieren
des Quellcodes die neuen Methoden und Eigenschaften sowie die Online-Hilfe zur einge-
bundenen Bibliothek zur Verfgung.
Late-Binding
Beim Late-Binding wird zur Laufzeit des Makros ein Verweis auf die Bibliothek durchge-
fhrt. Dazu wird im ersten Schritt ganz allgemein eine Objektvariable vom Typ Object dekla-
riert. Danach wird die Funktion CreateObject eingesetzt, die ein Objekt der gewnschten
Anwendung erstellt. Auch danach sind alle Methoden und Eigenschaften zu diesem Objekt
verfgbar.
Im Beispiel aus Listing 517 wird ein Word-Objekt erstellt und danach ein Dokument geff-
net.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlWord
'=====================================================
Listing 517: Eine Word-Sitzung wird erstellt.
Sandini Bib
640 Access und ...
431 Outlook bereits gestartet?
Access und das Internet haben einige Berhrungspunkte, wie zum Beispiel das Verschicken
von E-Mails direkt aus Access heraus. Dazu mssen Sie nicht extra Ihr E-Mail-Programm
starten, eine Datenbank anhngen, die Empfnger festlegen und die E-Mail-Nachricht
abschicken. Smtliche Aufgaben knnen Sie auch direkt in Access erledigen.
Im ersten Beispiel zum Zusammenspiel von Access mit Outlook schreiben Sie die Funktion
aus Listing 518, ber die Sie feststellen knnen, ob Outlook bereits gestartet ist.
Verwenden Sie die GetObject-Funktion fr den Zugriff auf die Objektbibliothek von Outlook
und weisen Sie das Objekt einer Objektvariablen zu. Verwenden Sie die Set-Anweisung, um
das von GetObject zurckgegebene Objekt der Objektvariablen zuzuweisen. Ist dieser Vor-
gang erfolgreich, dann meldet das Objekt Err den Wert 0. In diesem Fall ist Outlook bereits
gestartet. Als Rckgabewert geben Sie daher den Wahrheitswert True an das aufrufende
Makro aus Listing 519 zurck.
Sub LateBinding()
Dim wordObj As Object
Set wordObj = CreateObject("[Link]")
[Link] "C:\Eigene Dateien\[Link]"
'weitere Befehle
Set wordObj = Nothing
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Function OutlookOffen() As Boolean
Dim OutApp As [Link]
On Error Resume Next
Set OutApp = GetObject(, "[Link]")
If [Link] = 0 Then
OutlookOffen = True
Else
OutlookOffen = False
End If
End Function
Listing 518: Ist Outlook bereits aktiv?
Listing 517: Eine Word-Sitzung wird erstellt. (Forts.)
Sandini Bib
Outlook bereits gestartet? 641
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Makro aus Listing 519 wurde das Late-Binding durchgefhrt und einige Objektvariablen
wurden deklariert. Meldet die Funktion OutlookOffen den Rckgabewert False, dann ist Out-
look noch nicht geffnet. In diesem Fall wenden Sie die Funktion CreateObject an, um ein
Outlook-Objekt zu erstellen. Danach haben Sie Zugriff auf alle Methoden und Eigenschaften
des Objekts. Geben Sie im Anschluss daran ber die Methode GetNameSpace das Mapi-Proto-
koll an und definieren Sie ber die Methode GetDefaultFolder den Ordner, den Sie anzeigen
mchten.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub StartOutlook()
Dim OutApp As Object
Dim objOrdner As Object
Dim objNameSpace As Object
If OutlookOffen = False Then
Set OutApp = CreateObject("[Link]")
Set objNameSpace = [Link]("MAPI")
Set objOrdner = [Link](olFolderInbox)
[Link]
End If
End Sub
Listing 519: Outlook starten oder nicht
Abbildung 322: Outlook wird nach einer Prfung gestartet.
Sandini Bib
642 Access und ...
Da in diesem Beispiel der Posteingangsordner angezeigt werden soll, geben Sie als Argument
der Methode GetDefaultFolder die Konstante olFolderInbox an. Mithilfe der Eigenschaft
Display knnen Sie danach den Posteingangsordner anzeigen.
Weitere Ordner entnehmen Sie der folgenden Tabelle 155.
432 E-Mails verschicken
Fr das Versenden von E-Mails lsst sich in Access die Methode SendObject einsetzen. Dabei
knnen Sie ganz genau festlegen, welchen Bestandteil einer Access-Datenbank Sie versenden
mchten. Ferner bergeben Sie dieser Methode die Adressaten sowie den Begleittext der
E-Mail.
Die Methode SendObject hat folgende Syntax:
SendObject(Objekttyp, Objektname, Ausgabeformat, An, Cc, Bcc, Betreff, Nachricht,
NachrichtBearbeiten, Vorlagedatei)
Das erste Argument der Methode SendObject lautet Objekttyp. Dabei geben Sie in einer Kon-
stanten an, welchen Bestandteil der Datenbank Sie per E-Mail versenden mchten. Folgende
Konstanten stehen Ihnen dabei zur Verfgung:
acSendDataAccessPage: Eine Access-Datenzugriffsseite wird einem E-Mail-Empfnger
zugestellt.
acSendForm: Eine Formular soll ber eine E-Mail versendet werden.
acSendModule: Ein Modul wird per E-Mail versendet.
acSendNoObject: Es wird lediglich eine Text-E-Mail ohne Anhang versendet. Es handelt
sich dabei um die Standardeinstellung.
Konstante Ordner
olFolderCalendar
Kalender
olFolderContacts
Kontakte
olFolderDeletedItems
Gelschte Objekte
olFolderDrafts
Entwrfe
olFolderInbox
Posteingangsordner
olFolderJournal
Journal
olFolderNotes
Notizen
olFolderOutbox
Postausgangsordner
olFolderSentMail
Ordner Gesendete Objekte
olFolderTasks
Aufgaben
olFolderJunk
Junk-E-Mails
Tabelle 155: Die wichtigsten Ordner von Outlook
Sandini Bib
E-Mails verschicken 643
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
acSendQuery: Hierbei soll eine Abfrage per E-Mail versendet werden.
acSendReport: Bei dieser Angabe wird ein Bericht versendet.
acSendTable: Diese Konstante steht fr das Versenden einer bestimmten Tabelle aus einer
Datenbank.
Im nchsten Argument Objektname muss der Name des Objekts angegeben werden, der per
E-Mail versendet werden soll.
Mithilfe des Arguments Ausgabeformat knnen Sie festlegen, in welcher Form das Access-
Objekt versendet werden soll. Dabei haben Sie unter anderem die Auswahl zwischen folgen-
den Konstanten:
acFormatHTML: Hier erfolgt eine Ausgabe des Access-Objekts ber das HTML-Format, das
Sie mit jedem Browser ansehen knnen.
acFormatRTF: Beim RTF-Format handelt es sich um ein Textformat, das Sie mit nahezu
jedem Textverarbeitungsprogramm ffnen knnen.
acFormatTXT: Dieses Textformat ist mit jedem Texteditor, beispielsweise Notepad im Zube-
hr von Windows, zu lesen.
acFormatXLS: Dabei handelt es sich um das Excel-Tabellenformat.
AcFormatDAP: Bei dieser Konstante handelt es sich um Datenzugriffsseiten.
Beim Argument An mssen Sie die Empfnger auflisten, deren Namen in die AN-Zeile der
E-Mail aufgenommen werden sollen. Die Empfngernamen in diesem Argument mssen
durch Semikola (;) oder durch jenes Listentrennzeichen voneinander getrennt werden, das
auf der Registerkarte ZAHLEN des Dialogfelds LNDEREINSTELLUNGEN in der Windows-
Systemsteuerung festgelegt ist.
Das Argument Cc gibt an, an welche E-Mail-Empfnger Sie die E-Mail als Kopie schicken
mchten. Es gelten dabei dieselben Optionen wie auch beim Argument An.
Mit dem Argument Bcc knnen Sie E-Mail-Empfngern eine blinde Kopie der E-Mail
schicken, ohne dass der eigentliche Empfnger der E-Mail, der unter dem Argument An ange-
geben wurde, etwas davon erfhrt.
Das Argument Betreff reprsentiert die Betreff-Zeile der E-Mail. Geben Sie dort einen
Betreff in doppelten Anfhrungsstrichen an.
Im Argument Nachricht geben Sie den Text an, der in die E-Mail eingefgt werden soll. Wenn
Sie dieses Argument nicht angeben, wird nur das Objekt, jedoch kein Text, in die E-Mail auf-
genommen.
Mithilfe des Arguments NachrichtBearbeiten entscheiden Sie, ob Sie die E-Mail direkt absen-
den oder zur weiteren Bearbeitung vorher ffnen mchten. Setzen Sie dieses Argument auf
den Wert False, um die Nachricht direkt zu versenden. Setzen Sie das Argument auf den
Wert True, um die E-Mail zur weiteren Bearbeitung zu ffnen.
Sandini Bib
644 Access und ...
Beim Argument Vorlagedatei handelt es sich um einen optionalen Wert, der den vollstndi-
gen Namen und Pfad der Datei angibt, die als Vorlage fr eine HTML-Datei verwendet wer-
den soll.
Im Beispiel aus Listing 520 wird ein Text-E-Mail an mehrere Personen versendet.
Die ersten drei Argumente der Methode SendObject werden nicht bentigt. Geben Sie daher
drei Kommas nacheinander ein. Nennen Sie dann erst die Empfnger-E-Mail-Adresse und
nachfolgend den E-Mail-Empfnger, der die E-Mail als Kopie erhalten soll. Geben Sie dann
den Titel sowie den eigentlichen E-Mail-Text an. Um Zeilenumbrche im E-Mail-Text einzu-
fgen, arbeiten Sie mit der Konstanten vbCrLf. Damit wird ein Zeilenumbruch in der E-Mail
erzeugt. Setzen Sie das Argument NachrichtBearbeiten auf den Wert True, um die E-Mail vor
dem Versenden fr eine weitere Bearbeitung zu ffnen. Ist Outlook bereits geffnet, wird
Ihnen das E-Mail-Fenster direkt angezeigt.
Als Alternative knnen Sie eine einfache Text-E-Mail auch mithilfe der API-Funktion
ShellExecute aus Listing 521 versenden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub TextEMailVersenden()
[Link] , , , "Held-office@[Link]", _
"Machero@[Link]", , "Feedback erwnscht", _
"Sehr geehrter Herr Mller," & vbCrLf & _
"Bitte schicken Sie mir ein Feedback" & _
vbCrLf & "zu meiner Anfrage vom 03.08.2004" & _
vbCrLf & vbCrLf & _
"Viele Gre" & vbCrLf & _
"Bernd Held", True
End Sub
Listing 520: E-Mail ber ein Makro versenden
Sandini Bib
E-Mails verschicken 645
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bergeben Sie der API-Funktion als Argument Ihre E-Mail-Adresse sowie den gewnschten
Titel und den Text.
Abbildung 323: Die E-Mail ist vorbereitet und muss nur noch versendet werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Private Declare Function ShellExecute Lib "[Link]" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Sub Mail(eMail As String, Optional Subject As String, _
Optional Body As String)
Call ShellExecute(0&, "Open", "[Link] + eMail + _
"?Subject=" + Subject + "&Body=" + Body, "", "", 1)
End Sub
Sub MailSenden()
Call Mail("Held-office@[Link]", "Anfrage", "Bitte melden")
End Sub
Listing 521: E-Mail ber eine API-Funktion versenden
Sandini Bib
646 Access und ...
433 E-Mail mit Anhang versenden
Mchten Sie aus einer Access-Datenbank ein bestimmtes Objekt wie beispielsweise eine
Tabelle oder gar ein Modul per E-Mail verschicken, dann wenden Sie die Methode SendObject
an und geben genau an, welches Objekt Sie in welchem Ausgabeformat versenden mchten.
Im folgenden Beispiel aus Listing 522 wird die Tabelle ARTIKEL im Excel-Format an mehrere
E-Mail-Empfnger versendet.
Geben Sie im Argument Objekttyp der Methode SendObject den Typ des Access-Objekts an.
Spezifizieren Sie danach noch den Namen des Objekts und legen Sie das Ausgabeformat fest.
Setzen Sie das Argument NachrichtBearbeiten auf den Wert True, um die E-Mail vor dem
Senden noch einmal anzuzeigen.
434 Mail-Adressen aus Outlook herauslesen (Early-
Binding)
Im nchsten Beispiel aus Listing 523 werden Sie alle Namen, Vornamen und E-Mail-Adres-
sen aus Ihrem Kontaktordner von Outlook herauslesen und im Direktfenster der Entwick-
lungsumgebung ausgeben.
Damit es beim Zugriff auf die Kontakte in Outlook zu keinen Problemen kommt, binden Sie
in der Entwicklungsumgebung von Access die Bibliothek MICROSOFT OUTLOOK 10.0 OBJECT
LIBRARY fr Outlook 2002 bzw. MICROSOFT OUTLOOK 11.0 OBJECT LIBRARY fr Outlook
2003 im Men EXTRAS ber den Befehl VERWEISE ein.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub EMailVersendenMitAnhang()
[Link] acSendTable, "Artikel", acFormatXLS, _
"Held-office@[Link]; Machero@[Link]", _
, , "Die aktuellen Artikel", _
"Hallo Kollegen, " & vbCrLf & _
"Anbei die aktuelle Artikelliste zur Ansicht!" & _
vbCrLf & "Viele Gre" & vbCrLf & _
"Erwin Primeldieter", False
End Sub
Listing 522: Eine E-Mail mit Dateianhang versenden
Sandini Bib
Mail-Adressen aus Outlook herauslesen (Early-Binding) 647
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 324: An die E-Mail wurde eine Excel-Datei angehngt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub MailAdressenAuslesen()
Dim outArbeitsVerz As Object
Dim OutlN As New [Link]
Dim objKon As Object
Dim intz As Integer
Dim strName As String
Dim strVorname As String
Dim strMail As String
On Error GoTo fehler
Set outArbeitsVerz = [Link]("MAPI").GetDefaultFolder(olFolderContacts)
For intz = 1 To [Link]
Set objKon = [Link](intz)
strName = [Link]
strVorname = [Link]
strMail = objKon.Email1Address
[Link] strVorname & ", " & strName & "; " & strMail
Next intz
Set objKon = Nothing
Set OutlN = Nothing
Listing 523: Kontaktdaten ermitteln (Early-Binding)
Sandini Bib
648 Access und ...
ber die Methode GetDefaultFolder knnen Sie auf den Kontaktordner von Outlook
zugreifen. Danach ermitteln Sie ber die Funktion Count, wie viele Kontakte in diesem
Ordner erfasst sind. Mithilfe einer Schleife ermitteln Sie den Nachnamen, den Vornamen
sowie die E-Mail-Adresse der jeweiligen Kontaktperson und schreiben diese Infor-
mationen ber die Anweisung [Link] in das Direktfenster der Entwicklungsum-
gebung.
435 Mail-Adressen aus Outlook herauslesen (Late-
Binding)
Im nchsten Beispiel aus Listing 524 wird das vorherige Beispiel aus Listing 523 noch um ein
paar Informationen erweitert. Auerdem wird dieses Mal die Aufgabe ber das Late-Binding
ausgefhrt.
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Abbildung 325: Die Kontaktdaten wurden ausgelesen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub KontaktdatenAuslesen()
Dim OutlN As Object
Dim OutArbeitsverz As Object
Dim OutKon As Object
Dim intz As Integer
Listing 524: Kontaktdaten ermitteln (Late-Binding)
Listing 523: Kontaktdaten ermitteln (Early-Binding) (Forts.)
Sandini Bib
Kontaktdaten nach Outlook bertragen 649
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Deklarieren Sie zunchst drei Objektvariablen vom Typ Object. ber die Funktion CreateOb-
ject erstellen Sie danach ein Outlook-Objekt, das Sie der Objektvariablen OutIn zuweisen.
Jetzt greifen Sie auf den Standard-Kontaktordner von Outlook zu und lesen in einer Schleife
alle darin enthaltenen Kontaktdaten aus, die Sie ber die diversen Eigenschaften wie bei-
spielsweise LastName, FirstName usw. abfragen knnen.
436 Kontaktdaten nach Outlook bertragen
Beim nchsten Beispiel liegen Kontaktdaten in einer Access-Tabelle vor. Diese Tabelle hat fol-
genden Aufbau.
Die Aufgabe besteht nun darin, die in der Tabelle Kontakte enthaltenen Adressen in den Kon-
taktordner von Outlook zu transferieren. Binden Sie vor dem Start des Makros aus Listing
525 die Objektbibliothek Microsoft Outlook ein.
On Error GoTo fehler
Set OutIN = CreateObject("[Link]")
Set OutArbeitsverz = _
[Link]("MAPI").GetDefaultFolder(olFolderContacts)
For intz = 1 To [Link]
Set OutKon = [Link](intz)
With OutKon
[Link] .LastName
[Link] .FirstName
[Link] .BusinessAddressStreet
[Link] .BusinessAddressPostalCode
[Link] .BusinessAddressCity
[Link] .BusinessAddressState
[Link] .BusinessTelephoneNumber
[Link] .BusinessFaxNumber
[Link] .Birthday
[Link] .Email1Address & vbLf
End With
Next intz
Set OutArbeitsverz = Nothing
Set OutKon = Nothing
Set OutlN = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 524: Kontaktdaten ermitteln (Late-Binding) (Forts.)
Sandini Bib
650 Access und ...
Abbildung 326: Die Kontakte wurden aus Outlook ausgelesen.
Abbildung 327: Der Aufbau der Tabelle Kontakte
Sandini Bib
Kontaktdaten nach Outlook bertragen 651
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub KontakteVonAccessInOutlookbertragen()
Dim appOutLook As [Link]
Dim conoutlook As [Link]
Dim DBS As New [Link]
Dim intz As Integer
Set appOutLook = CreateObject("[Link].11")
[Link] "Kontakte", [Link]
intz = 0
On Error GoTo fehler
Do While Not [Link]
Set conoutlook = [Link](olContactItem)
[Link]
With conoutlook
.LastName = DBS!Nachname
.FirstName = DBS!Vorname
.BusinessAddressStreet = DBS!Strae
.BusinessAddressPostalCode = DBS!PLZ
.BusinessAddressCity = DBS!Ort
.BusinessAddressState = DBS!Bundesland
.BusinessTelephoneNumber = DBS!Telefon
.BusinessFaxNumber = DBS!Fax
.Birthday = DBS!Geburtsdatum
.Email1Address = DBS!Mail
.Save
intz = intz + 1
[Link]
End With
Loop
MsgBox "Es wurden " & intz & " Kontakte bertragen!"
[Link]
Set conoutlook = Nothing
Set appOutLook = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 525: Kontaktdaten von Access nach Outlook bertragen
Sandini Bib
652 Access und ...
Definieren Sie im ersten Schritt zwei Objektvariablen fr Outlook. Die eine Variable
AppOutlook gibt Ihnen die Mglichkeit, das Mailing-Programm direkt ber VBA-Befehle
anzusprechen. Die zweite Objektvariable conoutlook whlen Sie, um spter auf den Kon-
taktordner von Outlook zugreifen zu knnen.
Setzen Sie danach die Funktion CreateObject ein, um einen Verweis auf die Outlook-Biblio-
thek zu setzen. Dabei bedeutet die Zahl 11, dass Outlook 2003 gemeint ist. Outlook 2002
weist die Zahl 10 auf. Mchten Sie mit Outlook 2000 arbeiten, tragen Sie hier die Zahl 9 ein.
Haben Sie noch Outlook 97 im Einsatz, dann lassen Sie die Zahl weg.
ffnen Sie im nchsten Schritt Ihre Access-Tabelle Kontakte ber die Methode Open. Setzen
Sie danach eine Schleife auf, die so lange durchlaufen wird, bis der letzte Datensatz in der
Tabelle abgearbeitet wurde. Damit Satz fr Satz verarbeitet werden kann, mssen Sie daran
denken, am Ende der Schleife die Methode MoveNext einzusetzen.
Mithilfe der Methode CreateItem erstellen Sie ein neues Outlook-Objekt. Welches Outlook-
Objekt Sie genau brauchen, knnen Sie ber eine Konstante festlegen. Dabei stehen Ihnen
folgende Konstanten zur Verfgung:
olAppointmentItem: Mithilfe dieser Konstante fgen Sie einen neuen Termin in Ihrem
Terminkalender ein.
olContactItem: ber diese Konstante knnen Sie einen neuen Kontakt erstellen.
olDistributionListItem: Erstellt einen Eintrag in der Verteilerliste von Outlook.
olJournalItem: Dabei erstellen Sie einen neuen Journaleintrag.
olMailItem: Hierbei knnen Sie einen neuen E-Mail-Eintrag erzeugen.
olNoteItem: ber diese Konstante legen Sie eine neue Notiz an.
olPostItem: ber diese Konstante knnen Sie eine E-Mail verschicken.
olTaskItem: ber diese Konstante fgen Sie einen neuen Eintrag in Ihrer Aufgabenliste
ein.
Fr unser Beispiel erstellen Sie also einen Kontakteintrag und verwenden daher die Kon-
stante olContactItem. Der Kontakt wird damit angelegt und wartet auf seine Befllung. ber-
tragen Sie die einzelnen Datenfelder aus Ihrer Access-Tabelle, indem Sie folgende
Eigenschaften verwenden:
Sandini Bib
Kontaktdaten von Outlook importieren 653
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Selbstverstndlich gibt es noch einige weitere Infos, die Sie in Outlook im Kontaktordner
speichern knnen. Diese finden Sie in der Online-Hilfe von Outlook.
Wenn Sie alle Informationen in den Outlook-Kontakt bertragen haben, verwenden Sie die
Methode Save, um den Kontakt im Kontaktordner zu speichern. Um am Ende des Makros
ausgeben zu knnen, wie viele Kontakte bertragen wurden, addieren Sie die Zhlvariable i
nach jedem Schleifendurchlauf um den Wert 1. Wurden alle Datenbankfelder der Tabelle
Kontakte abgearbeitet, wird die Schleife verlassen. Geben Sie am Ende des Makros in einer
Bildschirmmeldung die Anzahl der bertragenen Adressen aus. Vergessen Sie nicht, die Ver-
weise auf die Outlook-Objekte zu entfernen, um den reservierten Arbeitsspeicher wieder
freizugeben
437 Kontaktdaten von Outlook importieren
Das folgende Beispiel aus Listing 526 stellt genau den umgekehrten Vorgang wie gerade
beschrieben dar. Dabei werden alle Kontaktdaten aus Outlook in die Access-Tabelle Kontakte
geschrieben. Als Ausgangs-Kontaktordner liegt der Ordner aus Abbildung 328 vor.
Eigenschaft Bedeutung
LastName
Nachname der Kontaktperson
FirstName
Vorname der Kontaktperson
BusinessAddressStreet
Strae der Kontaktperson (Arbeitsplatz).
BusinessAddressPostalCode
Postleitzahl des Arbeitgebers
BusinessAddressCity
Geschftssitz (Ort)
BusinessAddressState
Bundesland des Arbeitsgebers
BusinessTelephoneNumber
Geschftliche Telefonnummer
BusinessFaxNumber
Faxnummer vom Arbeitsplatz
Birthday
Geburtstag der Kontaktperson
Email1Address
E-Mail-Adresse der Kontaktperson
Tabelle 156: Einige Angaben zur Kontaktperson
Sandini Bib
654 Access und ...
Abbildung 328: Diese Kontakte sollen in eine Access-Tabelle bertragen werden.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub KontakteAusOutlookbernehmen()
Dim OutlN As Object
Dim OutArbeitsverz As Object
Dim OutKon As Object
Dim DBS As Recordset
Dim CONN As Database
Dim intz As Integer
Dim intNeu As Integer
Dim intUpd As Integer
Dim strNachname As String
Dim strVorname As String
intz = 0
intNeu = 0
intUpd = 0
Set CONN = CurrentDb
Set DBS = [Link]("Kontakte", dbOpenDynaset)
Listing 526: Kontaktdaten aus Outlook nach Access transferieren
Sandini Bib
Kontaktdaten von Outlook importieren 655
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Set OutIN = CreateObject("[Link].11")
Set OutArbeitsverz = _
[Link]("MAPI").GetDefaultFolder(olFolderContacts)
For intz = 1 To [Link]
Set OutKon = [Link](intz)
strNachname = [Link]
strVorname = [Link]
strNachname = "Nachname = '" & strNachname & "'"
With OutKon
[Link] strNachname
If [Link] Then
[Link]
DBS!Nachname = .LastName
DBS!Vorname = .FirstName
DBS!Strae = .BusinessAddressStreet
DBS!PLZ = .BusinessAddressPostalCode
DBS!Ort = .BusinessAddressCity
DBS!Bundesland = .BusinessAddressState
DBS!Telefon = .BusinessTelephoneNumber
DBS!Fax = .BusinessFaxNumber
DBS!Geburtsdatum = .Birthday
DBS!Mail = .Email1Address
intNeu = intNeu + 1
Else
If DBS!Vorname = strVorname Then
[Link]
DBS!Strae = .BusinessAddressStreet
DBS!PLZ = .BusinessAddressPostalCode
DBS!Ort = .BusinessAddressCity
DBS!Bundesland = .BusinessAddressState
DBS!Telefon = .BusinessTelephoneNumber
DBS!Fax = .BusinessFaxNumber
DBS!Geburtsdatum = .Birthday
DBS!Mail = .Email1Address
intUpd = intUpd + 1
Else
[Link]
DBS!Nachname = .LastName
DBS!Vorname = .FirstName
DBS!Strae = .BusinessAddressStreet
DBS!PLZ = .BusinessAddressPostalCode
DBS!Ort = .BusinessAddressCity
DBS!Bundesland = .BusinessAddressState
DBS!Telefon = .BusinessTelephoneNumber
DBS!Fax = .BusinessFaxNumber
DBS!Geburtsdatum = .Birthday
DBS!eMail = .Email1Address
intNeu = intNeu + 1
End If
Listing 526: Kontaktdaten aus Outlook nach Access transferieren (Forts.)
Sandini Bib
656 Access und ...
Das Makro ermittelt zuerst, wie viele Kontakte im Outlook-Kontaktordner angelegt sind. In
Abhngigkeit davon wird eine Schleife durchlaufen, die alle Kontakte aus der lokalen Out-
look-Datei ([Link]) in die zentrale Access-Kontakttabelle bertrgt. Dabei wird geprft,
ob der zu bertragende Satz sich bereits in der Access-Kontakttabelle befindet. Als Prfkrite-
rium wird der Name herangezogen, welcher in der Variablen strNachname zwischengespei-
chert wird. Mit der FindFirst-Methode wird der erste Datensatz in der Tabelle gesucht,
welcher dem Kriterium entspricht. Wird kein zutreffender Satz gefunden, gibt die Eigen-
schaft NoMatch den Rckgabewert True zurck. In diesem Fall muss der komplette Kontakt
aus Outlook in die Access-Kontakttabelle bernommen werden. Liefert die Eigenschaft
NoMatch hingegen den Wert False zurck, entspricht das Suchkriterium NAME einem bereits
angelegten Namen. Nun ist zu prfen, ob der VORNAME aus Outlook mit dem Vornamen in der
Kontakttabelle bereinstimmt. Wenn dem so ist, darf kein neuer Satz angelegt werden. Es
darf lediglich ein Update des bereits bestehenden Satzes erfolgen. Als Informationen fr ein
Update sind hier die Felder Strae, PLZ, Ort, Bundesland, Telefon und Fax vorgesehen. Das
Update wird eingeleitet ber die Methode Edit, welche den aktuellen Datensatz aus dem
aktualisierbaren Recordset-Objekt in den Kopierpuffer kopiert, damit er anschlieend bear-
beitet werden kann. Jetzt werden die einzelnen Informationen bertragen.
Stimmt hingegen der vorher in der Variablen strVorname gespeicherte Vornamen nicht mit
dem Outlook-VORNAMEN berein, muss der Satz in der Kontakttabelle neu angelegt werden.
Dies geschieht ber die Methode AddNew. Gleich danach werden alle Kontaktfelder aus Out-
look in den Kopierpuffer hineinkopiert.
Egal, ob es sich um ein Update oder eine Neuanlage handelt erst die Methode Update sorgt
dafr, dass der Inhalt des Kopierpuffers letztendlich in den Datensatz geschrieben wird. Fr
den Update-Fall sowie den Neuanlage-Fall werden zwei verschiedene Zhler verwendet, wel-
che am Ende des Datenaustauschs am Bildschirm ausgegeben werden. Um den Speicher am
End If
End With
[Link]
Next intz
MsgBox "Datentransfer erfolgreich beendet! " & vbLf & _
"Es wurden " & intNeu & " Stze angelegt, " & vbLf & _
"Es wurden " & intUpd & " Stze upgedatet!"
[Link]
Set OutKon = Nothing
Set OutArbeitsverz = Nothing
Set OutlN = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 526: Kontaktdaten aus Outlook nach Access transferieren (Forts.)
Sandini Bib
Termine aus dem Outlook-Kalender abfragen 657
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Ende wieder freizugeben, verwenden Sie das Schlsselwort Nothing. Damit heben Sie die Ver-
bindung der Objektvariablen zu den zugehrigen Objekten wieder auf.
438 Termine aus dem Outlook-Kalender abfragen
Im nchsten Beispiel aus Listing 527 werden Termine aus dem Outlook-Kalender ausgelesen.
Abbildung 329: Die Kontakte wurden erfolgreich bertragen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub TermineAuslesen()
Dim OutIn As Object
Dim OutKal As Object
Dim OutTermin As Object
Dim intz As Integer
Set OutIn = CreateObject("[Link].11")
Set OutKal = _
[Link]("MAPI").GetDefaultFolder(olFolderCalendar)
For intz = 1 To [Link]
Set OutTermin = [Link](intz)
With OutTermin
[Link] .Subject
[Link] .Body
[Link] .Categories
[Link] .Start & vbLf
End With
Listing 527: Termine aus dem Outlook-Kalender abfragen
Sandini Bib
658 Access und ...
Als Standardordner zapfen Sie in Outlook nun den Kalenderordner an, der ber die Kon-
stante olFolderCalendar angesprochen werden kann. Danach arbeiten Sie alle eingetragenen
Termine ab und geben diese im Direktfenster der Entwicklungsumgebung aus.
Die typischen Eigenschaften, die Sie beim Terminkalender einsetzen knnen, entnehmen Sie
bitte der folgenden Tabelle 157.
Next intz
MsgBox "Es wurden " & intz & " Termine gefunden!"
Set OutTermin = Nothing
Set OutTasks = Nothing
Set OutIn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Eigenschaft Beschreibung
Subject
Mit dieser Eigenschaft legen Sie den Betreff des
Termins fest.
Body
Hier knnen Sie eine nhere Beschreibung hinter-
legen, die im Textkrper ausgegeben wird.
RequiredAttendees
Damit werden die an dem Termin beteiligten
Personen aufgelistet.
Location
Diese Eigenschaft legt den Ort des Termins fest.
Categories
ber diese Eigenschaft knnen Sie den Termin in
einer Obergruppe zusammenfassen.
Start
Hiermit legen Sie das Startdatum sowie die Start-
zeit fest.
End ber diese Eigenschaft knnen Sie das Ende eines
Termins bestimmen.
Duration ber diese Eigenschaft geben Sie die Dauer der
Besprechung bzw. des Termins in Minuten an.
ReminderMinutesBeforeStart Gibt die Zahl der Minuten an, die eine Erinnerung
vor dem Beginn eines Termins auf dem Bild-
schirm angezeigt werden soll.
Tabelle 157: Einige Angaben zum Terminkalender
Listing 527: Termine aus dem Outlook-Kalender abfragen (Forts.)
Sandini Bib
Aufgaben abfragen 659
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
439 Aufgaben abfragen
Im folgenden Beispiel aus Listing 528 werden alle Aufgaben aus der Aufgabenliste von Out-
look abgefragt und im Direktfenster der Entwicklungsumgebung ausgegeben. Bei der folgen-
den Aufgabe wird von der Liste aus Abbildung 330 ausgegangen.
ReminderPlaySound Mithilfe dieser Eigenschaft knnen Sie die Erinne-
rungsmeldung auf dem Bildschirm noch zustz-
lich mit einem Sound untermalen lassen.
ReminderSet ber diese Eigenschaft schalten Sie die Erinne-
rungsfunktion ein.
Abbildung 330: Diese Aufgabenliste wird ausgelesen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub AufgabenAuslesen()
Dim OutIn As Object
Dim OutTask As Object
Dim OutAufgabe As Object
Listing 528: Aufgaben aus Outlook auslesen
Eigenschaft Beschreibung
Tabelle 157: Einige Angaben zum Terminkalender (Forts.)
Sandini Bib
660 Access und ...
Mchten Sie die Aufgabenliste von Outlook ansprechen, dann mssen Sie der Methode die
Konstante olFolderTasks der Methode GetDefaultFolder mitgeben. Damit haben Sie unter
anderem Zugriff auf die Eigenschaften, die in der folgenden Tabelle aufgelistet werden.
Dim intz As Integer
Set OutIn = CreateObject("[Link].11")
Set OutTask = _
[Link]("MAPI").GetDefaultFolder(olFolderTasks)
For intz = 1 To [Link]
Set OutAufgabe = [Link](intz)
With OutAufgabe
[Link] "Titel: " & .Subject
[Link] "Einzelheiten : " & .Body
[Link] "Fertigstellung: " & .Complete
[Link] "Startdatum: " & .StartDate
[Link] "Flligkeit: " & .DueDate
[Link] "Kategorie: " & .Categories
[Link] "Erinnerung: " & .ReminderTime & vbLf
End With
Next intz
[Link] "Es wurden " & intz & " Aufgaben gefunden!"
Set OutAufgabe = Nothing
Set OutTask = Nothing
Set OutIn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Eigenschaft Beschreibung
Subject Durch diese Eigenschaft knnen Sie den Betreff
der Aufgabe festlegen.
Body
Hier knnen Sie eine nhere Beschreibung hinter-
legen, die im Textkrper ausgegeben wird.
Complete
Diese Eigenschaft setzen Sie auf den Wert True,
wenn Sie die Aufgabe bereits abgeschlossen haben.
StartDate
ber diese Eigenschaft legen Sie den Starttermin
der Aufgabe fest.
DueDate
Mithilfe dieser Eigenschaft bestimmen Sie den
Flligkeitstermin Ihrer Aufgabe.
Tabelle 158: Einige Eigenschaften zur Aufgabenliste von Outlook
Listing 528: Aufgaben aus Outlook auslesen (Forts.)
Sandini Bib
E-Mails in Access-Tabelle schreiben 661
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
440 E-Mails in Access-Tabelle schreiben
Mchten Sie Ihre eingegangenen E-Mails aus dem Outlook-Posteingangsordner in eine
Datenbank berfhren und auswerten? Dann knnen Sie eine Tabelle anlegen und die
ActualWork
ber diese Eigenschaft knnen Sie einen Wert
festlegen, der den Ist-Aufwand Ihrer Aufgabe in
Minuten angibt.
Categories
ber diese Eigenschaft knnen Sie den Termin in
einer Obergruppe zusammenfassen.
Complete
Dieser Eigenschaft geben Sie den Wert True, wenn
die Aufgabe abgeschlossen ist.
ReminderMinutesBeforeStart
Gibt die Zahl der Minuten an, die eine Erinnerung
vor dem Beginn einer Aufgabe auf dem Bild-
schirm angezeigt werden soll.
ReminderPlaySound
Mithilfe dieser Eigenschaft knnen Sie die Erinne-
rungsmeldung auf dem Bildschirm noch zustz-
lich mit einem Sound untermalen lassen.
ReminderSet
ber diese Eigenschaft schalten Sie die Erinne-
rungsfunktion ein.
ReminderSoundFile
Mithilfe dieser Eigenschaft knnen Sie eine andere
Sounddatei angeben, die erklingen soll, wenn Sie das
Erinnerungsfenster an eine Aufgabe erinnern soll.
Abbildung 331: Die Aufgaben wurden direkt aus Outlook extrahiert.
Eigenschaft Beschreibung
Tabelle 158: Einige Eigenschaften zur Aufgabenliste von Outlook (Forts.)
Sandini Bib
662 Access und ...
E-Mail-Informationen aus Outlook in diese Tabelle per VBA-Makro einfgen. Dabei sollen
folgende Felder dokumentiert werden:
Titel der E-Mail
Name des Absenders der E-Mail
Inhalt der Mail
Datum/Uhrzeit des E-Mail-Eingangs
Anzahl der Dateianhnge der E-Mail
Lesestatus der E-Mail
Legen Sie zunchst eine Tabelle nach dem Vorbild aus Abbildung 332 an.
Erfassen Sie jetzt das Makro aus Listing 529, welches die Tabelle MailIn ffnet, im Hinter-
grund auf Ihren Posteingangsordner zugreift und die einzelnen E-Mail-Informationen dort
eintrgt.
Abbildung 332: Der Aufbau der Tabelle MailIn
Sandini Bib
E-Mails in Access-Tabelle schreiben 663
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub MailsSichern()
Dim Out As [Link]
Dim intGes As Integer
Dim intz As Integer
Dim Conn As New [Link]
Dim DBS As [Link]
On Error GoTo fehler
Set Conn = [Link]
Set DBS = New [Link]
[Link] "MailIN", Conn, adOpenKeyset, adLockOptimistic
Set Out = GetObject("", "[Link]").GetNamespace _
("MAPI").GetDefaultFolder(olFolderInbox)
intGes = [Link]
intz = 0
For intz = 1 To intGes
With [Link](intz)
[Link]
DBS!Titel = .Subject
DBS!Absender = .SenderName
DBS!Inhalt = .Body
DBS!Erhalten = Format(.ReceivedTime, "[Link] hh:mm")
DBS!Anhang = .[Link]
DBS!Gre = .Size
If Not .UnRead = -1 Then
DBS!Gelesen = "JA"
Else
DBS!Gelesen = "Nein"
End If
[Link]
End With
Next intz
[Link]
With DBS
.CursorLocation = adUseClient
.Open "MailIN", Conn, adOpenKeyset, adLockOptimistic
.Sort = "Erhalten ASC"
End With
Set Out = Nothing
Listing 529: Alle Mails aus dem Posteingang werden in eine Access-Tabelle geschrieben.
Sandini Bib
664 Access und ...
ber das Objekt CurrentProject ffnen Sie die gerade angelegte Tabelle ber die Methode
Open.
Mithilfe der Methoden GetObject und GetDefaultFolder, der Sie die Konstante olFolderInbox
bergeben, gewinnen Sie direkten Zugriff auf Ihren Posteingangs-Ordner in Outlook.
ber die Eigenschaft Count zhlen Sie zunchst, wie viele E-Mails (Items) sich im Postein-
gang befinden. Arbeiten Sie danach alle E-Mails ab, indem Sie eine Schleife einsetzen. Inner-
halb der Schleife setzen Sie die Methode AddNew ein, um einen neuen Datensatz anzulegen.
Danach fragen Sie die Betreff-Zeile ber die Eigenschaft Subject ab und speichern diese
Information im Datenbankfeld Titel.
ber die Eigenschaft SenderName finden Sie heraus, von wem die E-Mail an Sie gesendet
wurde. Sichern Sie diese Information in das Datenbankfeld ABSENDER.
Mithilfe der Eigenschaft Body knnen Sie den kompletten E-Mail-Text auslesen.
Die Eigenschaft ReceivedTime liefert Ihnen das genaue Datum sowie die Uhrzeit des E-Mail-
Eingangs. Diese Zeitangaben knnen Sie ber die Funktion Format in das gewnschte Format
berfhren und im Datenbankfeld ERHALTEN ablegen.
Mithilfe der Eigenschaft Count, welche Sie auf das Objekt Attachments anwenden, erfahren
Sie, wie viele Anhnge in der E-Mail vorhanden waren. Diesen Wert bertragen Sie in das
Datenbankfeld Anhang.
Die Eigenschaft UnRead liefert den Wert -1, sofern eine E-Mail noch nicht gelesen wurde. In
Abhngigkeit dieses Werts schreiben Sie entweder den Text Ja bzw. den Text Nein in das
Datenbankfeld Gelesen.
Setzen Sie die Methode Update ein, um den jeweils angelegten Datensatz tatschlich auch
dauerhaft zu sichern.
Wenn alle E-Mails abgearbeitet wurden, verlsst Access die Schleife und wendet die Methode
Close an, um die Datenbanktabelle zu schlieen.
ffnen Sie die Tabelle gleich wieder direkt im Anschluss und setzen Sie die Eigenschaft Sort
ein, um die dokumentierten E-Mails nach dem Posteingangsdatum zu sortieren.
Set DBS = Nothing
Set Conn = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 529: Alle Mails aus dem Posteingang werden in eine Access-Tabelle geschrieben. (Forts.)
Sandini Bib
Sammel-Mails versenden 665
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
441 Sammel-Mails versenden
Bei der folgenden Lsung aus Listing 530 werden gleich mehrere Mails an unterschiedliche
Adressaten geschickt. Dabei werden die einzelnen E-Mail-Adressen aus der Access-Tabelle
Kontakte entnommen.
Abbildung 333: Alle Mails werden in Access gesichert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub MehrereEMailsVersenden()
Dim OutVerz As Object
Dim OutMail As Object
Dim OutMapi As New [Link]
Dim CONN As Database
Dim DBS As Recordset
Dim strText As String
Const Titel = "ACHTUNG"
Const MailText = "Auf dem Server befinden sich neue Updates!"
On Error GoTo fehler
Set OutVerz = [Link]("MAPI").GetDefaultFolder(olFolderContacts)
Set CONN = CurrentDb()
strText = "SELECT Mail from Kontakte"
Set DBS = [Link](strText)
Do Until [Link]
If Not IsNull(DBS!Mail) Then
Set OutMail = CreateItem(olMailItem)
With OutMail
Listing 530: Eine Sammel-Mail versenden
Sandini Bib
666 Access und ...
Den Titel sowie den eigentlichen Text der E-Mail knnen Sie als Konstanten zu Beginn des
Makros definieren. Danach stellen Sie die Verbindung zur Tabelle her und formulieren die
SQL-Abfrage zunchst in einer String-Variablen. ffnen Sie die Datentabelle ber die
Methode OpenRecordSet und durchlaufen Sie alle Datenstze dieser Tabelle.
In einer Schleife arbeiten Sie alle Datenstze der Tabelle Kontakte ab. Innerhalb der Schleife
wenden Sie die Funktion IsNull an. Verhindern Sie, dass Datenstze, die keine E-Mail-
Adresse beinhalten, nicht mit verarbeitet werden. Danach erstellen Sie ber die Methode
CreateItem eine neue, noch leere Mail, indem Sie der Methode die Konstante olMailItem
zuweisen. ber die Eigenschaft Subject knnen Sie den Titel der E-Mail festlegen. Die Eigen-
schaft Body wird dazu eingesetzt, die eigentliche Nachricht abzusetzen. ber die Methode
Add, die auf das Objekt Attachment angewendet wird, wird die Meldung noch als Dateianhang
zustzlich an die Mail angehngt. Mithilfe der Methode Save speichern Sie zunchst alle
Mails im Outlook-Ordner ENTWRFE. Von dort knnen sie dann nach einer kurzen ber-
prfung zu einem spteren Zeitpunkt direkt aus Outlook versendet werden (siehe Abbildung
334).
442 E-Mail-Anhnge speichern
Bei der folgenden Lsung aus Listing 531 handelt es sich um einen Automatismus, der auf
den Posteingangsordner von Outlook zugreift und alle Mails abarbeitet. Dabei werden alle
Mailanhnge in einem bestimmten Ordner gespeichert.
.Subject = Titel
.Body = MailText
.[Link] "C:\Eigene Dateien\[Link]"
.To = DBS!Mail
.Save
End With
End If
[Link]
Loop
Set OutVerz = Nothing
Set OutMail = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 530: Eine Sammel-Mail versenden (Forts.)
Sandini Bib
E-Mail-Anhnge speichern 667
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 334: Mehrere Mails wurden in den Ordner Entwurf geschrieben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlOut
'=====================================================
Sub AnhngeSpeichern()
Dim OutMapi As New [Link]
Dim OutVerz As Object
Dim OutMail As Object
Dim intz As Integer
Dim intAnhZ As Integer
On Error GoTo fehler
Set OutVerz = [Link]("MAPI").GetDefaultFolder(olFolderInbox)
For intz = 1 To [Link]
Set OutMail = [Link](intz)
If [Link] > 0 Then
For intAnhZ = 1 To [Link]
[Link](intAnhZ).SaveAsFile _
"C:\Test\" & [Link](intAnhZ)
Next intAnhZ
End If
Set OutMail = Nothing
Next intz
Listing 531: E-Mail-Anhnge werden separat gespeichert.
Sandini Bib
668 Access und ...
Im Makro aus Listing 531 werden alle E-Mails des aktiven Mailordners gezhlt, das heit,
man muss vor dem Start des Makros den gewnschten Ordner in Outlook aktivieren. Das
Zhlen der E-Mails erfolgt ber die Funktion Count. Danach werden alle E-Mails des vorher
eingestellten Ordners in Outlook ber eine Schleife abgearbeitet. Fr den Fall, dass eine
E-Mail einen Anhang hat, meldet die Anweisung [Link] einen Wert gr-
er Null. In diesem Fall wird der Anhang ber die Methode SaveAsFile im angegebenen Ver-
zeichnis gespeichert. Am Ende des Makros werden die Objektverweise ber das
Schlsselwort Nothing aufgehoben, um den Speicher wieder freizugeben.
443 Eine Diashow im Internet Explorer programmieren
Auch der Internet Explorer kann von Access aus gesteuert werden. Um die Objekte, Metho-
den und Eigenschaften des Internet Explorers vorab einmal anzusehen, binden Sie in der
Entwicklungsumgebung die Bibliothek MICROSOFT INTERNET CONTROLS ein. Rufen Sie
danach die Objektbibliothek ber die Taste (F2) auf und whlen Sie aus dem Kombinations-
feld den Eintrag SHDOCVW aus
Im folgenden Beispiel aus Listing 532 wird ein Verzeichnis nach Grafikdateien durchsucht.
Diese werden im Abstand von ein paar Sekunden im Internet Explorer hnlich einer Dia-
Show angezeigt.
Set OutMapi = Nothing
Set OutVerz = Nothing
MsgBox "Verarbeitung beendet!"
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlIE
'=====================================================
Declare Sub Sleep Lib "[Link]" (ByVal SchlafZeit As Long)
Sub InternetExplorer()
Dim IE As New InternetExplorer
Dim varDat as Variant
[Link] = True
Listing 532: Eine Dia-Show im Internet Explorer durchfhren
Listing 531: E-Mail-Anhnge werden separat gespeichert. (Forts.)
Sandini Bib
URLs auslesen 669
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Erstellen Sie zunchst ein neues Internet-Explorer-Objekt ber die Deklaration Dim IE as
New InternetExplorer. Danach haben Sie automatisch Zugriff auf alle Methoden und Eigen-
schaften, die dieses Objekt standardmig anbietet. Danach weisen Sie der Eigenschaft
Visible den Wert True zu, um den Internet Explorer anzuzeigen. Im nchsten Schritt fhren
Sie eine Suche ber das Objekt FileSearch durch und ermitteln dabei alle Grafikdateien eines
Verzeichnisses, welches Sie ber die Eigenschaft LookIn angeben. Damit ausschlielich Gra-
fikdateien vom Typ JPG gesucht werden, bergeben Sie diese Information der Eigenschaft
FileName. Mithilfe der Eigenschaft SearchSubFolders knnen Sie bestimmen, ob auch noch
weitere Verzeichnisse, die in der Hierarchie unterhalb des bei der Eigenschaft LookIn angege-
benen Verzeichnisses liegen, durchsucht werden sollen. Im Beispiel aus Listing 532 wird dies
jedoch nicht zugelassen.
ber die Methode Execute wird die eigentliche Suche gestartet. Dabei wird die Verarbeitung
im Makro nur fortgesetzt, wenn berhaupt etwas gefunden wird. Nach einer erfolgreichen
Suche stehen die Namen aller gefundenen Dateien im Objekt FoundFiles, das Sie nun in einer
For each Next-Schleife auslesen knnen. Innerhalb der Schleife wenden Sie die Methode
Navigate an, um das jeweilige Bild in den Internet Explorer zu laden. Bevor jetzt das nchste
Bild im Internet Explorer angezeigt wird, erfolgt eine Pause von 2000 Millisekunden. Diese
Pause wird ber die API-Funktion Sleep realisiert.
444 URLs auslesen
Im folgenden Beispiel wird der Text einer Internetseite ausgelesen. Dazu erfassen Sie die
Funktion aus Listing 533.
With [Link]
.NewSearch
.LookIn = "C:\Eigene Dateien\"
.FileName = "*.jpg"
.SearchSubFolders = False
If .Execute() > 0 Then
For Each varDat In .FoundFiles
[Link] varDat
Sleep 2000
Next varDat
End If
End With
[Link]
Set IE = Nothing
End Sub
Listing 532: Eine Dia-Show im Internet Explorer durchfhren (Forts.)
Sandini Bib
670 Access und ...
Durch die Anweisung CreateObject wird eine neue Internet-Explorer-Sitzung erstellt. ber
die Methode Navigate laden Sie die angegebene Seite. Mithilfe der Eigenschaft Innertext, mit
der Sie auf das Objekt Body im aktuell geladenen Dokument zugreifen, knnen Sie den Text
Abbildung 335: Die Diashow ber den Internet Explorer
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlIE
'=====================================================
Function URLText(sURL As String) As String
Dim IE As Object
Set IE = CreateObject("[Link]")
[Link] sURL
URLText = [Link]
[Link]
Set IE = Nothing
End Function
Listing 533: Internetseitentext auslesen
Sandini Bib
Ist Word bereits gestartet? 671
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
der Internetseite abfragen. Die Anwendung wird am Ende ber die Methode Quit beendet.
Danach wird der Objektverweis durch die Anweisung Set IE = Nothing aufgehoben.
445 Ist Word bereits gestartet?
Mchten Sie Daten von Access nach Word bertragen, knnen Sie im ersten Schritt die
Methoden CreateObject und GetObject einsetzen. So rufen Sie Ihre Textverarbeitung Word
auf. Dabei prfen Sie mithilfe der Funktion GetObject, ob Word bereits gestartet ist (fr
Word 2002 mssen Sie die Versionsnummer 10, fr Word 2000 die Versionsnummer 9 ange-
ben). Wenn nicht, bekommen Sie die Fehlernummer 429 zurck, die besagt, dass die Objekt-
komponente nicht verfgbar ist. In diesem Fall erstellen Sie ber die Funktion CreateObject
einen Verweis auf Word.
Als erstes Beispiel fr das Zusammenspiel von Access und Word schreiben Sie die Funktion
Listing 535, die berprft, ob Word bereits gestartet ist. Dabei muss die Word-Bibliothek
unter EXTRAS/VERWEISE als Voraussetzung eingebunden sein.
Verwenden Sie die GetObject-Funktion fr den Zugriff auf die Objektbibliothek von Word,
und weisen Sie das Objekt einer Objektvariablen zu. Verwenden Sie die Set-Anweisung, um
Sub OeffnenIE()
Dim strSeite As String
strSeite = URLText([Link] & "\[Link]")
MsgBox strSeite
End Sub
Listing 534: URL-Text einer Seite auslesen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlWord
'=====================================================
Function WordOffen() As Boolean
Dim WordApp As [Link]
On Error Resume Next
Set WordApp = GetObject(, "[Link]")
If [Link] = 0 Then
WordOffen = True
Else
WordOffen = False
End If
End Function
Listing 535: Funktion, die prft, ob Word gestartet ist
Sandini Bib
672 Access und ...
das von GetObject zurckgegebene Objekt der Objektvariablen zuzuweisen. Ist dieser Vor-
gang erfolgreich, dann meldet das Objekt Err den Wert 0. In diesem Fall ist Word bereits
gestartet. Als Rckgabewert geben Sie daher den Wahrheitswert True an das aufrufende
Makro aus Listing 536 zurck.
Im Makro aus Listing 536 wurde das Late-Binding durchgefhrt und die Objektvariable
WordApp deklariert. Meldet die Funktion WordOffen den Rckgabewert False, dann ist Word
noch nicht geffnet. In diesem Fall wenden Sie die Funktion CreateObject an, um ein Word-
Objekt zu erstellen. Danach haben Sie Zugriff auf alle Methoden und Eigenschaften des
Objekts. Verwenden Sie im Anschluss daran die Methode Add des Objekts Documents, um ein
neues Dokument einzufgen. Wenden Sie danach die Eigenschaft Visible an, um die Appli-
kation anzuzeigen.
446 Access-Tabelle bertragen
Im nchsten Beispiel soll die Access-Tabelle Artikel in ein neues Word-Dokument eingefgt
werden. Dabei soll in Word eine neue leere Tabelle eingefgt werden, die danach mit den ein-
zelnen Datenfeldern aus der Datenbanktabelle gefllt wird. Das etwas lngere Makro fr
diese Aufgabe sehen Sie in Listing 537.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlWord
'=====================================================
Sub StartWord()
Dim WordApp As Object
If WordOffen = False Then
Set WordApp = CreateObject("[Link]")
[Link]
[Link] = True
End If
End Sub
Listing 536: Word wird gestartet.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlWord
'=====================================================
Listing 537: Eine Access-Tabelle in ein Word-Dokument bertragen Variante 1
Sandini Bib
Access-Tabelle bertragen 673
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Sub AccessTabelleNachWord()
Dim WordObj As Object
Dim WordDoc As Object
Dim intPos As Object
Dim WordTab As Object
Dim dbs As New [Link]
Dim intz As Integer
On Error GoTo fehler
[Link] "Artikel", [Link]
Set WordObj = GetObject(, "[Link].11")
If [Link] = 429 Then
Set WordObj = CreateObject("[Link].11")
[Link] = 0
End If
[Link] = True
Set WordDoc = [Link]
With [Link]
.TypeText Text:="Artikelliste aus : " & [Link]
.TypeParagraph
.TypeText Text:="vom " & Format(Now(), "dd-mmm-yyyy")
.TypeParagraph
End With
Set intPos = [Link](Start:=0, End:=0)
Set WordTab = [Link](Range:=intPos, NumRows:=80, NumColumns:=6)
With WordTab
.Cell(1, 1).[Link] = "Artikelname"
.Cell(1, 2).[Link] = "Liefereinheit"
.Cell(1, 3).[Link] = "Einzelpreis"
.Cell(1, 4).[Link] = "Mindestbestand"
.Cell(1, 5).[Link] = "Lagerbestand"
.Cell(1, 6).[Link] = "Bestellte Einheiten"
End With
intz = 2
Do Until [Link]
With WordTab
.Cell(intz, 1).[Link] = dbs!Artikelname
.Cell(intz, 2).[Link] = dbs!Liefereinheit
.Cell(intz, 3).[Link] = dbs!Einzelpreis
.Cell(intz, 4).[Link] = dbs!Mindestbestand
.Cell(intz, 5).[Link] = dbs!Lagerbestand
.Cell(intz, 6).[Link] = dbs!BestellteEinheiten
intz = intz + 1
[Link]
Listing 537: Eine Access-Tabelle in ein Word-Dokument bertragen Variante 1 (Forts.)
Sandini Bib
674 Access und ...
Legen Sie im ersten Schritt die bentigten Objektvariablen an. Unter anderem brauchen Sie
ein Objekt, um die Textverarbeitung Word zu verwalten, und eines, um das neue Dokument
darin ansprechen zu knnen. Fr Ihre Access-Datentabelle bentigen Sie ein Recordset-
Objekt, ber das Sie alle Stze in der Tabelle Artikel programmiertechnisch bearbeiten kn-
nen. Nachdem Sie Ihre Tabelle sowie die Textverarbeitung Word mithilfe der Methode Open
bzw. CreateObject gestartet haben, machen Sie die Word-Anwendung sichtbar. Dazu setzen
Sie die Eigenschaft Visible auf den Wert True.
Mithilfe der Methode Add fgen Sie jetzt ein neues, noch leeres Dokument ein. Damit Sie sp-
ter dieses neue Dokument weiter verarbeiten knnen, speichern Sie es in der Objektvariablen
WordDoc.
Sie haben jetzt eine Mischung aus Access- und Word-VBA-Befehlen. Unterscheiden knnen
Sie diese, indem Sie immer das anfhrende Objekt ansehen. WordObj, WordDoc und WordTab
beinhalten die Word-VBA-Befehle, das Objekt dbs beinhaltet alle Access-VBA-Befehle.
Mithilfe der Word-Eigenschaft Selection knnen Sie einen markierten Bereich oder eine Ein-
fgestelle im Dokument angeben. ber die Methode TypeText knnen Sie an der Einfge-
stelle einen beliebigen Text einfgen. Das Access-Objekt CurrentProject in Verbindung mit
der Eigenschaft Name gibt Auskunft darber, woher die Daten stammen, die bertragen wer-
den sollen. Nach dem Einfgen des Textes fgen Sie einen leeren Absatz ein und geben
danach das formatierte Tagesdatum aus.
Fgen Sie jetzt eine neue Tabelle in Ihr Dokument ein. Dazu mssen Sie vorher die aktuelle
Position im Dokument bestimmen, wo die neue Tabelle eingefgt werden soll. Diese Infor-
mation speichern Sie in der Objektvariablen IntPos. Mithilfe der Methode Add, die Sie auf das
Objekt Tables anwenden, fgen Sie Ihre neue Tabelle in das Dokument ein.
Die Methode Add zum Einfgen einer Tabelle hat folgende Syntax:
Add(Range, NumRows, NumColumns DefaultTableBehavior, AutoFitBehavior)
Unter dem Argument Range geben Sie die genaue Einfgeposition der Tabelle bekannt.
End With
Loop
[Link] "c:\Eigene Dateien\[Link]"
[Link]
Set WordObj = Nothing
Set WordDoc = Nothing
Set WordTab = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 537: Eine Access-Tabelle in ein Word-Dokument bertragen Variante 1 (Forts.)
Sandini Bib
Access-Tabellen transferieren 675
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Im Argument NumRows legen Sie die Anzahl der Zeilen fest, die in der Tabelle enthalten sein
sollen.
Das Argument NumColumns bestimmt die Anzahl der Spalten, die in der Tabelle enthalten sein
sollen.
Mithilfe des Arguments DefaultTableBehavior knnen Sie entscheiden, ob sich die Zellen-
gre in der Tabelle automatisch ndert, wenn zu viele Zeichen in eine Zelle bertragen wer-
den. Standardmig ist diese Einstellung ber die Konstante wdWord9TableBehavior aktiviert
und kann daher auch weggelassen werden. Mchten Sie, dass sich die Zellgre nicht ndert,
dann verwenden Sie die Konstante wdWord8TableBehaviour.
Im letzten Argument AutoFitBehavior legen Sie die Regeln fr das AUTOANPASSEN der Zel-
len fest, nach denen die Gre von Tabellen in Word gendert wird. Dies kann eine der
folgenden WdAutoFitBehavior-Konstanten sein: wdAutoFitContent, wdAutoFitFixed oder
wdAutoFitWindow. Wenn DefaultTableBehavior auf wdWord8TableBehavior gesetzt ist, wird
dieses Argument ignoriert.
Um die Tabelle elegant ansprechen zu knnen, bilden Sie die Objektvariable WordTab und
speichern in ihr die erste Tabelle in Ihrem Dokument.
In einer anschlieenden Schleife wird die Access-Tabelle Artikel durchlaufen und die einzel-
nen Feldinhalte werden in die dafr vorgesehenen Zellen der Word-Tabelle bertragen. Set-
zen Sie fr diese Aufgabe das Word-Objekt Cell ein. Dieses Objekt erwartet einen Wert, der
die jeweilige Zeile identifiziert, sowie einen Wert fr die Spalte. Mit dem Objekt Range ist die
Zellenflche der einzelnen Tabellenzelle gemeint, welche Sie ber die Eigenschaft Text fllen
knnen. Als Text setzen Sie dabei natrlich die einzelnen Datenfelder Ihrer Access-Tabelle
ein. Addieren Sie bei jedem eingelesenen Satz die Zhlvariable intz, die fr die Zeile steht,
um den Wert 1 zu erhhen.
Vergessen Sie nicht, am Ende der Schleife den Zeiger ber die Methode MoveNext auf den
nchsten Datensatz in der Artikeltabelle zu setzen, da Sie sonst eine Endlosschleife produzie-
ren.
ber die Methode SaveAs speichern Sie das Dokument im angegebenen Verzeichnis. Die
Methode Close schliet im Anschluss daran das Dokument.
447 Access-Tabellen transferieren
Eine weitere sehr komfortable Art und Weise, eine Tabelle in ein Word-Dokument zu trans-
ferieren, lsst sich ber die Methode OutputTo realisieren. Bei dieser Methode wird Ihnen der
komplette Datentransfer weitestgehend abgenommen. Dabei wird die komplette Tabelle
bertragen.
Im folgenden Beispiel aus Listing 538 wird die Tabelle ARTIKEL als Word-Dokument ausgege-
ben.
Sandini Bib
676 Access und ...
Mit der Methode OutputTo knnen Sie die Daten in einem bestimmten Microsoft Access-
Datenbankobjekt (einem Datenblatt, einem Formular, einem Bericht, einem Modul oder
einer Datenzugriffsseite) in verschiedenen Formaten ausgeben. Dabei lautet die Syntax dieser
Methode wie folgt:
OutputTo(ObjectType, ObjectName, OutputFormat, OutputFile, AutoStart, TemplateFile)
Abbildung 336: Die Tabelle wurde nach Word bertragen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlWord
'=====================================================
Sub TabelleNachWordTranferieren()
On Error GoTo fehler
[Link] acOutputTable, "Artikel", acFormatRTF, _
"C:\Eigene Dateien\[Link]", True
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 538: Eine Access-Tabelle in ein Word-Dokument bertragen Variante 2
Sandini Bib
Access-Tabellen transferieren 677
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ber das Argument ObjectType legen Sie die Art des Access-Objekts fest, dessen Daten Sie
exportieren mchten.
Dabei haben Sie folgende Mglichkeiten.
acOutputForm: Export der Daten eines Formulars
acOutputFunction: Export einer Funktion zur Sicherung
acOutputModule: Export eines kompletten Moduls inklusive aller Funktionen und Makros
acOutputQuery: Export der Ergebnisse einer Abfrage
acOutputReport: Export eines Berichts
acOutputServerView: Export einer Serveransicht
acOutputStoredProcedure: Export einer gespeicherten Prozedur
acOutputTable: Export einer Tabelle
Beim Argument ObjectName geben Sie den Namen des Objekts an, das Sie exportieren mch-
ten. Im Makro aus Listing 538 ist dies der Name des Objekts acOutputTable.
Das Argument OutPutFormat legt fest, in welchem Datenformat Sie die Daten transferieren
mchten. Die bekanntesten Formate heien dabei wie folgt:
acFormatHTML: Konvertiert die Daten in das HTML-Format.
acFormatRTF: Konvertiert die Daten in das Rich-Text-Format. Dieses Format kann bei-
spielsweise problemlos in Microsoft Word eingelesen werden.
acFormatTXT: Mit diesem Format ist das Textformat gemeint.
acFormatXLS: Konvertiert die Daten in das Microsoft Excel-Format.
Beim Argument OutputFile geben Sie den Pfad sowie den Dateinamen der Datei an, in wel-
che Sie die Daten transferieren mchten. Dabei muss die Datei noch nicht vorhanden sein.
Access legt diese bei Bedarf selbst an.
Mithilfe des Arguments AutoStart haben Sie die Mglichkeit, die so erstellte Exportdatei
gleich zu ffnen. Verwenden Sie den Wert True, um die entsprechende auf Windows basie-
rende Anwendung sofort zu starten. Setzen Sie das Argument auf den Wert False oder lassen
Sie es weg, wenn Sie die Exportdatei nicht ffnen mchten.
Das Argument TemplateFile ist dann von Interesse, wenn Sie eine Vorlage beispielsweise fr
die HTML-Datei verwenden mchten. In diesem Fall ist der komplette Pfad dieser Vorlagen-
datei anzugeben.
Sandini Bib
678 Access und ...
448 Word-Makro starten
ber den Einsatz der Methode Run knnen Sie Makros starten. Wenn sich beispielsweise das
Makro Konvertierung in einem Word-Dokument befindet, das Sie von Access aus starten
mchten, dann wenden Sie das Makro aus Listing 539 an.
Abbildung 337: Die Ausgabe einer Tabelle ber OutputTo
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlWord
'=====================================================
Sub WordMakroStarten()
Dim DOK As Object
Set DOK = CreateObject("[Link]")
[Link] "C:\Eigene Dateien\[Link]"
[Link] "[Link]"
[Link]
[Link]
Set DOK = Nothing
End Sub
Listing 539: Ein Word-Makro von Access aus starten
Sandini Bib
Datenbankzugriff von Word durchfhren 679
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Setzen Sie die Methode Open ein, um das Word-Dokument zu ffnen, das das zu startende
Makro enthlt. Fhren Sie danach die Methode Run aus, der Sie den Namen des Makros
bekannt geben. Es kann dabei auch nicht schaden, genau anzugeben, wo das Makro sich in
der Entwicklungsumgebung befindet. Schlieen Sie nach dem Ablauf des Makros das Doku-
ment ber die Methode Close und beenden Sie die Word-Anwendung mithilfe der Methode
Quit. Heben Sie danach den Objektverweis DOK wieder auf, um den reservierten Speicher wie-
der freizugeben.
449 Datenbankzugriff von Word durchfhren
Der Datentransfer von Access nach Word verluft in den meisten Fllen genau umgekehrt.
Stellen Sie sich dazu einmal vor, Sie haben ein Word-Dokument und mchten jetzt beispiels-
weise Kontaktdaten aus einer Access-Tabelle abrufen. Diese Daten werden dann an bestimm-
ten Textmarken in Ihrem Dokument eingefgt. Um eine solche Lsung umzusetzen, mssen
Sie in Word anfangen zu programmieren und dann mithilfe von ADO auf eine Kontakt-
datenbank zugreifen. Dabei kann diese Aktion vllig im Hintergrund ablaufen, ohne dass der
Anwender etwas davon merkt. Sie als Administrator haben dann die Mglichkeit, eine ein-
zige Kontaktdatenbank anzulegen, auf die alle Ihre Anwender zugreifen. Es sollen in Zukunft
keine Insellsungen mehr existieren, sondern alles soll ber den Access-Datenbestand abge-
wickelt werden.
Im folgenden Beispiel wird von der Tabelle Kontakte ausgegangen, die Sie in Abbildung 339
vorab mal ansehen knnen.
Im nchsten Schritt legen Sie ein Word-Dokument mit dem Namen [Link] an und fgen
einige Textmarken ber den Menbefehl EINFGEN/TEXTMARKE ein.
Abbildung 338: Die Ausgangstabelle mit den Kontaktdaten
Sandini Bib
680 Access und ...
Verwenden Sie bei den Textmarken die aus Abbildung 340 vorgeschlagenen Textmarken,
damit der anschlieende Code auch richtig ohne weitere Anpassung luft.
Da das Kontaktdaten-Abfrage-Makro von Word aus gestartet werden soll, ist ein Dialog vor-
gesehen, aus dem der Anwender den Namen der Kontaktperson aus einem Kombinationsfeld
auswhlen kann. Dazu wechseln Sie ber die Tastenkombination (Alt) + (F11) in die Ent-
wicklungsumgebung von Word und fgen ber den Menbefehl EINFGEN/USERFORM einen
neuen, noch leeren Dialog ein. Auf dieser Userform fgen Sie zwei Schaltflchen und ein
Kombinationsfeld ein.
Beim Aufruf der Userform soll das Kombinationsfeld mit den Access-Daten Nachname und
Vorname gefllt werden. Dazu legen Sie das Ereignis aus Listing 540 genau hinter die User-
form.
Abbildung 339: Die Vorbereitung im Dokument
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Listing 540: Das Kombinationsfeld beim Aufruf der Userform fllen
Sandini Bib
Datenbankzugriff von Word durchfhren 681
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Damit das Makro aus Listing 540 korrekt abluft, binden Sie in der Entwicklungsumgebung
von Word die Bibliothek MICROSOFT ACTIVEX DATA OBJECT 2.7 LIBRARY ein, indem Sie diese
Bibliothek ber den Menbefehl EXTRAS/VERWEISE aus dem Listenfeld VERFGBARE VER-
WEISE aktivieren.
Die Datenbank mit der Tabelle Kontakte befindet sich in diesem Beispiel im gleichen Ver-
zeichnis wie das Word-Dokument [Link]. Daher knnen Sie dieses einheitliche Verzeich-
nis ber die Eigenschaft Path, welche Sie auf das aktuelle Dokument anwenden, abfragen und
anschlieend mit der Methode Open die Datenbank ffnen. Ebenso ber die Methode Open
wird die Tabelle Kontakte geffnet. Danach werden alle darin enthaltenen Datenstze verar-
beitet und die Felder Nachname und Vorname ber die Methode AddItem in das Kombinations-
feld eingelesen. Damit am Ende der erste Name im Listenfeld angezeigt wird, setzen Sie die
Eigenschaft ListIndex des Kombinationsfelds auf den Wert 0.
Das Makro fr den Start der Userform entnehmen Sie dem Listing 541. Dieses Makro wird in
einem Standardmodul erfasst.
Private Sub UserForm_Initialize()
Dim CONN As [Link]
Dim DBS As [Link]
Set CONN = New [Link]
With CONN
.Provider = "[Link].4.0"
.Open [Link] & "\[Link]"
End With
Set DBS = New [Link]
With DBS
.Open Source:="Kontakte", ActiveConnection:=CONN, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Do While Not .EOF
[Link] _
.Fields("Nachname").Value & ", " & .Fields("Vorname").Value
.MoveNext
Loop
.Close
End With
[Link]
[Link] = 0
Set DBS = Nothing
End Sub
Listing 540: Das Kombinationsfeld beim Aufruf der Userform fllen (Forts.)
Sandini Bib
682 Access und ...
ber den Einsatz der Methode Show starten Sie die Userform. Kurz darauf wird das Ereignis
Initialize ausgelst, welches im Hintergrund auf die Access-Datentabelle KONTAKTE
zugreift und das Kombinationsfeld fllt.
Was jetzt noch fehlt, ist das Makro fr die bernahme der Kontaktdaten. Dabei wird das
Makro aus Listing 542 hinter die Schaltflche OK/BERNEHMEN gelegt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul Modul1
'=====================================================
Sub DatenAbfrage()
[Link]
End Sub
Listing 541: Die Word-Userform starten
Abbildung 340: Alle Namen stehen im Kombinationsfeld zur Auswahl bereit.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub cmd_OK_Click()
Dim WordObj As Object
Dim CONN As [Link]
Dim DBS As [Link]
Dim strName As String
Dim strNachname As String
Listing 542: Kontaktdaten in Access-Tabelle finden und ins Dokument bertragen
Sandini Bib
Datenbankzugriff von Word durchfhren 683
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Dim strVorname As String
Dim strStrae As String
Dim strPLZ As String
Dim strOrt As String
Dim strMail As String
strName = [Link]
strName = "Nachname='" & Left(strName, InStr(strName, ",") - 1) & "'"
Set CONN = New [Link]
With CONN
.Provider = "[Link].4.0"
.Open [Link] & "\[Link]"
End With
Set DBS = New [Link]
With DBS
.Open Source:="Kontakte", ActiveConnection:=CONN, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
.Find Criteria:=strName, SearchDirection:=adSearchForward
If Not .EOF Then
strNachname = .Fields("Nachname").Value
strVorname = .Fields("Vorname").Value
strStrae = .Fields("Strae").Value
strPLZ = .Fields("PLZ").Value
strOrt = .Fields("Ort").Value
strMail = .Fields("Mail").Value
Else
MsgBox "Datensatz nicht gefunden"
End If
.Close
End With
[Link]
Set DBS = Nothing
On Error Resume Next
Set WordObj = GetObject(, "[Link].11")
With WordObj
.[Link] What:=wdGoToBookmark, Name:="Nachname"
.[Link] Text:=strNachname
.[Link] What:=wdGoToBookmark, Name:="Vorname"
.[Link] Text:=strVorname
.[Link] What:=wdGoToBookmark, Name:="Strae"
.[Link] Text:=strStrae
.[Link] What:=wdGoToBookmark, Name:="PLZ"
.[Link] Text:=strPLZ
.[Link] What:=wdGoToBookmark, Name:="ORT"
.[Link] Text:=strOrt
.[Link] What:=wdGoToBookmark, Name:="Mail"
.[Link] Text:=strMail
Listing 542: Kontaktdaten in Access-Tabelle finden und ins Dokument bertragen (Forts.)
Sandini Bib
684 Access und ...
Definieren Sie im ersten Schritt die Variablen, die Sie fr diesen Job brauchen. Dazu gehren
unter anderem die String-Variablen, um die Ergebnisse aus der Access-Tabelle zwischenzu-
speichern. Des Weiteren bentigen Sie Objekte, um die Anwendungen Access und Word zu
steuern und eine Objektvariable vom Typ Recordset, um die Access-Tabelle zu verarbeiten.
ffnen Sie danach die beteiligte Datenbank sowie die Tabelle Kontakte. Setzen Sie die
Methode Find ein und bergeben Sie ihr den Suchstring, den Sie sich in der Variablen
strName zusammengebastelt haben. War die Suche ber die Kundennummer erfolgreich,
dann meldet die Eigenschaft EOF den Wert False. Diese Eigenschaft wrde brigens den Wert
True melden, wenn die Suche erfolglos gewesen wre. Dann wird nmlich der letzte Satz in
der Tabelle erreicht. Weisen Sie nun den Variablen die gefundenen Werte zu und schlieen
Sie die Access-Tabelle gleich danach ber die Methode Close. Im selben Atemzug schlieen
Sie auch die Datenbank.
ber die Funktion GetObject stellen Sie einen Verweis zum geffnetem Dokument her und
speichern diesen Verweis unter der Objektvariablen WordObj. Sie haben jetzt Zugriff auf alle
Word-VBA-Befehle.
Setzen Sie die Methode GoTo ein, um zur angegebenen Textmarke zu springen. Dieser Befehl
funktioniert genauso, als wrden Sie die Taste (F5) drcken, um das Dialogfeld SUCHEN UND
ERSETZEN mit der Registerkarte GEHE ZU aufzurufen. Mithilfe der Methode GoTo knnen Sie
neben Textmarken unter anderem auch Kommentare, Tabellen, Seiten und Zeilen ansprin-
gen. Fgen Sie mit der Methode TypeText den Inhalt der Variablen unmittelbar nach den
Textmarken ins Dokument ein.
450 Excel bereits gestartet?
Im Zusammenspiel von Access und Excel knnen Sie sowohl Daten nach Excel exportieren
als auch von Excel empfangen. Gerade wenn Sie eine Access-Tabelle haben und Ihr Kunde
mglicherweise kein Access zur Verfgung hat, knnen Sie relativ leicht Ihre Access-Tabelle
in eine Excel-Datei umwandeln.
Zu Beginn der Access/Excel-Beispiele prfen Sie mithilfe der Funktion aus Listing 543, ob
Excel bereits gestartet ist. Dabei muss die Excel-Bibliothek unter EXTRAS/VERWEISE als Vor-
aussetzung eingebunden sein.
'.[Link]
End With
Set WordObj = Nothing
Unload me
End Sub
Listing 542: Kontaktdaten in Access-Tabelle finden und ins Dokument bertragen (Forts.)
Sandini Bib
Excel bereits gestartet? 685
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Verwenden Sie die GetObject-Funktion fr den Zugriff auf die Objektbibliothek von Excel
und weisen Sie das Objekt einer Objektvariablen zu. Verwenden Sie die Set-Anweisung, um
das von GetObject zurckgegebene Objekt der Objektvariablen zuzuweisen. Ist dieser Vor-
gang erfolgreich, dann meldet das Objekt Err den Wert 0. In diesem Fall ist Excel bereits
Abbildung 341: Die Daten wurden richtig bertragen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlExcel
'=====================================================
Function ExcelOffen() As Boolean
Dim ExcelApp As [Link]
On Error Resume Next
Set ExcelApp = GetObject(, "[Link]")
If [Link] = 0 Then
ExcelOffen = True
Else
ExcelOffen = False
End If
End Function
Listing 543: Funktion zur Prfung, ob Excel gestartet ist
Sandini Bib
686 Access und ...
gestartet. Als Rckgabewert geben Sie daher den Wahrheitswert True an das aufrufende
Makro aus Listing 544 zurck.
Im Makro aus Listing 544 wurde das Late-Binding durchgefhrt und die Objektvariable
ExApp deklariert. Meldet die Funktion ExcelOffen den Rckgabewert False, dann ist Excel
noch nicht geffnet. In diesem Fall wenden Sie die Funktion CreateObject an, um ein Excel-
Objekt zu erstellen. Danach haben Sie Zugriff auf alle Methoden und Eigenschaften des
Objekts. Geben Sie im Anschluss daran ber die Methode Add des Objekts Workbooks an, dass
Sie eine neue Arbeitsmappe einfgen wollen. Wenden Sie danach die Eigenschaft Visible an,
um die Applikation anzuzeigen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlExcel
'=====================================================
Sub StartExcel()
Dim ExApp As Object
If ExcelOffen = False Then
Set ExApp = CreateObject("[Link]")
[Link]
[Link] = True
Else
Set ExApp = GetObject(, "[Link]")
[Link] = True
End If
End Sub
Listing 544: Soll Excel gestartet werden oder nicht?
Abbildung 342: Excel wurde mit einer neuen Arbeitsmappe gestartet.
Sandini Bib
Access-Tabelle in eine Excel-Tabelle umwandeln 687
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
451 Access-Tabelle in eine Excel-Tabelle umwandeln
Im folgenden Beispiel aus Listing 545 wird die Access-Tabelle Artikel in eine Excel-Arbeits-
mappe [Link] umgewandelt. Alles was Sie dafr tun mssen, ist, die Methode OutputTo
einzusetzen und das gewnschte Format festlegen.
Sollte die Exportdatei [Link] noch nicht vorliegen, dann erstellt Access diese Datei selbst-
verstndlich automatisch fr Sie.
Die Alternative
Eine weitere Mglichkeit, um Daten von Access nach Excel zu transportieren, bietet die
Methode TransferSpreadsheet. Diese Methode hat folgende Syntax:
TransferSpreadsheet(Transfertyp, Dateiformat, Tabellenname, Dateiname,
BesitztFeldnamen, Bereich)
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlExcel
'=====================================================
Sub TabelleNachExcelTranferieren()
[Link] acOutputTable, "Artikel", acFormatXLS, _
"C:\Eigene Dateien\[Link]", True
End Sub
Listing 545: Access-Tabelle nach Excel transferieren
Abbildung 343: Der schnelle Export ber die Methode OutputTo
Sandini Bib
688 Access und ...
Im Argument Transfertyp geben Sie an, welchen Transfer Sie genau durchfhren mchten.
Sie haben dabei die Auswahl zwischen dem Export (acExport), dem Import (acImport) oder
einer Verknpfung (acLink).
Im Argument Dateiformat geben Sie an, in welcher Excel-Version (bzw. Lotus-Version) Sie
die Access-Tabelle exportieren mchten.
Im darauf folgenden Argument Tabellename geben Sie den Namen der zu exportierenden
Access-Tabelle an. ber das Argument Dateinamen geben Sie das Ziel fr den Datenexport
bekannt. Dabei muss die angegebene Datenquelle nicht einmal existieren. Access legt diese
neu fr Sie an.
Beim Argument BesitztFeldnamen verwenden Sie den Wert True, um die erste Zeile der Kal-
kulationstabelle beim Importieren, Exportieren oder Verknpfen zur Angabe der Feldnamen
zu verwenden. Geben Sie hingegen den Wert False an, wenn die erste Zeile als normale
Datenzeile gelten soll. Wenn Sie dieses Argument nicht angeben, wird der Standardwert
False verwendet.
452 Excel-Daten in eine Access-Tabelle transferieren
Mithilfe der gerade vorgestellten Lsung ber die Methode TransferSpreadsheet knnen Sie
auch Excel-Tabellen in eine Access-Datenbank importieren. Das Makro fr diese Aufgabe lautet:
bergeben Sie der Methode TransferSpreadsheet die Konstante acImport, um mitzuteilen,
dass Access einen Import vornehmen soll. Als zweite Konstante geben Sie die Excel-Version
an, in welcher die Tabelle vorliegt.
H
i
n
w
e
i
s
Das Argument Bereich gilt nur fr Importoperationen und darf beim Export nicht
angegeben werden. Beim Import werden standardmig immer alle Datenstze impor-
tiert, sofern dieses Argument nicht gesetzt wird (siehe Abbildung 344).
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlExcel
'=====================================================
Sub TabelleVonExcelImportieren()
[Link] acImport, acSpreadsheetTypeExcel11, _
"ArtikelAusExcel", "C:\Eigene Dateien\[Link]", True
End Sub
Listing 546: Eine Excel-Tabelle nach Access importieren
Sandini Bib
Excel-Daten in eine Access-Tabelle transferieren 689
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Dabei haben Sie folgende Mglichkeiten:
acSpreadsheetTypeExcel3 (Excel 3.0)
acSpreadsheetTypeExcel4 (Excel 4.0)
acSpreadsheetTypeExcel5 (Excel 5.0)
acSpreadsheetTypeExcel7 (Excel 95)
acSpreadsheetTypeExcel8 (Excel 97)
acSpreadsheetTypeExcel9 (Excel 2000)
acSpreadsheetTypeExcel10 (Excel 2002)
acSpreadsheetTypeExcel11 (Excel 2003)
Abbildung 344: Das Ergebnis der Methode TransferSpreadsheet
Sandini Bib
690 Access und ...
453 Access als Datenlieferant fr Excel
Im folgenden Beispiel erfolgen Zugriffe von Excel auf eine Access-Datenbank. Dabei werden
Daten sowohl importiert als auch exportiert.
Um den Zugriff von Excel auf Access zu realisieren, brauchen Sie eine zustzliche Objekt-
bibliothek, die Sie in der Entwicklungsumgebung einbinden mssen. Dabei wechseln Sie in die
Entwicklungsumgebung von Excel und whlen aus dem Men EXTRAS den Befehl VERWEISE.
Im Listenfeld VERFGBARE VERWEISE aktivieren Sie die Bibliothek MICROSOFT ACTIVEX DATA
OBJECTS 2.7 und besttigen mit OK. Damit haben Sie Zugriff auf die Datenzugriffsmethode
ADO (ACTIVEX DATA OBJECT). Unter anderem zeichnet sich diese Methode durch eine sehr
hohe Geschwindigkeit, eine benutzerfreundliche Bedienung sowie einen geringen Verbrauch
an Arbeitsspeicher und Festplattenspeicher aus. ber den Einsatz von ADO knnen Sie auf
Access-Tabellen zugreifen, um diese auszulesen bzw. neue Datenstze anzuhngen.
Zu Beginn wurde in Excel eine Userform fr die Datensuche erstellt, die Sie in Abbildung 347
sehen knnen (siehe Abbildung 346).
Diese Datenmaske enthlt vier Texteingabefelder, ber die sich die diversen Suchen durch-
fhren lassen. Mglich sind folgende Suchoptionen:
Die Eingabe des Stern-Symbols im Feld Name listet im Listenfeld alle Datenstze auf.
Suche nach dem Namen. Dabei wird lediglich das Feld Name ausgefllt.
Suche nach Name und Vorname. Beide Felder mssen hierzu ausgefllt werden.
Suche ber Namen und Wohnort. Hier erfolgt eine Eingabe von Suchbegriffen in den
Feldern Name und Wohnort.
Suche nach Beruf. Hier darf nur im Feld Beruf ein Suchbegriff eingegeben werden.
Abbildung 345: Die Excel-Tabelle wurde erfolgreich in Access importiert.
Sandini Bib
Access als Datenlieferant fr Excel 691
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Suche nach Beruf und Wohnort. Suchen Sie beispielsweise einen Metzger in Hamburg,
fllen Sie dazu beide Felder aus.
Suche nach Wohnort: Hier werden alle Personen aus einer Stadt gesucht.
Im Listenfeld der Userform1 werden alle gefundenen Personen aufgelistet. Dabei wird das
Listenfeld von Beginn an mehrspaltig definiert und die Spaltenbreiten werden definiert.
Diese Aufgabe knnen Sie gleich beim ffnen der Userform durchfhren lassen. Dazu setzen
Sie das Userform-Ereignis Initialize ein, wie Sie es in Listing 547 sehen knnen.
Abbildung 346: Die komfortable Adressensuche ber Excel
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub UserForm_Initialize()
'Userform initialisieren
With UserForm1
.[Link] = 5
.[Link] = "80;80;60;70;70"
.[Link] = True
.[Link]
Listing 547: Einige Aufgaben bereits beim Starten der Userform ausfhren
Sandini Bib
692 Access und ...
ber die Eigenschaft ColumnCount geben Sie an, wie viele Spalten im Listenfeld angelegt wer-
den sollen. Mithilfe der Eigenschaft ColumnWidth knnen Sie die Spaltenbreiten festlegen.
Damit die Schaltflche SUCHEN beim Drcken der Taste (Enter) automatisch gedrckt wird,
setzen Sie die Eigenschaft Default dieser Schaltflche auf den Wert True.
Standardmig setzen Sie den Mauszeiger gleich beim Starten der Userform in das erste
Textfeld Name. ber ein Bezeichnungsfeld zeigen Sie spter an, wie viele Datenstze gefunden
werden konnten. Zu Beginn wird dieses Bezeichnungsfeld jedoch nicht angezeigt und somit
der Eigenschaft Visible der Wert False zugewiesen. Die Beschriftung des Bezeichnungsfelds
knnen Sie ber die Eigenschaft Caption vornehmen. Die Farbe des Textes geben Sie ber die
Eigenschaft ForeColor und die Funktion RGB an. Die Funktion RGB mischt sich die Farbe aus
den drei Komponenten Rot, Grn und Blau zusammen. Den Schriftschnitt FETT weisen Sie
ber die Eigenschaft Bold zu, die Sie auf True setzen.
Bevor Sie mit der eigentlichen Programmierung beginnen, werfen Sie einen Blick auf die
Struktur der Tabelle Adressen.
Die Suchfunktion
Die diversen Suchfunktionen liegen hinter der Schaltflche SUCHEN, die Sie brigens auch
ber die Tastenkombination (Alt) + (s) direkt ausfhren knnen. Hierfr ist die Eigenschaft
Accelerator verantwortlich. Diese Eigenschaft knnen Sie direkt im Eigenschaften-Fenster
der Entwicklungsumgebung einstellen, indem Sie die Schaltflche markieren und dann im
Eigenschaften-Fenster den Buchstaben eingeben, ber den Sie in Verbindung mit der Taste
(Alt) die Schaltflche per Shortcut ausfhren mchten. Danach wird der angegebene Buch-
stabe in der Schaltflchenbeschriftung automatisch unterstrichen.
Legen Sie jetzt den Code aus Listing 548 direkt hinter die Schaltflche SUCHEN.
.[Link] = False
.[Link] = ""
.[Link] = RGB(0, 0, 255)
.[Link] = True
End With
End Sub
Listing 547: Einige Aufgaben bereits beim Starten der Userform ausfhren (Forts.)
Sandini Bib
Access als Datenlieferant fr Excel 693
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Abbildung 347: Die Datenstruktur der Access-Tabelle Adressen
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub CommandButton1_Click()
'Daten in Access-Datenbank suchen und bergeben
Dim AccApp As Object
Dim conn As New [Link]
Dim DBS As [Link]
Dim strBegriff As String
Dim strBegriff2 As String
Dim intZ As Integer
Dim BSchalter As Boolean
intZ = 0
BSchalter = False
With UserForm1
'Listenfeld lschen
.[Link]
'Alle Datenstze
Listing 548: Die Suche in der Access-Tabelle durchfhren
Sandini Bib
694 Access und ...
If .[Link] = "*" Then
strBegriff = ""
strBegriff = "Name='" & strBegriff & "'"
BSchalter = True
GoTo weiter
End If
'Suche nach Beruf
If .[Link] <> "" And .[Link] = "" _
And .[Link] = "" And .[Link] = "" Then
strBegriff = [Link]
strBegriff = "Beruf='" & strBegriff & "'"
End If
'Suche nach Beruf und Stadt
If .[Link] <> "" And .[Link] = "" _
And .[Link] = "" And .[Link] <> "" Then
strBegriff = [Link]
strBegriff2 = [Link]
strBegriff = "Beruf='" & strBegriff & "' and Wohnort='" & strBegriff2 & "'"
End If
'Suche nach Stadt
If .[Link] = "" And .[Link] = "" _
And .[Link] = "" And .[Link] <> "" Then
strBegriff = [Link]
strBegriff = "Wohnort='" & strBegriff & "'"
End If
'Suche nach Name
If .[Link] <> "" And .[Link] = "" _
And .[Link] = "" And .[Link] = "" Then
strBegriff = [Link]
strBegriff = "Name='" & strBegriff & "'"
End If
'Suche nach Name und Vorname
If .[Link] <> "" And .[Link] <> "" _
And .[Link] = "" And .[Link] = "" Then
strBegriff = [Link]
strBegriff2 = [Link]
strBegriff = "Name='" & strBegriff & "' and Vorname='" & strBegriff2 & "'"
End If
'Suche nach Name und Wohnort
If .[Link] <> "" And .[Link] = "" _
And .[Link] <> "" And .[Link] = "" Then
strBegriff = [Link]
strBegriff2 = [Link]
strBegriff = "Name='" & strBegriff & "' and Wohnort='" & strBegriff2 & "'"
End If
Listing 548: Die Suche in der Access-Tabelle durchfhren (Forts.)
Sandini Bib
Access als Datenlieferant fr Excel 695
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
'Suche nach Beruf
If .[Link] <> "" And .[Link] = "" _
And .[Link] = "" And .[Link] = "" Then
MsgBox "Diese Suche ist nicht vorgesehen!": Exit Sub
End If
'Felder nicht ausgefllt
If .[Link] = "" And .[Link] = "" _
And .[Link] = "" And .[Link] = "" Then
MsgBox "Sie mssen die Suchkriterien noch angeben!", vbExclamation
.[Link]
Exit Sub
End If
End With
weiter:
Set AccApp = CreateObject("[Link]")
'[Link] = True
Set DBS = New [Link]
[Link] "Provider=[Link].4.0; " & _
"Data source=" & [Link] & "\[Link];"
'Tabelle ffnen und abfragen
If BSchalter = False Then
[Link] _
"Select * FROM Adressen where (" & strBegriff & ")", _
conn, adOpenKeyset, adLockOptimistic
Else
[Link] _
"Select * FROM Adressen", conn, adOpenKeyset, adLockOptimistic
End If
'Gefundene Stze in mehrspaltiges Listenfeld einfgen
With UserForm1
Do Until [Link]
.[Link] DBS!Name
.[Link](1, intZ) = DBS!Vorname
.[Link](2, intZ) = DBS!Geburtstag
.[Link](3, intZ) = DBS!Wohnort
.[Link](4, intZ) = DBS!Beruf
intZ = intZ + 1
[Link]
Loop
If .[Link] = 0 Then
.[Link] = "Keine Datenstze gefunden!"
Else
.[Link] = .[Link] & " Datenstze gefunden!"
End If
.[Link] = True
End With
Listing 548: Die Suche in der Access-Tabelle durchfhren (Forts.)
Sandini Bib
696 Access und ...
Deklarieren Sie im ersten Schritt einige Variablen sowie die Objektvariablen fr den Zugriff
auf die Access-Datentabelle ber ADO. Lschen Sie vor jeder neuen Suche das Listenfeld
ber die Methode Clear und setzen Sie die Zhlvariable intZ auf den Wert 0. ber diese Zhl-
variable werden Sie spter die einzelnen Spalten des mehrspaltigen Listenfelds ansprechen.
Des Weiteren setzen Sie die boolesche Variable BSchalter standardmig auf den Wert False.
Dieser Schalter wird lediglich dann auf den Wert True gesetzt, wenn Sie einen Stern in das
Feld Name eingeben und danach auf die Schaltflche SUCHEN klicken. In diesem Fall findet
keine Suche statt, sondern es werden alle Datenstze der Access-Datentabelle in das Listen-
feld eingelesen.
In den nachfolgenden Zeilen wird ermittelt, welche Suche berhaupt ausgefhrt werden soll.
Je nachdem, welche Felder Sie mit Suchkriterien ausgefllt haben, wird entweder ein Suchbe-
griff bzw. ein Suchbegriff aus zwei einzelnen Feldern zusammengesetzt und spter dann an
die SELECT-Anweisung bergeben. Innerhalb dieses zusammengesetzten Suchbegriffs muss
der Feldname des jeweiligen Access-Datentabellenfelds mit angegeben werden.
Mithilfe der Funktion CreateObject wird ein neues Access-Objekt erstellt. Die Zeile
[Link] = True ist im Listing als Kommentar hinterlegt worden. Wenn Sie diese Zeile
aktivieren, dann knnen Sie erkennen, dass wirklich ein Access-Objekt erstellt wird, d.h.,
Microsoft Access wird dabei geffnet und ist im Zustand sichtbar (Visible=true). Stan-
dardmig bleibt Microsoft Access aber im Hintergrund (Visible=False), was bedeutet, dass
der Anwender von dem Zugriff auf die Access-Datentabelle nichts mitbekommt.
ber die Methode Open ffnen Sie die Datenbank [Link]. Gleichzeitig fhren Sie eine
SQL-Abfrage durch, der Sie den vorher zusammengesetzten Suchbegriff bergeben. Fr den
Fall, dass Sie vorher einen Stern in das Feld Name eingegeben haben, gengt es, den SELECT-
Befehl ohne weitere Argumente einzusetzen.
Alle gefundenen Adressen werden jetzt im RecordSet-Objekt DBS zur Verfgung gestellt und
knnen dort direkt abgefragt werden. bertragen werden diese Informationen in das Listen-
feld mithilfe der Methode AddItem. ber die Eigenschaft Column knnen Sie jede einzelne
Spalte des mehrspaltigen Listenfelds fllen. Mithilfe der Methode MoveNext wird jeweils das
nchste gefundene Element im RecordSet eingestellt. So werden alle Elemente nach und nach
ins Listenfeld bertragen, bis die Bedingung EOF (End of File) zutrifft. Konnten keine
Datenstze ber die Suche ermittelt werden, dann bleibt das Listenfeld leer. In diesem Fall
liefert die Eigenschaft ListCount den Wert 0, was eine Beschriftung des Bezeichnungsfelds
Keine Datenstze gefunden nach sich zieht. Im anderen Fall wird ber dieses noch ausge-
blendete Bezeichnungsfeld die Anzahl der gefundenen Datenstze bekannt gegeben. Danach
blenden Sie das Bezeichnungsfeld ber die Eigenschaft Visible ein, indem Sie dieser Eigen-
schaft den Wert True zuweisen.
[Link]
[Link]
Set DBS = Nothing
Set conn = Nothing
End Sub
Listing 548: Die Suche in der Access-Tabelle durchfhren (Forts.)
Sandini Bib
Access als Datenlieferant fr Excel 697
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Schlieen Sie im Anschluss daran die Access-Datentabelle ber die Methode Close. Beenden
Sie die Access-Anwendung, indem Sie die Methode Quit einsetzen, und heben Sie die Objekt-
verweise ber das Schlsselwort Nothing auf, um reservierten Arbeitsspeicher wieder freizu-
geben (siehe Abbildung 348).
Der Klick aufs Listenfeld
Wenn Sie auf einen der gefundenen Datenstze im Listenfeld klicken, dann sollen diese
Daten automatisch in die oberen Textfelder bernommen werden (siehe Abbildung 350).
Dazu knnen Sie die Eintrge direkt aus dem mehrspaltigen Listenfeld der Userform neh-
men und in die Textfelder bertragen.
Abbildung 348: Die gefundenen Stze werden im Listenfeld angezeigt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub ListBox1_Click()
'Daten aus Listenfeld in Textfelder bertragen
Dim intEintrag As Integer
Listing 549: Die Ergebnisse aus dem Listenfeld in die Textfelder bertragen
Sandini Bib
698 Access und ...
Mit jedem Klick auf das Listenfeld wird automatisch das Ereignis Click ausgelst. Diesem
Ereignis wurden in Listing 549 weitere Befehle zugewiesen, die dann beim Ereigniseintritt
mit ausgefhrt werden. ber die Eigenschaft ListIndex knnen Sie feststellen, welcher Ein-
trag im Listenfeld gerade angeklickt wurde. Dabei liefert der erste Eintrag im Listenfeld den
Index 0! Mithilfe der Eigenschaft Column greifen Sie direkt auf die einzelnen Spalten zu und
bertragen die Inhalte ber die Eigenschaft Value in die dazugehrigen Textfelder.
With UserForm1
intEintrag = .[Link]
.[Link] = .[Link](0, intEintrag)
.[Link] = .[Link](1, intEintrag)
.[Link] = .[Link](4, intEintrag)
.[Link] = .[Link](3, intEintrag)
.[Link] = .[Link](2, intEintrag)
End With
End Sub
Abbildung 349: Infos mit einem Klick bertragen
Listing 549: Die Ergebnisse aus dem Listenfeld in die Textfelder bertragen (Forts.)
Sandini Bib
Access als Datenlieferant fr Excel 699
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Der Optik zuliebe
Beim Verlassen bzw. beim Aktivieren eines Textfelds werden die beteiligten Textfelder dyna-
misch formatiert. So bekommt ein Textfeld beim Aktivieren eine rote Hintergrundfarbe, die
Schriftfarbe wird auf WEISS gesetzt und das Feld wird optisch hervorgehoben. Dazu schrei-
ben Sie zwei Makros, die Sie dem Listing 550 entnehmen knnen.
ber die Eigenschaft BackColor lsst sich der Hintergrund eines Textfelds ansprechen. Mit-
hilfe der Funktion RGB knnen Sie die gewnschte Farbe zusammenmischen. Die Farbe Rot
hat dabei das Rot-Grn-Blau-Verhltnis RGB(255, 0, 0). Da standardmig die schwarze
Schriftfarbe eingesetzt wird, die auf rotem Grund etwas schwer zu lesen ist, passen Sie die
Schriftfarbe auf Wei an, indem Sie dem Textfeld die Farbenmischung RGB(255, 255, 255)
zuweisen. Zustzlich geben Sie den Text des Felds im Schriftschnitt Fett aus, indem Sie der
Eigenschaft Bold den Wert True zuweisen. Um einen rumlichen Effekt zu erhalten, weisen
Sie der Eigenschaft SpecialEffect die Konstante fmSpecialEffectRaised zu.
Beim Verlassen eines Textfelds mssen diese Einstellungen wieder zurckgesetzt werden. Die
beiden Makros aus Listing 550 mssen jetzt den Textfeldereignissen (Enter = beim Aktivieren
bzw. Exit = beim Verlassen) zugewiesen werden. Exemplarisch sehen Sie diese Zuweisung in
Listing 551 fr die beiden ersten Textfelder.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Sub FeldAktiv()
With UserForm1
.[Link] = RGB(255, 0, 0)
.[Link] = RGB(255, 255, 255)
.[Link] = True
.[Link] = fmSpecialEffectRaised
End With
End Sub
Sub FeldDeaktiv()
With UserForm1
.[Link] = RGB(255, 255, 255)
.[Link] = RGB(0, 0, 0)
.[Link] = False
.[Link] = fmSpecialEffectSunken
End With
End Sub
Listing 550: Felder optisch hervorheben
Sandini Bib
700 Access und ...
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub TextBox1_Enter()
FeldAktiv
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As [Link])
FeldDeaktiv
End Sub
Private Sub TextBox2_Enter()
FeldAktiv
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As [Link])
FeldDeaktiv
End Sub
Listing 551: Den Eintritt und das Verlassen der Textfelder abfangen
Abbildung 350: Das jeweils aktive Feld wird optisch hervorgehoben.
Sandini Bib
Access als Datenlieferant fr Excel 701
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Textfelder leeren
Zustzlich wird die Userform mit einer weiteren Funktion bestckt. ber eine Schaltflche
soll es mglich sein, alle Textfelder sowie das Listenfeld von Eintrgen zu subern. Den Code
fr diese Aufgabe sehen Sie in Listing 552.
In einer Schleife arbeiten Sie alle einzelnen Steuerelemente der Userform ab. Innerhalb der
Schleife prfen Sie, ob es sich bei dem jeweiligen Element um ein Textfeld handelt. Bei dieser
Prfung verwenden Sie die Funktion TypeName, wobei Sie bei der Prfung auf die korrekte
Schreibweise von TextBox achten mssen. Diese Funktion unterscheidet zwischen Gro- und
Kleinschreibung.
Um das Listenfeld zurckzusetzen, mssen Sie nicht die einzelnen Eintrge lschen, sondern
Sie knnen ber die Methode Clear den kompletten Inhalt des Listenfelds lschen.
bernahme der Daten in das Excel-Formular
Wurden Daten aus Access gefunden und im Listenfeld eingelesen, dann knnen Sie die Daten
des markierten Datensatzes im Listenfeld in die Excel-Tabelle FORMULAR bertragen. Dazu
starten Sie das Makro aus Listing 553.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub CommandButton4_Click()
'Textfelder + Listenfeld leeren
Dim tb As Control
With UserForm1
For Each tb In .Controls
If TypeName(tb) = "TextBox" Then
[Link] = ""
End If
Next tb
.[Link]
.[Link] = ""
.[Link] = False
End With
End Sub
Listing 552: Textfelder leeren
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Listing 553: Daten aus der Userform in eine Excel-Tabelle bertragen
Sandini Bib
702 Access und ...
Da Sie die Daten in der Excel-Tabelle immer an derselben Position einfgen, knnen Sie den
markierten Listbox-Eintrag direkt in diese Zellen ber eine Zuweisung entleeren.
Der Datenexport aus Excel
Als nchste Aufgabe fhren Sie einen Datenexport aus Excel bzw. einen Datenimport in die
Access-Datentabelle durch. Dazu werden Daten ber die Userform2 eingegeben und per Klick
direkt in die im Hintergrund befindliche Access-Tabelle geschrieben. Dazu wird die User-
form aus Abbildung 352 eingesetzt und folgendes Makro aus Listing 554 ausgefhrt.
Private Sub CommandButton3_Click()
'bernahme der Daten in das Formular
Dim intEintrag As Integer
With UserForm1
If .[Link] = -1 Then
MsgBox "Bitte einen Eintrag im Listenfeld markieren!"
Else
intEintrag = .[Link]
Sheets("Formular").Range("C6").Value = .[Link](0, intEintrag)
Sheets("Formular").Range("C8").Value = .[Link](1, intEintrag)
Sheets("Formular").Range("C10").Value = .[Link](2, intEintrag)
Sheets("Formular").Range("C12").Value = .[Link](3, intEintrag)
Sheets("Formular").Range("C14").Value = .[Link](4, intEintrag)
End If
End With
End Sub
Abbildung 351: Die Userform fr die Datenerfassung
Listing 553: Daten aus der Userform in eine Excel-Tabelle bertragen (Forts.)
Sandini Bib
Access als Datenlieferant fr Excel 703
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Auch in diesem Beispiel muss zuerst ein Access-Objekt ber die Funktion CreateObject
erstellt werden. Ebenso mssen die Datenbank sowie die Datentabelle ber die Methode Open
geffnet werden. Mithilfe der Methode AddNew wird ein neuer, noch leerer Satz am Ende der
Access-Datentabelle angehngt. Dieser Satz wird danach gefllt. Dabei werden die Inhalte
der Textfelder direkt in die Datenbankfelder geschrieben. Erst durch dem Einsatz der
Methode Update wird der neue Satz endgltig angelegt. Zum Abschluss werden, wie bereits
zuvor beschrieben, die Datentabelle geschlossen, die Access-Applikation beendet sowie die
Objektverweise aufgehoben.
Beenden der Userform verhindern
Mchten Sie das Beenden der Userform lediglich ber die Schaltflche ABBRECHEN zulassen,
dann erfassen Sie folgendes Ereignis aus Listing 555:
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub CommandButton2_Click()
'Daten zurckschreiben
Dim AccApp As Object
Dim conn As New [Link]
Dim DBS As [Link]
Set AccApp = CreateObject("[Link]")
Set DBS = New [Link]
[Link] "Provider=[Link].4.0; " & _
"Data source=" & [Link] & "\[Link];"
[Link] "Adressen", conn, adOpenKeyset, adLockOptimistic
[Link]
With UserForm2
DBS!Name = .[Link]
DBS!Vorname = .[Link]
DBS!Wohnort = .[Link]
DBS!Beruf = .[Link]
DBS!Geburtstag = .[Link]
[Link]
[Link] = True
[Link] = "Satz erfasst!"
[Link]
End With
[Link]
Set DBS = Nothing
Set conn = Nothing
End Sub
Listing 554: Einen Datensatz ins Excel-Formular eingeben und per Klick in Access speichern
Sandini Bib
704 Access und ...
Setzen Sie das Argument Cancel auf den Wert True, um das Schlieen der Userform zu ver-
hindern.
Datenbankabfragen starten
Am Ende des Abschnitts sollen noch zwei Fragen beantwortet werden:
Wie kann ich die drei ltesten Personen ermitteln?
Wie kann ich den Namen des Juniors abfragen?
Die erste Frage beantwortet das Makro aus Listing 556.
Abbildung 352: Der Datensatz wurde erfolgreich in Access gespeichert.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Userform1
'=====================================================
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = True
End Sub
Listing 555: Das Beenden einer Userform ber das Kreuzsymbol unterbinden
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul Modul1
'=====================================================
Sub DieltestenFinden()
'Den ltesten finden
Dim AccApp As Object
Listing 556: Die drei ltesten Personen werden ermittelt.
Sandini Bib
Access als Datenlieferant fr Excel 705
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Dim conn As New [Link]
Dim DBS As [Link]
Dim intZ As Integer
Dim ArrPersonName(2) As Variant
Dim ArrPersonVorname(2) As Variant
Dim ArrDatum(2) As Variant
Set AccApp = CreateObject("[Link]")
Set DBS = New [Link]
[Link] "Provider=[Link].4.0; " & _
"Data source=" & [Link] & "\[Link];"
[Link] = adUseClient
[Link] "Adressen", conn, adOpenKeyset, adLockOptimistic
[Link] = "Geburtstag Asc"
For intZ = 0 To 2
ArrPersonName(intZ) = DBS!Name
ArrPersonVorname(intZ) = DBS!Vorname
ArrDatum(intZ) = DBS!Geburtstag
[Link]
Next intZ
MsgBox "Die lteste Person heit " & ArrPersonVorname(0) & " " & _
ArrPersonName(0) & " und ist am " & ArrDatum(0) & " geboren!" & vbLf & _
vbLf & "Die zweit-lteste Person heit " & ArrPersonVorname(1) & " " & _
ArrPersonName(1) & " und ist am " & ArrDatum(1) & " geboren!" & vbLf & _
vbLf & "Die dritt-lteste Person heit " & ArrPersonVorname(2) & " " & _
ArrPersonName(2) & " und ist am " & ArrDatum(2) & " geboren!", _
vbInformation, "Alters-Check"
[Link]
[Link]
Set DBS = Nothing
Set conn = Nothing
End Sub
Abbildung 353: Altersauswertung von Excel aus durchfhren
Listing 556: Die drei ltesten Personen werden ermittelt. (Forts.)
Sandini Bib
706 Access und ...
Beim ffnen der Datentabelle wird eine Sortierung eingestellt. Dabei werden im Makro aus
Listing 556 die ersten drei Datenstze bzw. im Makro aus Listing 557 der erste Datensatz
abgegriffen, in einem Datenfeld gespeichert und am Bildschirm ausgegeben.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul Modul1
'=====================================================
Sub JuniorCheck()
'Die jngste Person finden
Dim AccApp As Object
Dim conn As New [Link]
Dim DBS As [Link]
Dim StrPersonName As String
Dim StrPersonVorname As String
Dim DatPerson As Date
Set AccApp = CreateObject("[Link]")
Set DBS = New [Link]
[Link] "Provider=[Link].4.0; " & _
"Data source=" & [Link] & "\[Link];"
[Link] = adUseClient
[Link] "Adressen", conn, adOpenKeyset, adLockOptimistic
[Link] = "Geburtstag Desc"
StrPersonName = DBS!Name
StrPersonVorname = DBS!Vorname
DatPerson = DBS!Geburtstag
MsgBox "Die jngste Person heit " & StrPersonVorname & " " & _
StrPersonName & " und ist am " & DatPerson & " geboren!", _
vbInformation, "Junior-Check"
[Link]
[Link]
Set DBS = Nothing
Set conn = Nothing
End Sub
Listing 557: Die jngste Person ermitteln
Sandini Bib
Excel-Makro starten 707
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
454 Excel-Makro starten
Soll aus Access auf ein Excel-Makro zugegriffen werden, dann wenden Sie die Methode Run
wie im Listing 558 gezeigt an.
Setzen Sie die Methode Open ein, um die Excel-Arbeitsmappe zu ffnen, die das zu startende
Makro enthlt. Fhren Sie danach die Methode Run aus, der Sie den Namen des Makros
bekannt geben. Es kann dabei auch nicht schaden, genau anzugeben, wo sich das Makro in
der Entwicklungsumgebung befindet. Schlieen Sie nach dem Ablauf des Makros die Excel-
Arbeitsmappe ber die Methode Close und beenden Sie die Excel-Anwendung mithilfe der
Methode Quit. Heben Sie danach den Objektverweis Xl wieder auf, um den reservierten Spei-
cher wieder freizugeben.
455 Auf Excel-Funktionen zugreifen
Als Worksheet-Funktionen stehen in Excel einige Funktionen zur Verfgung, die in Access so
in dieser Form nicht verfgbar sind. In diesem Buch wurde bereits die Funktion Roman
(Rmisch) vorgestellt, die ber einen Zugriff von Access auf Excel eingesetzt werden konnte.
Im folgenden Beispiel wird exemplarisch die Funktion Rept (Wiederholen) eingesetzt, um eine
Zeichenfolge zu wiederholen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlExcel
'=====================================================
Sub ExcelMakroStarten()
Dim XL As Object
On Error GoTo fehler
Set XL = CreateObject("[Link]")
[Link] "D:\Eigene Dateien\[Link]"
[Link] "[Link]"
[Link]
[Link]
Set XL = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 558: Excel-Makro aus Access starten
Sandini Bib
708 Access und ...
ber die Funktion CreateObject wird ein Verweis auf die Excel-Bibliothek eingerichtet.
Danach stehen alle Methoden und Eigenschaften dieser Bibliothek zur Verfgung, unter
anderem auch die WorksheetFunction Rept, ber die eine Zeichenfolge beliebig wiederholt
werden kann.
456 Ist PowerPoint bereits gestartet?
Zwischen dem reinen Prsentationsprogramm PowerPoint und der Datenbank Access kn-
nen Daten ausgetauscht werden. Sogar eine Steuerung von PowerPoint direkt aus Access
heraus ist mglich.
Auch bei der Anwendung PowerPoint im Zusammenspiel mit Access wird zuerst einmal
geprft, ob PowerPoint berhaupt gestartet ist. Diese Aufgabe erledigt die Funktion aus
Listing 560. Dabei muss die PowerPoint-Bibliothek unter EXTRAS/VERWEISE als Vorausset-
zung eingebunden sein.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlExcel
'=====================================================
Sub ExcelFunktionAbfreifen()
Dim XL As Object
On Error GoTo fehler
Set XL = CreateObject("[Link]")
MsgBox [Link]("*-*", 10)
[Link]
Set XL = Nothing
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 559: Auf Excel-Funktionalitt zugreifen
Abbildung 354: Eine Zeichenfolge wird wiederholt.
Sandini Bib
Ist PowerPoint bereits gestartet? 709
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Verwenden Sie die GetObject-Funktion fr den Zugriff auf die Objektbibliothek von Power-
Point, und weisen Sie das Objekt einer Objektvariablen zu. Verwenden Sie die Set-Anwei-
sung, um das von GetObject zurckgegebene Objekt der Objektvariablen zuzuweisen. Ist
dieser Vorgang erfolgreich, dann meldet das Objekt Err den Wert 0. In diesem Fall ist Power-
Point bereits gestartet. Als Rckgabewert geben Sie daher den Wahrheitswert True an das auf-
rufende Makro aus Listing 561 zurck.
Im Makro aus Listing 561 wurde das Late-Binding durchgefhrt und die Objektvariable
PowerpointApp deklariert. Meldet die Funktion PowerpointOffen den Rckgabewert False, dann
ist PowerPoint noch nicht geffnet. In diesem Fall wenden Sie die Funktion CreateObject an,
um ein PowerPoint-Objekt zu erstellen. Danach haben Sie Zugriff auf alle Methoden und
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlPP
'=====================================================
Function PowerpointOffen() As Boolean
Dim PowerpointApp As [Link]
On Error Resume Next
Set PowerpointApp = GetObject(, "[Link]")
If [Link] = 0 Then
PowerpointOffen = True
Else
PowerpointOffen = False
End If
End Function
Listing 560: Funktion, die prft, ob PowerPoint geffnet ist
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlPP
'=====================================================
Sub StartPowerpoint()
Dim PowerpointApp As Object
If PowerpointOffen = False Then
Set PowerpointApp = CreateObject("[Link]")
[Link]
[Link] = True
End If
End Sub
Listing 561: PowerPoint wird je nach Status gestartet oder nicht.
Sandini Bib
710 Access und ...
Eigenschaften des Objekts. Geben Sie im Anschluss daran ber die Methode Add des Objekts
Presentations an, dass Sie eine neue Prsentation einfgen. Wenden Sie die Eigenschaft
Visible an, um die Applikation anzuzeigen.
457 PowerPoint-Dateien suchen und ffnen
Fr das folgende Beispiel wird zuerst die Objektbibliothek MICROSOFT POWERPOINT in der
Entwicklungsumgebung eingebunden. Danach wird ein neues Formular in Access eingefgt
und mit einem Listenfeld sowie einer Schaltflche wie in Abbildung 356 integriert.
Beim ffnen des Formulars sollen alle in einem bestimmten Verzeichnis gefundenen Power-
Point-Prsentationen im Listenfeld angezeigt werden. Fr diese Aufgabe stellen Sie das Ereig-
nis Form_Load aus Listing 562 ein, das automatisch ausgefhrt wird, wenn das Formular
geffnet wird.
Abbildung 355: Das Formular zum Anzeigen von PowerPoint-Dateien
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Form_Powerpoint
'=====================================================
Private Sub Form_Load()
Dim VarPP As Variant
On Error GoTo fehler
With [Link]
.NewSearch
Listing 562: PowerPoint-Prsentationen suchen
Sandini Bib
PowerPoint-Dateien suchen und ffnen 711
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Fhren Sie eine Suche ber das Objekt FileSearch durch und ermitteln Sie dabei alle
PowerPoint-Prsentationen eines Verzeichnisses, welches Sie ber die Eigenschaft LookIn
angeben. Fr die nhere Spezifikation, welche Dateien gesucht werden sollen, haben Sie
zwei Mglichkeiten. Entweder Sie setzen die Eigenschaft FileType ein und bergeben der
Eigenschaft die Konstante msoFileTypePowerPointPresentations oder Sie verwenden die
Eigenschaft FileName und bergeben dieser Eigenschaft den Suchtext *.ppt. Mithilfe der
Eigenschaft SearchSubFolders knnen Sie bestimmen, ob auch noch weitere Verzeichnisse,
die in der Hierarchie unterhalb des bei der Eigenschaft LookIn angegebenen Verzeichnisses
liegen, durchsucht werden sollen. Im Beispiel aus Listing 562 wird dies zugelassen.
ber die Methode Execute wird die eigentliche Suche gestartet. Dabei wird die Verarbeitung
im Makro nur fortgesetzt, wenn berhaupt etwas gefunden wird. Nach einer erfolgreichen
Suche stehen die Namen aller gefundenen Dateien im Objekt FoundFiles, das Sie nun in einer
For each Next-Schleife auslesen knnen. Innerhalb der Schleife wenden Sie die Methode
AddItem an, um das Listenfeld zu fllen.
Wenn eine PowerPoint-Prsentation im Listenfeld ausgewhlt und die Schaltflche FFNEN
PRSENTATION angeklickt wird, dann wird das Makro aus Listing 563 gestartet.
.LookIn = "c:\Eigene Dateien\"
.FileType = msoFileTypePowerPointPresentations
'.FileName = "*.ppt"
.SearchSubFolders = True
If .Execute() > 0 Then
For Each VarPP In .FoundFiles
[Link] VarPP
Next VarPP
End If
End With
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Klasse Form_Powerpoint
'=====================================================
Private Sub Befehl2_Click()
'PowerPoint-Prsentation ffnen
Dim PPapp As New [Link]
Listing 563: PowerPoint-Applikation erstellen und Prsentation ffnen
Listing 562: PowerPoint-Prsentationen suchen (Forts.)
Sandini Bib
712 Access und ...
Erstellen Sie zunchst ein neues PowerPoint-Objekt ber die Deklaration Dim PPapp as New
[Link]. Danach haben Sie automatisch Zugriff auf alle Methoden und
Eigenschaften, die dieses Objekt standardmig anbietet. Weisen Sie der Eigenschaft Visible
den Wert True zu, um die Anwendung anzuzeigen. Was noch brig bleibt, ist, die Methode
Open einzusetzen, um die im Listenfeld ausgewhlte Prsentation zu ffnen.
458 Textdateien speichern
In Access haben Sie standardmig die Mglichkeit, Tabellen als Textdateien zu speichern.
Dazu ffnen Sie die Tabelle, rufen im Men DATEI den Befehl EXPORTIEREN auf, whlen aus
dem Drop-down-Feld DATEITYP den Eintrag TEXTDATEIEN, vergeben einen passenden Datei-
namen und besttigen mit OK. Ebenso knnen Sie Textdateien in Access einlesen. Dazu
rufen Sie im Men DATEI den Befehl EXTERNE DATEN/IMPORTIEREN auf, stellen im Drop-
down-Feld DATEITYP den Eintrag TEXTDATEIEN ein, whlen die gewnschte Textdatei aus
und besttigen mit IMPORTIEREN. Selbstverstndlich knnen Sie beide Aktionen auch per
Makro durchfhren.
Den Vorgang des Speicherns einer Textdatei knnen Sie selbstverstndlich auch ber ein
Makro automatisieren. So speichern Sie im folgenden Beispiel die Tabelle Artikel in eine
Textdatei. Als Trennzeichen verwenden Sie dabei das Semikolon.
Beim Datentransfer aus Listing 564 sollen nur die Datenfelder Artikelname, Liefereinheit,
Mindestbestand, Lagerbestand und Bestellte Einheiten in die Textdatei bertragen werden.
Sie brauchen beim folgenden Makro aus Listing 564 die Tabelle Artikel vorher nicht zu ff-
nen. Das ffnen, Verarbeiten und Transferieren der Daten in die Textdatei wird automatisch
vorgenommen.
[Link] = True
[Link] [Link]
End Sub
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlTXT
'=====================================================
Sub TabelleAlsTextdateiSpeichern()
Dim DBS As New [Link]
Dim strZeile As String
Dim intz As Integer
On Error GoTo fehler
[Link] "Artikel", [Link]
Listing 564: Eine Tabelle in eine Textdatei schreiben Variante 1
Listing 563: PowerPoint-Applikation erstellen und Prsentation ffnen (Forts.)
Sandini Bib
Textdateien speichern 713
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Definieren Sie im ersten Schritt ein ADO-Objekt vom Typ Recordset. Damit haben Sie
Zugriff auf alle Tabellen in Access. Definieren Sie danach eine String-Variable, um spter die
einzelnen Datenfelder in dieser Variablen zwischenzuspeichern. In der folgenden Variablen
intz sollen die bertragenen Datenstze gezhlt und spter ausgegeben werden. ffnen Sie
daraufhin mithilfe der Methode Open die Tabelle Artikel in der aktuell geffneten Daten-
bank. Mit der Anweisung [Link] fangen Sie den Namen der aktuellen
Datenbank ein.
ffnen Sie dann ber die Methode Open die Textdatei, in welche die Daten hinein transferiert
werden sollen. Dabei muss diese Textdatei keineswegs schon angelegt sein. Der Befehl Open
erstellt diese neu, sofern sie noch nicht existiert. Die Syntax dieser Methode lautet:
Open Pfadname For Modus [Access-Zugriff] [Sperre] As [#]Dateinummer [Len=Satzlnge]
Im Argument Pfadname geben Sie das Laufwerk sowie den Dateinamen der Textdatei an, die
Sie ffnen mchten.
Das Argument Modus legt den Zugriffsmodus fr die Datei fest. Mglich sind die Modi
Append, Binary, Input, Output oder Random. Wenn kein Modus festgelegt ist, wird die Datei im
Zugriffsmodus Random geffnet. Im Beispiel aus Listing 564 wurde die Textdatei im Zugriffs-
modus Output geffnet, was darauf schlieen lsst, dass Sie Stze in diese Textdatei transferie-
ren mchten. Wrden Sie die Textdatei mit dem Zugriffsmodus Append ffnen, wrde das
Makro bei mehrmaligem Start hintereinander die Daten immer unten an die Textdatei
anhngen, was zur Folge htte, dass die Datenstze mehrfach vorliegen wrden.
Open "C:\Eigene Dateien\[Link]" For Output As #1
intz = 0
Do Until [Link]
strZeile = strZeile & DBS!Artikelname & ";" & _
DBS!Liefereinheit & ";" & DBS!Einzelpreis & ";" & _
DBS!Mindestbestand & ";" & DBS!Lagerbestand & ";" & _
DBS!BestellteEinheiten
[Link]
Print #1, strZeile
intz = intz + 1
strZeile = ""
Loop
Close #1
MsgBox "Transfer beendet! Es wurden " & intz _
& " Stze bertragen!"
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 564: Eine Tabelle in eine Textdatei schreiben Variante 1 (Forts.)
Sandini Bib
714 Access und ...
Das nchste optionale Argument Access-Zugriff bestimmt die Operation, die mit der geff-
neten Datei ausgefhrt werden soll. Dabei whlen Sie entweder Read, wenn Sie die Textdatei
nur lesen, oder Write, wenn Sie etwas in die Textdatei schreiben mchten. Mchten Sie beide
Aktionen durchfhren, dann setzen Sie die Konstante Read Write ein.
Beim optionalen Argument Sperre knnen Sie bestimmen, welche Operationen mit der
geffneten Datei von anderen Anwendungen durchgefhrt werden drfen oder nicht. Dabei
knnen Sie bestimmte Zugriffe wie das Lesen und Schreiben zulassen oder verwehren. Zur
Auswahl stehen Shared, Lock Read, Lock Write und Lock Read Write.
Mithilfe des Arguments Dateinummer vergeben Sie eine gltige Dateinummer im Bereich von
1 bis 511. Dabei haben Sie die Mglichkeit, bei den Modi Binary, Input und Random eine Datei
mit einer anderen Dateinummer zu ffnen, ohne sie zuvor schlieen zu mssen. In den Modi
Append und Output mssen Sie eine Datei erst schlieen, bevor sie mit einer anderen Datei-
nummer geffnet werden kann. Wenn Sie dennoch versuchen, in eine bereits so geffnete
Textdatei zu schreiben, werden Sie daran gehindert und Sie erhalten eine Fehlermeldung.
Im letzten optionalen Argument Satzlnge knnen Sie der Textdatei noch eine Satzlnge vor-
geben. Dabei handelt es sich um eine Zahl, die kleiner oder gleich 32.767 (Byte) ist. Bei
Dateien mit wahlfreiem Zugriff ist dies die Datensatzlnge, bei sequenziellen Dateien die
Anzahl der gepufferten Zeichen.
Haben Sie nun sowohl die Tabelle als auch die Textdatei geffnet, setzen Sie die Zhlvariable
intz auf den Wert 0. Danach setzen Sie eine Schleife auf, die so lange durchlaufen wird, bis
der letzte Datensatz in der Tabelle erreicht ist. Diese automatische berprfung nimmt die
Eigenschaft EOF (End Of File) vor. Sie drfen allerdings nicht vergessen, den Datenzeiger mit-
hilfe der Methode MoveNext jeweils einen Satz weiter zu setzen, sobald Sie einen Satz bertra-
gen haben. Sie erzeugen ansonsten eine Endlosschleife. Ebenfalls innerhalb der Schleife
basteln Sie sich Ihre Variable strZeile zusammen, die die einzelnen Datenfelder aus der
Tabelle Artikel aufnimmt. Vergessen Sie dabei nicht, nach jeder Feldinformation das Trenn-
zeichen (;) einzusetzen.
Mithilfe der Anweisung Print drucken Sie den auf diese Weise zusammengebastelten augen-
blicklichen Inhalt der Variablen strZeile direkt in die geffnete Textdatei. Dabei mssen Sie
dieselbe Dateinummer verwenden, wie sie schon beim ffnen der Textdatei zum Einsatz kam.
Nur so wird gewhrleistet, dass der Ausdruck auch in die gewnschte Textdatei kommt.
459 Weitere Methoden zum Speichern von Textdateien
Mithilfe der Methode TransferText knnen Sie genau diese Aufgabe ebenso gut ausfhren.
Der Unterschied zur gerade vorgestellten Lsung besteht darin, dass Sie mit dieser Methode
die komplette Tabelle als Textdatei speichern mssen. Sie haben dabei keine Mglichkeit,
einzelne Felder zu ignorieren.
Sandini Bib
Weitere Methoden zum Speichern von Textdateien 715
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mithilfe der Methode TransferText knnen Sie sowohl Daten in Textdateien exportieren als
auch Daten aus Textdateien in Access-Tabellen einlesen.
Eine weitere Mglichkeit, um Access-Tabellen in Textdateien zu speichern, bietet das DoCmd-
Objekt. So speichert das Makro aus Listing 566 die Tabelle Artikel im Verzeichnis C:\Eigene
Dateien unter dem Namen [Link].
Abbildung 356: Die CSV-Textdatei wurde aus der Tabelle Artikel erzeugt.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlTXT
'=====================================================
Sub TabelleAlsTextdateiSpeichernSchnell()
[Link] acExportDelim, , "Artikel", "C:\Eigene Dateien\[Link]"
End Sub
Listing 565: Eine Tabelle in eine Textdatei schreiben Variante 2
Sandini Bib
716 Access und ...
Mit der Methode OutputTo knnen Sie die Daten in einem bestimmten Microsoft Access-
Datenbankobjekt (Datenblatt, Formular, Bericht, Modul oder Datenzugriffsseite) in ver-
schiedenen Formaten ausgeben.
460 Codes sichern
Die Methode OutputTo bietet Ihnen die Mglichkeit, Ihre Programmierung zu sichern. Das
Makro aus Listing 567 sichert das Modul MODUL1 in der Textdatei [Link] im Verzeichnis
C:\Eigene Dateien.
Abbildung 357: Textdatei aus Tabelle erstellen
Sub TabelleTransferieren()
[Link] acOutputTable, "Artikel", acFormatTXT, _
"C:\Eigene Dateien\[Link]", True
End Sub
Listing 566: Eine Tabelle in eine Textdatei schreiben Variante 3
Sandini Bib
Codes sichern 717
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Indem Sie die Konstante acOutputModule verwenden, erkennt Access, dass es dabei aus der
Entwicklungsumgebung das MODUL1 exportieren soll. Mit der Konstante acFormatTXT legen
Sie fest, dass dieser Transfer im Textformat erfolgen soll.
Haben Sie mehrere Module in Ihrer Datenbank untergebracht und mchten Sie diese alle
sichern, dann setzen Sie das Makro Listing 568 ein.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlTXT
'=====================================================
Sub ModulTransferieren()
[Link] acOutputModule, "Modul1", _
acFormatTXT, "C:\Eigene Dateien\[Link]", True
End Sub
Listing 567: Codes in einer Textdatei speichern
Abbildung 358: Makros wurden in eine Textdatei gesichert.
Sandini Bib
718 Access und ...
Im Auflistungsobjekt AllModules sind alle Module der Datenbank verzeichnet. Sie knnen
damit ganz elegant ein Modul nach dem anderen mithilfe einer Schleife ansprechen. Inner-
halb der Schleife wenden Sie die Methode OutputTo an, um die einzelnen Module zu sichern.
Dabei geben Sie den einzelnen Textdateien einen fortlaufenden Namen, der sich aus dem
Text Code und der Zhlvariablen intz zusammensetzt.
461 Textdatei importieren
Fr den Import von Textdateien haben Sie in Access die Mglichkeit, eine eigene Importspe-
zifikation zu erstellen und auf Basis dieser Spezifikation Textdateien einzulesen. Wie das
genau funktioniert, knnen Sie in Kapitel 3 dieses Buchs nachlesen.
Eine alternative Mglichkeit ist, die Textdatei selbst ber ein Makro einzulesen. Im folgenden
Beispiel aus Listing 569 werden aus der Textdatei [Link] die Informationen Artikelname,
Liefereinheit und Einzelpreis in die Tabelle Artikel2 eingelesen.
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlTXT
'=====================================================
Sub AlleModuleSpeichern()
Dim obj As AccessObject
Dim dbs As Object
Dim intz As Integer
intz = 0
Set dbs = [Link]
For Each obj In [Link]
intz = intz + 1
[Link] acOutputModule, [Link], _
acFormatTXT, "C:\Eigene Dateien\Code" & intz & ".txt"
Next obj
End Sub
Listing 568: Alle Makros in mehreren Textdateien speichern
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlTXT
'=====================================================
Sub TextdateiInTabelleEinlesen()
Dim dbs As New [Link]
Dim strZeile As String
Dim intPos1 As Integer
Listing 569: Teile einer Textdatei einlesen Variante 1
Sandini Bib
Textdatei importieren 719
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
ffnen Sie zuerst die Access-Tabelle Artikel2 ber die Methode Open. Damit die Tabelle edi-
tiert werden kann, verwenden Sie die Konstante adLockOptimistic. ffnen Sie danach eben-
falls ber die Methode Open die Textdatei. Da Sie diese Datei lesen mchten, verwenden Sie
dabei das Argument For Input.
In einer Schleife arbeiten Sie alle Datenstze der Textdatei ab. ber den Einsatz der Methode
AddNew fgen Sie einen neuen, noch leeren Datensatz in die Tabelle ein, den Sie direkt im
Anschluss mit dem Inhalt aus der Textdatei fllen. Dabei arbeiten Sie sich Position fr Posi-
tion vor. Zu Beginn steht in der Variablen StrZeile noch der komplette Datensatz aus der
Textdatei, den Sie ber die Anweisung Line Input fllen. Danach springen Sie von Semikolon
zu Semikolon, wobei Sie den String jeweils krzen.
Haben Sie die Datenfelder gefllt, dann setzen Sie die Methode Update ein, um den Datensatz
zu sichern. Schlieen Sie am Ende des Makros die Datentabelle sowie die Textdatei ber die
Methode Close.
On Error GoTo fehler
[Link] "Artikel2", [Link], , adLockOptimistic
Open "C:\Eigene Dateien\[Link]" For Input As #1
Do While Not EOF(1)
[Link]
Line Input #1, strZeile
dbs!Artikelname = Left(strZeile, InStr(strZeile, ";") - 1)
intPos1 = InStr(strZeile, ";") + 1
strZeile = Mid(strZeile, intPos1, Len(strZeile) - InStr(strZeile, ";"))
dbs!Liefereinheit = Left(strZeile, InStr(strZeile, ";") - 1)
intPos1 = InStr(strZeile, ";") + 1
strZeile = Mid(strZeile, intPos1, Len(strZeile) - InStr(strZeile, ";"))
dbs!Einzelpreis = Left(strZeile, InStr(strZeile, ";") - 1)
[Link]
Loop
Close #1
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 569: Teile einer Textdatei einlesen Variante 1 (Forts.)
Sandini Bib
720 Access und ...
Abbildung 359: Die Daten wurden erfolgreich eingelesen.
H
i
n
w
e
i
s
Wenn Sie sich das Makro aus Listing 569 noch einmal ansehen, dann sehen Sie, dass
einige Zeilen darin redundant sind. Wie kann dieses Makro umgeschrieben werden,
damit es krzer und schneller abgearbeitet werden kann?
Nun, das stckweise Verkrzen der String-Variablen StrZeile kann in eine Schleife
gepackt werden. Dadurch mssen die Datenbankfelder variabel angesprochen werden,
wie es im Listing 570 gemacht wird.
Sandini Bib
Textdatei importieren 721
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
'=====================================================
' Auf CD Buchdaten\Beispiele\Kap10
' Dateiname [Link]
' Modul mdlTXT
'=====================================================
Sub TextdateiInTabelleEinlesenSchneller()
Dim dbs As New [Link]
Dim strZeile As String
Dim intz As Integer
Dim intPos1 As Integer
On Error GoTo fehler
[Link] "Artikel3", [Link], , adLockOptimistic
Open "C:\Eigene Dateien\[Link]" For Input As #1
Do While Not EOF(1)
Line Input #1, strZeile
[Link]
For intz = 1 To 3
[Link](intz) = Left(strZeile, InStr(strZeile, ";") 1)
intPos1 = InStr(strZeile, ";") + 1
strZeile = Mid(strZeile, intPos1, Len(strZeile) InStr(strZeile, ";"))
Next intz
[Link]
Loop
Close #1
[Link]
Exit Sub
fehler:
MsgBox [Link] & " " & [Link]
End Sub
Listing 570: Teile einer Textdatei einlesen Variante 2
ber die Zhlvariable intz knnen Sie in einer Schleife die Datenbankfelder Artikelname
(erstes Feld) bis Einzelpreis (drittes Feld) ansprechen. Das erste Datenfeld der Tabelle
(Artikel-Nr) wird durch den Index selbst geschrieben. Da die Funktion Instr immer nur
das erste Semikolon im String finden wrde, wird der String bei jedem Schleifendurch-
lauf gekrzt, indem die bereits bertragenen Informationen aus dem String entfernt
werden. Sie arbeiten sich dabei also von links nach rechts in der Variablen strZeile vor.
Sandini Bib
Sandini Bib
Referenz
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
VBA-Funktionen
Datums- und Zeitfunktionen
Funktion Kurzbeschreibung
CDate
Wandelt eine Zeichenfolge in einen Datumswert um.
Date
Gibt das aktuelle Systemdatum aus.
DateAdd
Liefert einen Wert zurck, der ein Datum enthlt, zu dem ein bestimmtes
Zeitintervall addiert wurde.
DateDiff
Liefert einen Wert zurck, der die Anzahl der Zeitintervalle zwischen
zwei bestimmten Terminen angibt.
DatePart
Liefert einen Wert zurck, der einen bestimmten Teil eines angegebenen
Datums enthlt.
DateSerial
Liefert einen Wert zurck, der die angegebene Jahres-, Monats- und
Tageszahl enthlt.
DateValue
Wandelt eine Zeichenfolge in einen gltigen Datumswert um.
Day
Extrahiert den Tag als ganzzahligen Wert (131) aus einem Datumswert.
FileDateTime
Liefert das Erstellungsdatum bzw. das letzte nderungsdatum einer
Datei.
FormatDateTime
Gibt einen als Datum oder Uhrzeit formatierten Ausdruck zurck.
Hour
Liefert die Stunde aus einem Datums-/Zeitwert als ganzzahligen Wert
(023).
Minute
Liefert die Minute aus einem Datums-/Zeitwert als ganzzahligen Wert
(059).
Month
Extrahiert den Monat aus einem Datumswert als ganzzahligen Wert
(112).
Monthname
Gibt eine Zeichenfolge zurck, die den festgelegten Monat angibt.
Now
Liefert das Systemdatum inklusive der Uhrzeit.
Second
Liefert die Sekunde aus einem Datums-/Zeitwert als ganzzahligen Wert
(059).
Time
Gibt die aktuelle Systemzeit aus.
Timer
Gibt einen Wert vom Typ Single zurck, der die Anzahl der seit Mitter-
nacht vergangenen Sekunden angibt.
TimeSerial
Setzt einen Datums-/Zeitwert aus Ganzzahlwerten (Sekunden, Minuten
und Stunden) zusammen.
TimeValue
Wandelt eine Zeichenfolge in einen gltigen Zeitwert um.
Tabelle 159: Die Funktionen der Kategorie Datum und Zeit
Sandini Bib
726 VBA-Funktionen
Textfunktionen
WeekDay
Gibt den Wochentag aus einem Datumswert zurck (17).
WeekDayName
Gibt eine Zeichenfolge zurck, die den festgelegten Wochentag angibt.
Year
Extrahiert die Jahresinformation aus einem Datumswert.
Funktion Kurzbeschreibung
Asc
Gibt einen Wert vom Typ Integer zurck, der den Zeichencode entspre-
chend dem ersten Buchstaben in einer Zeichenfolge darstellt.
Choose
Whlt einen Wert aus einer Liste von Argumenten aus und gibt ihn
zurck.
Chr
Gibt einen Wert vom Typ String zurck, der das Zeichen enthlt, das dem
angegebenen Zeichencode zugeordnet ist.
InStr
Gibt einen Wert vom Typ Variant (Long) zurck, der die Position des
ersten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichen-
folge angibt.
InStrRev
Gibt die Position eines Vorkommnisses einer Zeichenfolge in einer ande-
ren Zeichenfolge vom Ende der Zeichenfolge gesehen an.
Join
Gibt eine Zeichenfolge zurck, die sich aus der Kombination einer Reihe
von untergeordneten Zeichenfolgen, die in einem Datenfeld enthalten
sind, ergibt.
LCase
Wandelt Grobuchstaben in Kleinbuchstaben um.
Left
Gibt einen Wert vom Typ Variant (String) zurck, der eine bestimmte
Anzahl von Zeichen ab dem ersten (linken) Zeichen einer Zeichenfolge
enthlt.
Len
Gibt einen Wert vom Typ Long zurck, der die Anzahl der Zeichen in
einer Zeichenfolge oder die zum Speichern einer Variablen erforderlichen
Byte enthlt.
Mid
Gibt einen Wert vom Typ Variant (String) zurck, der eine bestimmte
Anzahl von Zeichen aus einer Zeichenfolge enthlt.
Replace
Gibt eine Zeichenfolge zurck, in der eine festgelegte, untergeordnete
Zeichenfolge mit einer festgelegten Hufigkeit durch eine andere unter-
geordnete Zeichenfolge ersetzt wurde.
Right
Gibt einen Wert vom Typ Variant (String) zurck, der eine bestimmte
Anzahl von Zeichen von der rechten Seite (dem Ende) einer Zeichenfolge
enthlt.
Tabelle 160: Die Textfunktionen
Funktion Kurzbeschreibung
Tabelle 159: Die Funktionen der Kategorie Datum und Zeit (Forts.)
Sandini Bib
VBA-Funktionen 727
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Dateifunktionen
Space
Gibt eine Zeichenfolge vom Typ Variant (String) zurck, die aus einer
angegebenen Anzahl von Leerzeichen besteht.
Spc
Fgt in einer Textdatei eine bestimmte Anzahl von Leerzeichen ein.
Split
Gibt ein nullbasiertes, eindimensionales Datenfeld zurck, das eine fest-
gelegte Anzahl an untergeordneten Zeichenfolgen enthlt.
Str
Gibt einen Wert vom Typ Variant (String) zurck, der eine Zahl darstellt.
StrComp
Gibt einen Wert vom Typ Variant (Integer) zurck, der das Ergebnis eines
Zeichenfolgenvergleichs anzeigt.
StrConv
Gibt einen Wert vom Typ Variant (String) zurck, der wie angegeben
umgewandelt wurde.
StrReverse
Gibt eine Zeichenfolge zurck, in der die Reihenfolge der Zeichen einer
bestimmten Zeichenfolge umgekehrt wurde.
String
Gibt eine Zeichenfolge vom Typ Variant (String) zurck, die ein sich
wiederholendes Zeichen der angegebenen Lnge enthlt.
Switch
Wertet eine Liste von Ausdrcken aus und gibt einen Wert vom Typ
Variant oder einen Ausdruck zurck, der dem ersten Ausdruck in der
Liste zugeordnet ist, der True ergibt.
Trim
Gibt einen Wert vom Typ Variant (String) zurck, der eine Kopie einer
bestimmten Zeichenfolge enthlt, die keine fhrenden Leerzeichen
(LTrim), keine nachgestellten Leerzeichen (RTrim) sowie keine Kombina-
tion aus fhrenden und nachgestellten Leerzeichen (Trim) enthlt.
UCase
Wandelt Kleinbuchstaben in Grobuchstaben um.
Funktion/Anweisung Kurzbeschreibung
ChDir (A)
Wechselt das aktuelle Verzeichnis oder den aktuellen Ordner.
ChDrive (A)
Wechselt das aktuelle Laufwerk.
Close (A)
Beendet das Lesen aus und das Schreiben in eine Datei, die mit der
Open-Anweisung geffnet wurde.
CurDir (A)
Gibt einen Wert vom Typ Variant (String) zurck, der den aktuellen
Pfad darstellt.
Dir (F)
Gibt eine Zeichenfolge (String) zurck, die den Namen einer Datei,
eines Verzeichnisses oder eines Ordners darstellt, der mit einem
bestimmten Suchmuster, einem Dateiattribut oder mit der angege-
benen Datentrger- bzw. Laufwerksbezeichnung bereinstimmt.
Tabelle 161: Die Funktionen und Anweisungen der Kategorie Dateifunktionen und -anweisungen
Funktion Kurzbeschreibung
Tabelle 160: Die Textfunktionen (Forts.)
Sandini Bib
728 VBA-Funktionen
Environ (F)
Gibt die mit einer Betriebssystem-Umgebungsvariablen verbundene
Zeichenfolge (String) zurck.
EOF (F)
Gibt einen Wert vom Typ Integer zurck, der den Boolean-Wert True
enthlt, wenn das Ende einer Datei, die im Zugriffsmodus Random
oder Input geffnet wurde, erreicht worden ist.
FileAttr (F)
Gibt einen Wert vom Typ Long zurck, der den Zugriffsmodus fr
mit der Open-Anweisung geffnete Dateien darstellt.
FileCopy (A)
Kopiert eine Datei.
FileDateTime (F)
Gibt einen Wert vom Typ Variant (Date) zurck, der den Tag und die
Uhrzeit der Erstellung bzw. der letzten nderung der Datei anzeigt.
FileLen (F)
Gibt einen Wert vom Typ Long zurck, der die Lnge einer Datei in
Byte angibt.
FreeFile (F)
Gibt einen Wert vom Typ Integer zurck, der die nchste verfgbare
Dateinummer darstellt, die die Open-Anweisung zum ffnen einer
Datei verwenden kann.
Get (A)
Liest Daten aus einer geffneten Datentrgerdatei in eine Variable
ein.
GetAttr (F)
Gibt einen Wert vom Typ Integer zurck, der die Attribute einer
Datei, eines Verzeichnisses darstellt.
Input (F)
Gibt einen Wert vom Typ String zurck, der Zeichen aus einer im
Modus Input oder Binary geffneten Datei enthlt.
Kill (A)
Lscht eine Datei ohne Rckfrage.
Line Input (A)
Liest eine einzelne Zeile aus einer geffneten sequentiellen Datei und
weist sie einer Variablen vom Typ String zu.
Loc (F)
Gibt einen Wert vom Typ Long zurck, der die aktuelle Schreib-/
Leseposition innerhalb einer geffneten Datei angibt.
Lock (A)
Unlock (A)
Regelt die Zugriffsmglichkeiten anderer Prozesse auf eine Datei
(oder auf Teile einer Datei), die mit der Open-Anweisung geffnet
wurde.
LOF (F)
Gibt einen Wert vom Typ Long zurck, der die Gre einer mit der
Open-Anweisung geffneten Datei in Byte angibt.
LSet (A)
Richtet eine Zeichenfolge innerhalb einer Zeichenfolgenvariablen
links aus oder kopiert eine Variable eines benutzerdefinierten Daten-
typs in eine Variable eines anderen benutzerdefinierten Datentyps.
MkDir (A)
Erstellt ein neues Verzeichnis.
Name (A)
Benennt eine Datei, ein Verzeichnis oder einen Ordner um.
Open (A)
ffnet eine Datei fr die Ein- bzw. Ausgabe.
Print (A)
Schreibt Daten, die fr die Ausgabe formatiert sind, in eine sequen-
tielle Datei.
Funktion/Anweisung Kurzbeschreibung
Tabelle 161: Die Funktionen und Anweisungen der Kategorie Dateifunktionen und -anweisungen (Forts.)
Sandini Bib
VBA-Funktionen 729
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Mathematische Funktionen
Put (A)
Schreibt Daten aus einer Variablen in eine Datentrgerdatei.
Reset (A)
Schliet alle Datentrgerdateien, die mit der Open-Anweisung
geffnet wurden.
RmDir (A)
Lscht ein Verzeichnis.
Seek (F)
Gibt einen Wert vom Typ Long zurck, der die aktuelle Schreib-/
Leseposition in einer Datei festlegt, die mit der Open-Anweisung
geffnet wurde.
SetAttr (A)
Legt die Dateiattribute fest.
Shell (F)
Fhrt ein ausfhrbares Programm aus. Falls erfolgreich, wird ein
Wert vom Typ Variant (Double) zurckgegeben, der die Task-ID des
Programms darstellt. Andernfalls wird Null zurckgegeben.
Write (A)
Schreibt Daten in eine sequentielle Datei.
Funktion Kurzbeschreibung
Abs
Gibt den Absolutwert einer Zahl zurck. Das Vorzeichen wird dabei
ignoriert.
Atn
Gibt den Arcustangens einer Zahl als Winkel im Bogenma zurck.
Cos
Gibt den Cosinus zu einem Winkel im Bogenma zurck.
DDB
Errechnet den Abschreibungswert bei geometrisch degressiver
Abschreibung.
Exp
Gibt den Wert der Exponentialfunktion zu einer Zahl zurck.
Fix
Gibt den Vorkommawert einer Zahl zurck.
FV
Errechnet den zuknftigen Wert einer Annuitt bei konstanter Zahlung,
festem Zins und fester Laufzeit.
Int
Gibt den ganzzahligen Wert einer Zahl mit Dezimalen zurck.
IPmt
Errechnet den Zinsanteil fr eine bestimmte Periode bei Ansparung bzw.
Abzahlung in konstanten Raten und mit festem Zinssatz.
IRR
Gibt den internen Ertragssatz fr eine Folge regelmiger Ein- und Aus-
zahlungen zurck.
Log
Liefert den Logarithmus einer Zahl.
MIRR
Liefert den modifizierten internen Ertragssatz fr eine Folge regelmiger,
mit unterschiedlichen Zinsstzen ausgestatteten Ein- und Auszahlungen.
NPer
Errechnet die Anzahl der Zeitrume fr eine Annuitt bei konstanter
Zahlung und festem Zinssatz.
Tabelle 162: Die Funktionen der Kategorie Mathematik
Funktion/Anweisung Kurzbeschreibung
Tabelle 161: Die Funktionen und Anweisungen der Kategorie Dateifunktionen und -anweisungen (Forts.)
Sandini Bib
730 VBA-Funktionen
Prffunktionen
NPV
Errechnet den Nettobarwert einer Investition bei regelmigen Ein- und
Auszahlungen und festem Diskontsatz.
Pmt
Errechnet den Auszahlungswert fr eine Annuitt bei festen Zeitrumen,
konstanten Zahlungen und festem Zinssatz.
PPmt
Errechnet den Kapitelanteil eines Zeitraums fr eine Annuitt bei einer
festen Anzahl von Zeitrumen, konstanten Zahlungen und festem Zins-
satz.
PV
Errechnet den Barwert fr eine Annuitt bei konstanter Zahlung, festem
Zinssatz und einer festen Laufzeit.
Randomize
Initialisiert den Zufallsgenerator.
Rate
Errechnet den Zinssatz zu einer Annuitt bei fester Anzahl von Zeit-
rumen, konstanten Zahlungen und festem Zinssatz.
Rnd
Liefert eine Zufallszahl mit Dezimalstellen zwischen 0 und 1.
Round
Rundet einen Zahlenwert auf Basis einer Dezimalstelle.
Sgn
Gibt das Vorzeichen eines Werts als Faktor (10 oder 1) zurck.
Sin
Gibt den Sinus zu einem Winkel im Bogenma zurck.
SLN
Errechnet den periodischen Abschreibungswert bei linearer Abschreibung
ber einen bestimmten Zeitraum.
Sqr
Errechnet die Quadratwurzel einer Zahl.
SYD
Errechnet den Abschreibungswert fr eine Periode nach dem Modell der
Jahressummengewichtung.
Tan
Liefert den Tangens zu einem Winkel im Bogenma.
Funktion Beschreibung
IsEmpty
Gibt einen Wert vom Typ Boolean zurck, der angibt, ob eine Variable
initialisiert wurde.
IsArray
Gibt einen Wert vom Typ Boolean zurck, der angibt, ob eine Variable
ein Datenfeld ist.
IsDate
Gibt einen Wert vom Typ Boolean zurck, der angibt, ob ein Ausdruck
in ein Datum umgewandelt werden kann.
IsError
Gibt einen Wert vom Typ Boolean zurck, der angibt, ob ein Ausdruck
ein Fehlerwert ist.
IsNull
Gibt einen Wert vom Typ Boolean zurck, der angibt, ob ein Ausdruck
keine gltigen Daten (Null) enthlt.
Tabelle 163: Die Prffunktionen von Access
Funktion Kurzbeschreibung
Tabelle 162: Die Funktionen der Kategorie Mathematik (Forts.)
Sandini Bib
VBA-Funktionen 731
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Umwandlungsfunktionen
IsNumeric
Gibt einen Wert vom Typ Boolean zurck, der angibt, ob ein Ausdruck
als Zahl ausgewertet werden kann.
IsObject
Gibt einen Wert vom Typ Boolean zurck, der angibt, ob ein Bezeichner
eine Objektvariable darstellt.
Funktion Rckgabetyp Bereich des Arguments/Ausdruck
CBool Boolean
Eine gltige Zeichenfolge oder ein gltiger
numerischer Ausdruck.
Cbyte Byte
0 bis 255.
Ccur Currency
[Link].477,5808 bis
[Link].477,5807.
Cdate Date
Ein beliebiger gltiger Datumsausdruck.
CDbl Double
4,94065645841247E-324 fr negative Werte;
4,94065645841247E-324 bis
1,79769313486232E308 fr positive Werte.
CDec Decimal
Fr skalierte Ganzzahlen, d. h. Zahlen ohne
Dezimalstellen. Fr Zahlen mit 28 Dezimal-
stellen gilt der Bereich:
+/7,9228162514264337593543950335
CInt Integer
32.768 bis 32.767; Nachkommastellen werden
gerundet.
CLng Long
[Link] bis [Link]; Nachkomma-
stellen werden gerundet.
CSng Single
3,402823E38 bis 1,401298E-45 fr negative
Werte; 1,401298E-45 bis 3,402823E38 fr
positive Werte.
Cvar Variant
Numerische Werte im Bereich des Typs Double.
Nichtnumerische Werte im Bereich des Typs
String.
CStr String
Rckgabe fr CStr hngt vom Argument/Aus-
druck ab.
Tabelle 164: Typumwandlungsfunktionen
Funktion Beschreibung
Tabelle 163: Die Prffunktionen von Access (Forts.)
Sandini Bib
732 VBA-Funktionen
Farbfunktionen
Fr den Einsatz von Farben knnen Sie in Access die Funktionen RGB oder QBColor einsetzen.
Mithilfe der Funktion RGB knnen Sie sich eine Farbe zusammenmischen. Als Argumente
mssen Sie hierbei drei Werte angeben. Der erste Wert steht fr den Rotanteil der Farbe, der
zweite fr den grnen Anteil und der dritte fr den blauen Anteil der gewhlten Farbe. Die
folgende Tabelle listet einige typische Farbmischungen auf.
Farbe Rotwert Grnwert Blauwert
Schwarz 0 0 0
Blau 0 0 255
Grn 0 255 0
Cyan 0 255 255
Rot 255 0 0
Magenta 255 0 255
Gelb 255 255 0
Wei 255 255 255
Tabelle 165: Die Standardfarben ber die Funktion RGB
Farbnummer Farbe
0 Schwarz
1 Blau
2 Grn
3 Cyan
4 Rot
5 Magenta
6 Gelb
7 Wei
8 Grau
9 Hellblau
10 Hellgrn
11 Hellcyan
12 Hellrot
13 Hellmagenta
14 Hellgelb
15 Leuchtendes Wei
Tabelle 166: Die Standardfarben ber die Funktion BQColor
Sandini Bib
VBA-Funktionen 733
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Suchfunktionen
ber die folgenden Methoden knnen Sie Ihre Datenbestnde abfragen.
Methode Beschreibung
DFirst
Ermittelt den ersten Datensatz einer Tabelle/Abfrage, der einem bestimmten
Kriterium entspricht.
DLookup
Ermittelt den Wert eines Felds einer Tabelle/Abfrage, der einem bestimmten
Kriterium entspricht.
DMax
Ermittelt den grten Wert eines Felds in einer Tabelle/Abfrage.
DMin
Ermittelt den kleinsten Wert eines Felds in einer Tabelle/Abfrage.
DAvg
Ermittelt den Mittelwert der Datenstze einer Datensatzgruppe.
DCount
Ermittelt die Anzahl der Datenstze einer Datensatzgruppe.
DSum
Ermittelt die Summe der Datenstze einer Datensatzgruppe.
DStDev
Ermittelt die Standardabweichung einer Gruppe von Werten in einer Datensatz-
gruppe.
DVar
Ermittelt die Varianz einer Gruppe von Werten in einer Datensatzgruppe.
Tabelle 167: Die Suchmethoden von Access
Sandini Bib
Sandini Bib
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
bersicht der Konstanten
Dieser Teil des Anhangs enthlt eine Auswahl der wichtigsten Konstanten von Access sowie
Konstanten allgemein einsetzbarer Funktionen.
FileType-Konstanten
Die FileType-Konstanten sind dann von Interesse, wenn Sie ber das Objekt FileSearch
bestimmte Dateien suchen mchten.
Konstante Beschreibung
msoFileTypeAllFiles
Alle Dateien
msoFileTypeCalendarItem
Kalendereintrge
msoFileTypeContactItem
Kontaktordnereintrge
msoFileTypeCustom
Benutzerdefinierte Dateien
msoFileTypeDatabases
Datenbankdateien
msoFileTypeDesignerFiles
Designer-Dateien
msoFileTypeDocumentImagingFiles
Bilddokumentdateien
msoFileTypeExcelWorkbooks
Excel-Arbeitsmappen
msoFileTypeJournalItem
Journalbucheintrge (Outlook)
msoFileTypeMailItem
Mails
msoFileTypeNoteItem
Notizen aus Outlook
msoFileTypeOfficeFiles
Office-Dateien aller Art
msoFileTypeOutlookItems
Outlook-Objekte
msoFileTypePhotoDrawFiles
Dateien von PhotoDraw
msoFileTypePowerPointPresentations
PowerPoint-Prsentationen
msoFileTypeProjectFiles
Projektdateien aus MS Project
msoFileTypePublisherFiles
Dateien von MS Publisher
msoFileTypeTaskItem
Aufgaben aus Outlook
msoFileTypeTemplates
Vorlagedateien
msoFileTypeVisioFiles
Dateien aus MS Visio
msoFileTypeWebPages
Webseiten-Dateien
msoFileTypeWordDocuments
Word-Dokumente
Tabelle 168: Die Konstanten der Eigenschaft FileType (FileSearch)
Sandini Bib
736 bersicht der Konstanten
RGB-Konstanten
ber den Einsatz der Funktion RGB knnen Sie sich eine Farbe zusammenmischen. Als Argu-
mente mssen Sie hierbei drei Werte angeben. Der erste Wert steht fr den Rotanteil der
Farbe, der zweite fr den grnen Anteil und der dritte fr den blauen Anteil der gewhlten
Farbe. Die folgende Tabelle listet einige typische Farbmischungen auf.
RunCommand-Konstanten
Die Methode RunCommand fhrt einen eingebauten Men- oder Symbolleistenbefehl aus.
Dabei werden folgende Konstanten verwendet. Der Befehl kann entweder ber seine Kon-
stante oder einen festgelegten Wert angewendet werden.
Farbe Rotwert Grnwert Blauwert
Schwarz 0 0 0
Blau 0 0 255
Grn 0 255 0
Cyan 0 255 255
Rot 255 0 0
Magenta 255 0 255
Gelb 255 255 0
Wei 255 255 255
Tabelle 169: Die Standardfarben ber die Funktion RGB
Konstante Beschreibung Wert
acCmdAboutMicrosoftAccess Zeigt die Access-Info-Box an. 35
acCmdAnalyzeTable Zeigt den Tabelle-Analyse-Dialog an. 284
acCmdAnswerWizard Zeigt die Direkthilfe an. 235
acCmdApplyFilterSort Wendet den Filter an. 93
acCmdAppMaximize Maximiert das Access-Fenster. 10
acCmdAppMinimize Minimiert das Access-Fenster. 11
acCmdAppMove Verschiebt das Access-Fenster. 12
acCmdAppRestore Stellt das Access-Fenster wieder her. 9
acCmdAppSize Passt das Access-Fenster in der Gre
an.
13
acCmdArrangeIconsAuto Ordnet die Symbole automatisch an. 218
acCmdArrangeIconsByCreated Ordnet die Symbole nach dem Erstel-
lungsdatum an.
216
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand
Sandini Bib
bersicht der Konstanten 737
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
acCmdArrangeIconsByModified
Ordnet die Symbole nach der letzten
nderung an.
217
acCmdArrangeIconsByName
Ordnet die Symbole nach dem Namen
an.
214
acCmdArrangeIconsByType
Ordnet die Symbole nach dem Dateityp
an.
215
acCmdAutoKorrect
Zeigt den Autokorrektur-Dialog an. 261
acCmdClearAll
Lscht alle Tabellen aus dem Bezie-
hungsfenster.
146
acCmdClearAllBreakPoints
Lscht alle Haltepunkte. 132
acCmdClose
Schliet das Fenster mit dem aktuellen
Fokus.
58
acCmdCloseWindow
Schliet das aktuelle Fenster. 186
acCmdColumnWidth
Zeigt den Dialog zur Spaltenbreiten-
definition an.
117
acCmdCompactDatabase
Datenbank komprimieren. 4
acCmdControlWizardToggle
Steuerelement-Assistent ein- und aus-
schalten.
197
acCmdCopy
Kopiert den markierten Bereich. 190
acCmdCreateRelationship
Erstellt Beziehung. 150
acCmdCreateShortcut
Erstellt Verknpfung. 219
acCmdCut
Schneidet den markierten Bereich aus. 189
acCmdDataAccessPageBrowse
Listet die Datenzugriffsseiten auf. 344
acCmdDatabaseProperties
Zeigt die Datenbankeigenschaften an. 256
acCmdDataEntry
Schaltet auf die Dateneingabe um. 78
acCmdDatasheetView
Wechselt in die Datenblattansicht. 282
acCmdDateAndTime
Zeigt den Datums- und Zeitdialog an. 226
acCmdDebugWindow
Zeigt das Direktfenster an. 123
acCmdDelete
Lscht das ausgewhlte Objekt. 337
acCmdDeleteQueryColumn
Lscht Spalten in einer Abfrage. 81
acCmdDeleteRecord
Lscht Datensatz. 223
acCmdDeleteRows
Lscht Zeilen. 188
acCmdDeleteTableColumn
Lscht Spalten in einer Tabelle. 271
acCmdDesignView
Zeigt die Entwurfsansicht an. 183
acCmdDocMaximize
Maximiert das Datenbankfenster. 15
Konstante Beschreibung Wert
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand (Forts.)
Sandini Bib
738 bersicht der Konstanten
acCmdDocMinimize
Minimiert das Datenbankfenster. 60
acCmdDocMove
Verschiebt das Datenbankfenster. 16
acCmdDocSize
Legt die Gre des Fensters fest. 17
acCmdDuplicate
Dupliziert das markierte Objekt. 34
acCmdEditHyperlink
Bearbeitet einen Hyperlink. 325
acCmdEditRelationship
Bearbeitet eine Beziehung. 151
acCmdEnd
Unterbricht die aktuelle Aktion. 198
acCmdExit
Beendet Access. 3
acCmdFavoritesAddTo
Fgt einen Eintrag zu den Favoriten
hinzu.
299
acCmdFavoritesOpen
ffnet die Favoriten. 298
acCmdFieldList
Zeigt bzw. blendet die Feldliste an/aus. 42
acCmdFilterByForm
Stellt einen formularbasierten Filter ein. 207
acCmdFilterBySelection
Stellt einen auswahlbasierten Filter ein. 208
acCmdFind
Zeigt das Suchen-Fenster an. 30
acCmdFindNext
Sucht das nchste Vorkommen. 341
acCmdFindPrevious
Sucht das vorhergehende Vorkommen. 120
acCmdFitToWindow
Passt die Fensteransicht an. 245
acCmdFont
Zeigt den Schriften-Dialog an. 19
acCmdFormHdrFtr
Zeigt den Formularkopf und -fu an
bzw. blendet ihn aus.
36
acCmdFormView
Wechselt in die Formularansicht. 281
acCmdFreezeColumn
Fixiert Spalten. 105
acCmdGoBack
Zurck zur vorherigen Seite. 294
acCmdGoContinue
Fhrt den Code fort. 127
acCmdGoForward
Vor zur nchsten Seite. 295
acCmdHideColumns
Blendet Spalten aus. 79
acCmdHideTable
Blendet Tabellen aus. 147
acCmdImport
Importiert externe Daten. 257
acCmdInsertActiveXControl
ActiveX-Control einfgen. 258
acCmdInsertChart
Fgt ein Diagramm ein. 293
acCmdInsertFileIntoModule
Fgt eine Datei in ein Modul ein. 118
acCmdInsertHyperlink
Fgt einen Hyperlink ein. 259
acCmdInsertObject
Fgt ein Objekt ein. 33
Konstante Beschreibung Wert
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand (Forts.)
Sandini Bib
bersicht der Konstanten 739
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
acCmdInsertPicture
Fgt eine Grafik ein. 222
acCmdInsertProcedure
Fgt eine Prozedur ein. 262
acCmdInsertQueryColumn
Fgt eine Spalte in eine Abfrage ein. 82
acCmdInsertRows
Fgt eine Zeile ein. 187
acCmdInsertTableColumn
Fgt eine Tabellenspalte ein. 272
acCmdJoinProperties
Zeigt den Verknpfungseigenschaften-
Dialog an.
72
acCmdLastPosition
Steuert die letzte Position in einem
Modul an.
339
acCmdLayoutPreview
Zeigt die Layout-Vorschau an. 141
acCmdLineUpIcons
Ordnet die Symbole neu an. 213
acCmdLinkTables
Verknpft Tabellen. 102
acCmdListConstants
Zeigt die Konstanten an. 303
acCmdMicrosoftAccessHelpTopics
Zeigt das Access-Hilfefenster an. 100
acCmdNewDatabase
Legt eine neue Datenbank an. 26
acCmdNewObjectAutoForm
Erstellt ein AutoFormular. 193
acCmdNewObjectAutoReport
Erstellt einen AutoBericht. 194
acCmdNewObjectClassModule
Erstellt ein neues Klassenmodul. 140
acCmdNewObjectDataAccessPage
Erstellt eine neue Datenzugriffsseite. 346
acCmdNewObjectDiagramm
Erstellt ein neues Diagramm in der
Entwurfsansicht.
352
acCmdNewObjectForm
Startet den Formularassistenten. 136
acCmdNewObjectModule
Erstellt ein neues Modul. 139
acCmdNewObjectQuery
Startet den Abfrage-Assistenten. 135
acCmdNewObjectReport
Startet den Berichts-Assistenten. 137
acCmdNewObjectTable
Startet den Tabellen-Assistenten. 134
acCmdObjectBrowser
ffnet den Objektdialog. 200
acCmdOpenDatabase
Zeigt den Datenbank-ffnen Dialog an. 25
acCmdOpenHyperlink
ffnet einen Hyperlink. 326
acCmdOpenNewHyperlink
Zeigt den Hyperlink in einem neuen
Fenster an.
327
acCmdOpenTable
ffnet eine Tabelle. 221
acCmdOptions
Zeigt das Optionsfenster an. 49
acCmdOutputToExcel
Exportiert ein Objekt als Excel-Tabelle. 175
acCmdOutputToText
Exportiert ein Modul in einer Textdatei. 177
Konstante Beschreibung Wert
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand (Forts.)
Sandini Bib
740 bersicht der Konstanten
acCmdPageSetup
Zeigt den Dialog SEITE EINRICHTEN an. 32
acCmdPaste
Fgt Inhalt aus der Zwischenablage ein. 191
acCmdPasteSpecial
Zeigt den Dialog INHALTE EINFGEN an. 64
acCmdPreviewOnePage
Zeigt die Seitenansicht in einer Seite an. 246
acCmdPreviewTwoPages
Zeigt die Seitenansicht in zwei Seiten
an.
247
acCmdPrintPreview
Zeigt die Seitenansicht an. 54
acCmdPrint
Zeigt den Dialog DRUCKEN an. 340
acCmdProperties
Zeigt das Eigenschaftsfenster an. 287
acCmdQuickPrint
Druckt direkt, ohne den Dialog
DRUCKEN anzuzeigen.
278
acCmdRecordsGoToFirst
Gehe zu erster Satz. 67
acCmdRecordsGoToLast
Gehe zu letzter Satz. 68
acCmdRecordsGoToNew
Gehe zu neuem Satz. 28
acCmdRecordsGoToNext
Gehe zu nchstem Satz. 65
acCmdRecordsGotoPrevious
Gehe zu vorherigem Satz. 66
acCmdRedo
Letzten Befehl wiederholen. 199
acCmdReferences
Zeigt den Dialog VERWEISE an. 260
acCmdRefresh
Die Anzeige wird aktualisiert. 18
acCmdRelationships
ffnet das Fenster BEZIEHUNGEN. 133
acCmdRemoveFilterSort
Entfernt Filter und Sortierung. 144
acCmdRemoveTable
Entfernt Tabelle. 84
acCmdRename
Benennt ein Objekt um. 143
acCmdRepairDatabase
Repariert Datenbank. 6
acCmdReplace
ffnet den Dialog ERSETZEN. 29
acCmdReset
Setzt den laufenden Code zurck. 124
acCmdRowHeight
Zeigt den Dialog ZEILENHHE an. 116
acCmdRun
Abfrage ausfhren. 181
acCmdRunMacro
Der Dialog MAKRO AUSFHREN wird
angezeigt.
31
acCmdRunOpenMacro
Makro wird ausgefhrt. 338
acCmdSave
Speichert das aktuelle Objekt. 20
acCmdSaveAs
Der Dialog SPEICHERN UNTER/
EXPORTIEREN wird angezeigt.
21
acCmdSaveAsASP
Objekt wird als ASP-Datei gespeichert. 323
Konstante Beschreibung Wert
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand (Forts.)
Sandini Bib
bersicht der Konstanten 741
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
acCmdSaveAsReport
Der Dialog ALS BERICHT SPEICHERN
wird angezeigt.
142
acCmdSaveModuleAsText
Der Dialog SPEICHERN UNTER wird fr
das Modul angezeigt.
119
acCmdSaveRecord
Datensatz wird gespeichert. 97
acCmdSelectAll
Alles wird ausgewhlt. 333
acCmdSelectAllRecords
Alle Datenstze werden ausgewhlt. 109
acCmdSelectDataAccessPage
Datenzugriffsseite wird ausgewhlt. 347
acCmdSelectForm
Formular wird ausgewhlt. 40
acCmdSelectRecord
Datensatz wird markiert. 50
acCmdSelectReport
Bericht wird ausgewhlt. 319
acCmdSend
Sendet das markierte Objekt per
E-Mail.
173
acCmdSetDatabasePasswort
Legt das Datenbankkennwort fest. 275
acCmdShowAllRelationships
Zeigt alle Beziehungen an. 149
acCmdShowTable
Zeigt den Dialog TABELLE HINZUFGEN
an.
185
acCmdSingleStep
Einzelschrittmodus in einem Makro
durchfhren.
88
acCmdSizeToFit
Gre an Textgre anpassen. 59
acCmdSizeToGrid
Gre an Raster anpassen. 48
acCmdSizeToNarrowest
Gre wird auf Basis des schmalsten
Elements angepasst.
155
acCmdSizeToShortest
Gre wird auf Basis des niedrigsten
Elements angepasst.
260
acCmdSnapToGrid
Elemente werden am Raster neu aus-
gerichtet.
62
acCmdSortAscending
Sortierung wird aufsteigend durchge-
fhrt.
163
acCmdSortDescending
Sortierung wird absteigend durchge-
fhrt.
164
acCmdSortingAndGrouping
Dialog SORTIEREN UND GRUPPIEREN
wird angezeigt.
51
acCmdSQLView
Wechselt zur SQL-Ansicht. 184
acCmdStartupProperties
Zeigt den Dialog START an. 224
acCmdStepInto
Fhrt einen Einzelschritt in die nchste
Prozedurzeile durch.
342
Konstante Beschreibung Wert
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand (Forts.)
Sandini Bib
742 bersicht der Konstanten
acCmdStepOver
Lsst einen Prozedurschritt aus. 128
acCmdStepToCursor
Fhrt eine Prozedur bis zur Cursor-
position aus.
204
acCmdToggleBreakpoint
Schaltet einen Haltepunkt ein/aus. 131
acCmdToggleFilter
Wendet einen Filter an bzw. hebt ihn
auf.
220
acCmdToolbarsCustomize
Zeigt den Dialog ANPASSEN an. 165
acCmdUndo
Widerruft die letzte Aktion. 292
acCmdUserAndGroupAccounts
Zeigt den Benutzer- und Gruppen-
dialog an.
104
acCmdViewCode
ffnet das Code-Fenster. 170
acCmdViewDataAccessPages
Zeigt die Datenzugriffsseiten an. 349
acCmdViewDetails
Zeigt Details im Datenbankfenster an. 210
acCmdViewGrid
Blendet das Raster ein bzw. aus. 63
acCmdForms
Zeigt die Formulare im Datenbank-
fenster an.
112
acCmdViewLargeIcons
Zeigt groe Symbole im Datenbank-
fenster an.
209
acCmdViewList
Zeigt die Objekte als Liste im Daten-
bankfenster an.
212
acCmdViewMacros
Zeigt die Makros im Datenbankfenster
an.
114
acCmdViewModules
Zeigt die Module im Datenbankfenster
an.
115
acCmdViewQueries
Zeigt die Abfragen im Datenbank-
fenster an.
111
acCmdViewReports
Zeigt die Berichte im Datenbankfenster
an.
113
acCmdViewRuler
Blendet das Lineal ein bzw. aus. 61
acCmdViewShowPaneGrid
Zeigt eine Tabelle in der Entwurfs-
ansicht an.
359
acCmdViewSmallIcons
Zeigt kleine Symbole im Datenbank-
fenster an.
211
acCmdViewStoredProcedures
Zeigt die gespeicherten Prozeduren im
Datenbankfenster an.
355
acCmdViewTables
Zeigt die Tabellen in der Datenbank-
ansicht an.
110
acCmdViewToolbox
Blendet die Toolbox ein bzw. aus. 85
Konstante Beschreibung Wert
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand (Forts.)
Sandini Bib
bersicht der Konstanten 743
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Dir-Konstanten
Sicher kennen Sie noch den alten DOS-Befehl Dir, ber den Sie sich damals, aber auch
noch heute, den Inhalt Ihrer Festplatte anzeigen lassen konnten. Mit diesem Befehl lassen
sich bestimmte Konstanten einsetzen, die Sie in der nachfolgenden Tabelle einsehen kn-
nen.
Shell-Konstanten
Mithilfe der Funktion Shell knnen Sie jedes ausfhrbare Programm aufrufen. ber die
Shell-Konstanten legen Sie dabei fest, ob das Programm im Hintergrund bleiben bzw. mini-
miert oder maximiert angezeigt werden soll.
acCmdWindowsArrangeIcons
Symbole werden angeordnet. 24
acCmdWindowCascade
Fenster werden berlappend angezeigt. 22
acCmdWindowHide
Aktives Fenster wird ausgeblendet. 2
acCmdWindowUnhide
Der Dialog FENSTER EINBLENDEN wird
angezeigt.
1
acCmdZoom10
Der Zoom wird auf 10% eingestellt. 244
acCmdZoom100
Der Zoom wird auf 100% (1:1)
eingestellt.
240
acCmdZoomBox
Der Dialog ZOOM wird angezeigt. 179
Konstante Wert Beschreibung
VbNormal 0
(Voreinstellung) Dateien ohne Attribute.
VbReadOnly 1
Schreibgeschtzte Dateien, zustzlich zu Dateien ohne
Attribute.
VbHidden 2
Versteckte Dateien, zustzlich zu Dateien ohne Attri-
bute.
VbSystem 4
Systemdatei, zustzlich zu Dateien ohne Attribute.
Beim Macintosh nicht verfgbar.
VbVolume 8
Datentrgerbezeichnung. Falls andere Attribute ange-
geben wurden, wird VbVolume ignoriert. Beim Macin-
tosh nicht verfgbar.
VbDirectory 16
Verzeichnis oder Ordner, zustzlich zu Dateien ohne
Attribute.
Tabelle 171: Die Konstanten der Funktion Dir
Konstante Beschreibung Wert
Tabelle 170: Die wichtigsten Konstanten der Methode RunCommand (Forts.)
Sandini Bib
744 bersicht der Konstanten
Die Funktion Shell hat folgende Syntax:
Shell(pathname[,windowstyle])
Im Argument pathname geben Sie den Pfad sowie den Dateinamen der ausfhrbaren Datei an,
die Sie starten mchten.
Das Argument WindowsStyle legt den Stil des Fensters fest, in dem das Programm ausgefhrt
werden soll. Dabei stehen Ihnen die Konstanten aus der folgenden Tabelle zur Verfgung.
StrConv-Konstanten
Mithilfe der Funktion StrConv und der dazugehrigen Konstanten knnen Sie Texte automa-
tisch anpassen. Sie haben dabei unter anderem die Mglichkeit, Texte in Gro- bzw. Klein-
buchstaben umzuwandeln.
Entnehmen Sie der folgenden Tabelle die gngigsten Konstanten der Funktion StrConv.
Var-Type-Konstanten
ber die Funktion VarType und deren Konstanten knnen Sie den Datentyp einer Variablen
prfen. Dies ist mitunter wichtig, wenn Sie spter Variablentypen umwandeln mssen.
Konstante Wert Beschreibung
VbHide 0 Das Fenster ist ausgeblendet und das ausgeblendete
Fenster erhlt den Fokus.
VbNormalFocus 1 Das Fenster hat den Fokus und die ursprngliche
Gre und Position werden wiederhergestellt.
VbMinimizedFocus 2 Das Fenster wird als Symbol mit Fokus angezeigt.
VbMaximizedFocus 3 Das Fenster wird maximiert mit Fokus angezeigt.
VbNormalNoFocus 4 Die zuletzt verwendete Gre und Position des Fens-
ters wird wiederhergestellt. Das momentan aktive
Fenster bleibt aktiv.
VbMinimizedNoFocus 6 Das Fenster wird als Symbol angezeigt. Das momen-
tan aktive Fenster bleibt aktiv.
Tabelle 172: Die Konstanten der Funktion Shell
Konstante Wert Beschreibung
VbUpperCase 1 Wandelt die Zeichenfolge in Grobuchstaben um.
VbLowerCase 2 Wandelt die Zeichenfolge in Kleinbuchstaben um.
VbProperCase 3 Wandelt den ersten Buchstaben jedes Worts innerhalb der
Zeichenfolge in einen Grobuchstaben um.
Tabelle 173: Die Konstanten der Funktion StrConv
Sandini Bib
bersicht der Konstanten 745
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Die Funktion VarType hat folgende Syntax:
VarType(VarName)
Das Argument VarName liefert einen Wert, dessen Bedeutung Sie der folgenden Tabelle ent-
nehmen knnen.
File Input/Output-Konstanten
Mithilfe dieser Konstanten bestimmen Sie den Zugriff auf eine Datei. Dabei knnen Sie eine
Datei mit Leserecht ffnen. Sie haben dann keine Chance, diese Datei zu verndern. Eine
weitere Mglichkeit ist es, eine Datei zu ffnen und dafr zu sorgen, dass diese neu angelegt
wird, sofern sie schon existiert. Die dritte Mglichkeit ist, in eine Datei hineinzuschreiben
und dabei die bisherigen Eingaben beizubehalten, also den neuen Text einfach unten anzu-
hngen. Diese File Input/Output-Konstanten werden bevorzugt in der Verarbeitung von
Textdateien angewendet.
Entnehmen Sie die einzelnen Mglichkeiten des Dateizugriffs der folgenden Tabelle.
Konstante Wert Beschreibung
VbEmpty 0
Empty (nicht initialisiert)
VbNull 1
Null (keine gltigen Daten)
VbInteger 2
Ganzzahl (Integer)
VbLong 3
Ganzzahl (Long)
VbSingle 4
Fliekommazahl einfacher Genauigkeit
VbDouble 5
Fliekommazahl doppelter Genauigkeit
VbCurrency 6
Whrungsbetrag (Currency)
VbDate 7
Datumswert (Date)
VbString 8
Zeichenfolge (String)
vbObject 9
Objekt
vbError 10
Fehlerwert
vbBoolean 11
Boolescher Wert (Boolean)
vbVariant 12
Variant (nur bei Datenfeldern mit Variant-Werten)
vbDataObject 13
Ein Datenzugriffsobjekt
VbDecimal 14
Dezimalwert
VbByte 17
Byte-Wert
VbArray 8192
Datenfeld (Array)
Tabelle 174: Die Konstanten der Funktion VarType
Sandini Bib
746 bersicht der Konstanten
Datumsformat-Konstanten
Fr das Anzeigen von Datums- und Zeitangaben stehen Ihnen fertige Systemkonstanten zur
Verfgung, die die Formatierung des Datums bzw. des Zeitwerts fr Sie bernehmen. Diese
Datums-/Zeitkonstanten werden beispielsweise im Zusammenspiel mit der Funktion Format-
DatTime verwendet.
FormatDateTime(Datum[,BenanntesFormat])
Im Argument Datum bergeben Sie der Funktion einen Datumswert.
Im Argument BenanntesFormat whlen Sie eine der folgenden Datums-/Zeitkonstanten (siehe
Tabelle 176).
Konstante Wert Beschreibung
ForReading 1
ffnet eine Datei, die nur gelesen werden kann. Sie kn-
nen nicht in diese Datei schreiben.
ForWriting 2
ffnet eine Datei zum Schreiben. Wenn es eine Datei mit
dem gleichen Namen gibt, wird der frhere Inhalt ber-
schrieben.
ForAppending 8
ffnet eine Datei und schreibt an das Ende dieser.
Tabelle 175: Die Konstanten fr den Dateizugriff bei Textdateien
Konstante Wert Beschreibung
vbGeneralDate 0
Zeigt ein Datum und/oder eine Uhrzeit an. Wenn es ein
Datum gibt, wird es in Kurzform angezeigt. Wenn es eine Uhr-
zeit gibt, wird sie im langen Format angezeigt. Falls vorhanden,
werden beide Teile angezeigt.
vbLongDate 1
Zeigt ein Datum im langen Datumsformat an, das in den
Lndereinstellungen des Computers festgelegt ist.
VbShortDate 2
Zeigt ein Datum im kurzen Datumsformat an, das in den
Lndereinstellungen des Computers festgelegt ist.
vbLongTime 3
Zeigt eine Uhrzeit in dem Zeitformat an, das in den Lnder-
einstellungen des Computers festgelegt ist.
vbShortTime 4
Zeigt eine Uhrzeit im 24-Stunden-Format (hh:mm) an.
Tabelle 176: Die Datumskonstanten
Sandini Bib
bersicht der Konstanten 747
VBA-
Funktio-
nen
Weitere
Funktio-
nen
Access-
Objekte
Tabellen
Abfra-
gen
Steuer-
elemen-
te
Berichte
Ereignis
VBE und
Security
Access
und ...
Schaltflchen auswerten
Die Methode Msgbox sowie die Methode Inputbox haben folgende Schaltflchenkonstanten:
Konstante oder Wert Beschreibung
vbOK oder 1 Die Schaltflche OK wurde angeklickt.
vbCancel oder 2 Die Schaltflche ABBRECHEN wurde angeklickt.
vbAbort oder 3 Die Schaltflche ABBRUCH wurde angeklickt.
vbRetry oder 4 Die Schaltflche WIEDERHOLEN wurde angeklickt.
vbIgnore oder 5 Die Schaltflche IGNORIEREN wurde angeklickt.
vbYes oder 6 Die Schaltflche JA wurde angeklickt.
vbNo oder 7 Die Schaltflche NEIN wurde angeklickt.
Tabelle 177: Rckgabewerte fr Schaltflchen
Sandini Bib
Sandini Bib
Stichwortverzeichnis
A
Abfrage
auflisten 180
erstellen 368
erstellen (ADO) 392
erstellen (ADOX) 395
erstellen (DAO) 393
programmieren 365
starten 366
ABS 99
Abschreibung
errechnen 101, 102
AbsolutePosition 557
Absolutwert
ausgeben 99
AccessObject 177
Access-Tabelle
transferieren 675
bertragen 672
Access-Version
abfragen 186
feststellen 58, 183
Access-Verzeichnis
ermitteln 138
ActiveConnection 349, 396
ActualWork 661
Adaptive Mens
ausschalten 255
AdaptiveMenus 256
Add 249, 252, 257, 260, 478, 611, 666, 674,
686
ADD COLUMN 386
ADD CONSTRAINT 386
AddFromFile 605, 629, 631
AddFromGuid 602
AddIns 599
AddItem 442, 451, 454, 480, 485, 696, 711
AddNew 239, 342, 347, 533, 544, 656, 664,
703, 719
nderungen
verhindern 552
AfterUpdate 460
Aktionsschaltflche
beschriften 412
Aktivierreihenfolge
anpassen 426
Aktualisierungsabfrage
erstellen 368
Aktuellen Datensatz
kopieren 571
Aktuelles Verzeichnis
ermitteln 137
AllDataAccessPages 520
AllModules 177, 718
AllowEdits 542
AllowMultiSelect 412
AllReports 506
AllTables 178
ALTER TABLE 386
AND 317
Anfgeabfrage
ausfhren 370
Animation 217
Animationseffekt
bestimmen 217
Anschluss
auslesen 185
Ansicht
aktualisieren 389
Ansparungsbetrag
errechnen 107
Anwendernamen
abfragen 184
ermitteln 122
Anwendung
finden 126
Anwendungspfad
ermitteln 182
Anzeigeposition
festlegen 247
API-Funktionen
einsetzen 119
Append 354, 357, 358, 360, 396, 591, 594
Application 180
Sandini Bib
750 Stichwortverzeichnis
Applikation
beenden 184
ApplyFilter 187
ApplyTheme 519, 523
Arabische Zahlen
wandeln 172
Arbeitsgruppe
anlegen (ADO) 591
anlegen (DAO) 590
entfernen (ADO) 592
entfernen (DAO) 592
AS SELECT 393
ASC 44, 71, 290, 482
Asc 166
AtEndOfStream 235
Attachment 664, 666
Attributes 352
Aufgaben
abfragen 659
Auswahl
aufheben 432
Auswahlabfrage
ausfhren 380
AVG 383
Avg 304
B
BackColor 427, 431, 503, 568, 699
Balloon 214
Balloon-Objekt
anzeigen 218
BalloonType 216
Beep 145
Benutzer
anlegen (ADO) 594
anlegen (DAO) 593
auslesen (DAO) 596
entfernen (ADO) 595
entfernen (DAO) 595
Berechtigungen
zuweisen (ADO) 596
Bericht
drucken 495
exportieren 500
formatieren 502
kopieren 497
listen 505
programmieren 491
schlieen 494
umbenennen 499
ffnen 492
Berichtselemente
einfgen 513
identifizieren 506
Berichtsfilter
setzen 494
Berichtsteil
ausblenden 510
einblenden 510
Berichtstypen 491
BETWEEN 405
Bibliotheken
auslesen 213
einbinden 603
Bibliotheks-Objektnamen
auslesen 606
Bilder
umbenennen 78
Bildschirmaktualisierung
ausschalten 195
einschalten 195
Bildschirmauflsung
ermitteln 124
Birthday 653
Blinkende Schaltflche
erstellen 468
Body 658, 660, 664, 666
Bold 692
Bookmark 337
Bremsweg
ermitteln 158
Buchstaben
entfernen 44
zhlen 169
BusinessAddressCity 653
BusinessAddressPostalCode 653
BusinessAddressState 653
BusinessAddressStreet 653
BusinessFaxNumber 653
BusinessTelephoneNumber 653
Button 218
ButtonName 412
C
Caption 244, 245, 260, 540, 566, 692
Case Else 46
Catalog 348, 349, 594
Categories 658, 661
Sandini Bib
Stichwortverzeichnis 751
CDate 23, 115, 174, 455
CDbl 114
CD-ROM-Laufwerk
bedienen 124
ermitteln 119
ffnen 124
schlieen 124
Cell 675
Cells 485
Change 454
CharLower 142
CharUpper 142
ChDir 71, 160
ChDrive 72
Choose 47
Chr 47, 110
Clear 696
ClearContents 485
CLng 116
Clone 334
Close 87, 92, 195, 235, 239, 276, 282, 290,
317, 328, 341, 343, 425, 483, 494, 544, 551,
553, 616, 664, 679
CloseClipboard 143
CloseCurrentDatabase 184
CodeModul 599, 631
CodePanes 599
Codes
sichern 716
Column 350, 352, 452, 698
ColumnCount 692
Columns 353
ColumnWidth 692
CommandBar 244
CommandBarControl 260
CommandBars 239, 245, 599
Complete 660, 661
Computernamen
ermitteln 123
Connect 362
Connection 276, 312, 587
ConnectionString 276, 312
Control 186
Controls 246, 263, 419
ControlTipText 435, 541, 577
ControlType 420, 434, 507, 541
CopyObject 190, 497
COUNT 383
Count 240, 245, 304, 353, 648, 664, 668
CountOfDeclarationLines 627
CountOfLines 620, 627, 629, 633
CREATE INDEX 390
CREATE TABLE 388
CREATE VIEW 393
CreateDataAccessPage 519
CreateDirectory 130
CreateEventProc 632
CreateField 355, 357, 360
CreateFolder 226
CreateGroup 591
CreateItem 652, 666
CreateObject 485, 567, 649, 652, 670, 674,
686, 703, 709
CreateQueryDef 394, 402
CreateReport 511, 516
CreateReportControl 513
CreateTableDef 357
CreateTextfile 236
CreateUser 594
CurDir 72
CurrentData 179
CurrentDb 36, 114, 281, 357, 394, 530
CurrentProject 178, 181, 520, 674
CurrentUser 90, 184
CursorLocation 293
Cursorposition
ermitteln 150
D
Database 36, 280
Date 24, 440, 454
DateAdd 25
DateCreated 178, 225, 238
DateDiff 29
Datei
auslesen 73
kopieren 77, 220
listen 230
lschen 77, 223
suchen 38, 146
umbenennen 81
verschieben 221
zhlen 163
Dateiansicht
festlegen 413
Dateiattribute
setzen 94
Sandini Bib
752 Stichwortverzeichnis
Dateidialogfeld
anzeigen 414
Dateiendung
prfen 60
Dateiexistenz
prfen 82, 224
Dateifilter
festlegen 413
Dateiinformationen
abfragen 225
auslesen 147
Dateiname
ermitteln 51, 238
Dateisystem
ermitteln 234
Dateityp
identifizieren 140
DateLastAccessed 225
DateLastModified 225, 238
Daten
ausgeben (DAO) 280
gruppieren (ADO) 308
Datenbank
ffnen 162
ffnen (ADO) 275, 586
ffnen (DAO) 586
schlieen 184
schtzen 584
suchen 237
berprfen 160
verschlsseln 583
Datenbankabfragen
starten 704
Datenbankgre
ermitteln 238
Datenbankinhalte
transferieren 206
Datenbankkennwort
ndern (DAO) 589
Datenbankname
ermitteln 36, 180
Datenbankpfad
ermitteln 181
Datenbankstatus
berprfen 161
Datensatz
aktivieren 200, 269
clonen (ADO) 334
clonen (DAO) 336
einlesen (ADO) 282
einlesen (DAO) 284
extrahieren 278
filtern (ADO) 324
filtern (DAO) 327
finden 268
finden (ADO) 310
finden (DAO) 314
hinzufgen 239
hinzufgen (ADO) 342
hinzufgen (DAO) 346
lschen (ADO) 338
lschen (DAO) 340
sortieren (ADO) 290
sortieren (DAO) 293
summieren 334
verndern (ADO) 318
verndern (DAO) 320
zhlen (ADO) 328
zhlen (DAO) 332
Datensatzlschung
verhindern 554
Datensatzmarkierer
ausblenden 430
einblenden 430
Datentrgerdateien
schlieen 93
Datenzugriffsseite
anpassen 522
anzeigen 521
auslesen 520
erstellen 516
DatePart 26
DateSerial 30, 175
DateValue 31
Datum
zerlegen 33
Datumsabfrage
durchfhren 405
Datumsangaben
formatieren 38
Datumsdifferenzen
errechnen 29
Datumstabelle
ffnen 35
Datumswerte
erkennen 31, 115
umsetzen 31
wandeln 115
Sandini Bib
Stichwortverzeichnis 753
DAvg 306
Day 33, 471
DayLength 471
DCount 306, 330
DDB 101
[Link] 26, 240
DefinedSize 352
Definition
Aktionsabfragen 365
Auswahlabfragen 365
Kreuztabellenabfragen 365
Parameterabfragen 365
SQL-Abfragen 366
DELETE 372
Delete 247, 259, 338, 340, 359, 595, 596
DeleteControl 620
DeleteFile 223
DeleteFolder 226
DeleteLines 618, 620
DeleteObject 192, 409
DESC 290, 482
Description 190
DeviceName 185
DFirst 306
Dialoge
anzeigen 415
Diashow
programmieren 668
Dir 38, 73, 80, 91, 161
Direktbereich
editieren 240
Direktfenster
editieren 26
Dirty 552
Display 642
DLast 306, 545
DLookup 306, 553, 574
DMax 306, 336, 557
DMin 306
Do Until 282, 286, 341
Do until 38, 53
Do While 328
DoCmd 187, 365, 492
Dokumenteigenschaften
auslesen 173
DoMenuItem 466
Doppelte Eingaben
verhindern 573
DriveLetter 233
DriveType 232
DROP COLUMN 386
DROP CONSTRAINT 386
DROP INDEX 391
DROP TABLE 391
Drucker
listen 185
Druckername
ermitteln 185
DstDev 306
DStDevP 306
DSum 306, 334
DueDate 660
Dump
ziehen (ADO) 276
Duration 658
Durchschnittsverbrauch
errechnen 155
DVar 306
DVarP 306
E
Echo 195
Eigene Berichte
erstellen 511
Eigene Lschabfrage
einsetzen 555
Eingabe
erzwingen 411
limitieren 541
prfen 111
vorwegnehmen 574
Eingabedialog
anzeigen 410
Eingabeprfung
vornehmen 547
E-Mail
importieren 661
mit Anhang versenden 646
verschicken 642
Email1Address 653
E-Mail-Anhnge
speichern 666
Enabled 246, 264, 265, 435
End 658
End With 260
Endtermine
errechnen 25
Environ 83, 440
EOF 282, 290, 319, 589, 684
Err 37, 162
Sandini Bib
754 Stichwortverzeichnis
Erstellungsdatum
ermitteln 35
EuroConvert 321
Excel-Makro
starten 707
Excel-Status
ermitteln 684
Execute 239, 285, 365, 444, 464, 711
Exit Function 166
Exit Sub 80, 409, 415, 469, 548, 631
Export 616, 634, 635
ExportXML 275
Externes Programm
aufrufen 126
starten 95
F
FaceId 248, 261
Fahrleistung
berechnen 157
FastLaserPrinting 497
Fehler
abfangen 77
ignorieren 247
Fehlerbeschreibung
abrufen 37
Fehlerhafte Verweise
ermitteln 609
Fehlernummer
abrufen 37
ausgeben 190
Feld
aktivieren 199
ausblenden 538
ausgeben (ADO) 279
einblenden 538
fokussieren 528
hinzufgen 386
lschen 386
vorbelegen 544
Feldlschung
verhindern 575
Fenstergre
festlegen 205
maximieren 205
minimieren 205
wiederherstellen 206
Fields 282, 290, 321, 328, 343, 347, 533
FileAttr 93
FileCopy 77
FileDateTime 75
FileDatTime 35
FileDialog 411, 414
FileDialogSelectedItems 414
FileExists 224
FileLen 82
FileName 238, 444, 480, 481, 669, 711
FileSearch 237, 444, 464, 480, 484, 669, 711
FileSystem 220, 234
FileSystemObject 174, 235
FileTimeToLocalTime 147
FileTimeToSystemTime 147
FileType 464, 484, 711
FillColor 503
FillStyle 503
Filter 325
entfernen 189
lschen 413
setzen 187
Filters 413
Find 310, 553, 557, 621, 624, 684
FindExecutable 141
FindFirst 314, 315, 341, 656
FindFirstFile 147
FindLast 314
FindNext 314, 341
FindPrevious 314
FindRecord 268
FindWindow 126
FIRST 383
First 304
FirstDay 471
FirstName 649, 653
Fix 103
FolderExists 227
FontBold 502, 503, 537
FontItalic 503
FontName 503
FontSize 503
FontUnderline 503
For Each Next 187, 348, 420
For each next 180, 232, 244, 262, 541, 603,
606
For Next 71, 102
ForeColor 431, 502, 503, 692
Form_BeforeUpdate 547
Form_Open 525
FormatDatTime 38
Sandini Bib
Stichwortverzeichnis 755
Formular
auslesen 419
erstellen 415
lschen 409, 621
ffnen 200, 423
schlieen 425
Formularcode
importieren 631
sichern 635
Formularereignis
einstellen 632
lschen 619
Formularhintergrund
einstellen 427
Fortschrittsbalken
anpassen 475
programmieren 474
FoundFiles 239, 444, 464, 669
FreeFile 91
FreeSpace 234
FROM 298, 375, 393
FullName 182, 214, 521
FullPath 608
Funktion
beenden 166
FV 107
G
Ganzzahligen Wert
ermitteln 103
Gesamtkapazitt
ermitteln 234
GetAttr 93
GetClipboardData 143
GetCommandLine 139
GetComputerName 123
GetCurrentDirectory 137
GetCursorPos 150
GetDefaultFolder 641, 648, 660, 664
GetDeviceCaps 124
GetDriveType 121
GetExitCodeProcess 127
GetKeyboardState 145
GetLogicalDriveStrings 121
GetNameSpace 641
GetObject 640, 664, 671, 684, 685, 709
GetRows 282, 284
GetShortPathName 141
GetSting 280
GetString 279
GetSystemDirectory 135
GetTempPath 136
GetUser 527
GetUserName 122, 527
GetVersionEx 133
GoTo 684
GoToControl 199
GoToRecord 200, 269, 538, 557
Grobuchstaben
wandeln 55
Group 591
GROUP BY 308
Groups 591, 596
H
HasLegend 483
HasModul 637
HasTitel 483
HAVING 309
Heading 216
Hintergrund
anpassen 430
Hour 40
I
Icon 216
ID 244, 258
Idealgewicht
bestimmen 156
If 160
Index
definieren 390
entfernen 391
Industriezeit
errechnen 153
Initialen
erstellen 164
InitialFileName 413
Initialize 682
InitialView 413
INNER JOIN 376
InnerText 523
Input 87
InputBox 69, 410
INSERT INTO 370
InsertLines 629, 633
InStr 49
Instr 53, 168
Sandini Bib
756 Stichwortverzeichnis
InStrRev 51
Int 103
Integer 45
Internet
aufrufen 565
Internet Explorer
aufrufen 98
InternetGetConnectedState 149
Internetverbindung
berprfen 149
INTO 380
IsArray 112
IsBroken 609
IsLoaded 179, 426, 530
IsNull 550, 575, 666
IsNumeric 111
IsObject 113
ItemData 445
ItemsSelected 448, 449
J
Join 54
K
Kalender
erstellen 30
Kalendersteuerelement
programmieren 470
Kalenderwoche
ermitteln 26
Kennwort
festlegen 581
KeyPress 439
Kill 77, 80, 91, 616
Kleinbuchstaben
wandeln 56
Kombinationsfeld
editieren 457
fllen 452, 456
Kontakt
hinzufgen 656
speichern 653
Kontaktdaten
importieren 653
bertragen 649
Kontextmen
deaktivieren 563
Kontrollkstchen
auswerten 460
initialisieren 462
programmieren 460
Kundenabfrage
durchfhren 396
Kurze Pfadnamen
ermitteln 141
L
Labels 217
Ladenhter
ermitteln 303
Lagerbestand
erhhen 560
ermitteln 301
Lagerbestandsdurchschnitt
errechnen 305
LAST 383
Last 304
LastName 649, 653
Laufwerke
auslesen 231
Laufwerksbuchstaben
abfragen 233
Laufwerkseigenschaften
auslesen 233
Laufwerksname
abfragen 234
Laufwerkswechsel
durchfhren 72
LCase 56
Leerzeichen
auffllen 63
entfernen 69
Left 53, 58, 247, 439
Leisten
identifizieren 239
Len 60, 169
Lesezeichen
setzen (ADO) 337
Letzte nderung
festhalten 552
Letzten Datensatz
einstellen 556
Letzten Satz
auslesen 538
Lieferantenabfrage
durchfhren 398
Liefertermin
errechnen 25
Sandini Bib
Stichwortverzeichnis 757
LIKE 374
Like 169
LimitToList 458
Line Input 86, 89, 719
ListCount 446, 448, 534, 696
Listenfeld
auslesen (mehrspaltig) 451
fllen 442, 533
fllen (mehrspaltig) 450
programmieren 442
Listenfeldauswahl
verarbeiten 445
Listenfeldeintrag
demarkieren 449
lschen 446, 447
markieren 449
zhlen 446
ListIndex 445, 447, 452, 681, 698
ListRows 454
Location 658
Locked 435
LockType 588
Lschabfrage
durchfhren 372
Lschkriterium
festlegen 372
Lschrckfrage
einholen 408
LookIn 238, 444, 464, 480, 484, 669, 711
M
Mailadressen
auslesen 646
berprfen 50
MainWindow 611
Makro
auflisten 626
beenden 80
einfgen 628
exportieren 634
lschen 616
Makrocheck
durchfhren 618
Markierung
festlegen (Textfeld) 432
MAX 383
Max 304, 475, 488
Maximize 205
mciSendString 124
MDE-Format
erstellen 582
Media-Player-Steuerelement
einsetzen 479
Mehrfachauswahl
zulassen 412
Mehrfachindex
hinzufgen 386
lschen 386
Men
aktivieren 263
auslesen 261
deaktivieren 263
einfgen 256
lschen 259
Menbefehle
aktivieren 265
ausfhren 201
auslesen 262
deaktivieren 265
einfgen 259
gruppieren 261
Menleiste
zurcksetzen 258
Mid 53, 59, 121, 169
MIN 383
Min 304, 475, 488
Minimalwerte
ermitteln (ADO) 300
ermitteln (DAO) 307
Minimize 205
Minute 40
umrechnen 152
MkDir 75, 129
Mod 505
Mode 216
Modul
auflisten 177
drucken 615
einfgen 611
lschen 612, 614
Modulcheck
durchfhren 614
Monatsletzten
ermitteln 174
Monatsnamen
ermitteln 41
Month 33, 42, 154, 175, 454, 471
MonthLength 471
Sandini Bib
758 Stichwortverzeichnis
MonthName 41
Monthname 454
MoveFile 221
MoveFirst 546
MoveNext 286, 294, 319, 328, 340, 652, 675
MoveSize 205
MsgBox 407, 458, 547
Muss-Felder
definieren 549
N
Nachkommastellen
entfernen 116
Name 36, 52, 81, 179, 181, 187, 240, 348,
419, 506, 512, 606
Navigate 476, 567
NavigationButtons 430
Navigationsschaltflchen
ausblenden 428
Neuanlage
verhindern 551
New 482
NewCurrentDatabase 357
NewPassword 590
NewRecord 540, 542, 544, 552
NewSearch 480, 484
NextDay 471
NextMonth 471
NextWeek 471
NextYear 471
NoMatch 316, 341, 656
Normalzeit
umwandeln 153
Nothing 282, 353, 394, 657
NotInList 458
Notizblock
aufrufen 96
Now 93, 236, 553
Number 190
NumericScale 352
Numerische Ziffern
zhlen 168
O
Object 649
Objekte
drucken 194
exportieren 192
kopieren 190
lschen 192
umbenennen 189
versenden 196
Objektstatus
erkennen 162
Office-Assistenten
einsetzen 215
Office-Chart Steuerelement
einsetzen 481
OldValue 433, 551
On Error 77, 415
On Error GoTo 190
On Error Resume Next 247
OnAction 252
Open 85, 89, 90, 162, 276, 277, 477, 533,
550, 588, 674, 679, 712, 713, 719
OpenClipboard 143
OpenDataAccessPage 521
OpenDatabase 590
OpenForm 200, 423, 620
OpenProcess 127
OpenQuery 365, 366, 461
OpenRecordSet 281, 290, 328, 666
OpenReport 415, 493
OpenTable 114, 188, 267
OpenText 616
OpenTextFile 235
Optionsfelder
programmieren 462
OR 317
ORDER BY 280, 290, 338
Ordner
listen 229
Ordnerexistenz
prfen 227
Ordnergre
ermitteln 228
Outlook-Postfach
ansteuern 476
Outlook-Status
prfen 640
OutputTo 192, 273, 500, 637, 675, 716
P
Parameterabfragen
erstellen (ADOX) 399
erstellen (DAO) 402
PARAMETERS 400
ParentCatalog 353
Sandini Bib
Stichwortverzeichnis 759
Path 181, 681
Pfadname
ermitteln 51
Picture 446
Piepston
erzeugen 145
Port 185
Positionen
auslesen 165
Posteingangsordner
anzeigen 642
PowerPoint-Dateien
suchen 710
PowerPoint-Status
abfragen 708
Precision 353
Preisabfrage
durchfhren 403
PreviousDay 472
PreviousMonth 472
PreviousWeek 472
PreviousYear 472
Print 89, 550, 714
Printers 185
PrintOut 194, 495, 616
ProcCountLines 617, 621
ProcOfLine 627
ProcStartLine 617, 619
Properties 353, 587
Properties-Auflistung 357
Protection 253
Provider 276, 312, 587
Punkte
entfernen 114
Put 90, 92
Q
QBColor 503, 563, 568
Quellcode
schtzen 581
QueryDef 393
QuickInfo
anzeigen 576
definieren 540
hinzufgen 435
Quit 184, 486, 697
R
Randomize 109
Rate 106
ReceivedTime 664
Rechnungsflligkeiten
berwachen 536
RecordCount 328, 332, 530, 538, 542
RecordSelectors 430
RecordSet 280, 286
RecordsetClone 538, 542, 546, 573
RecordSource 512, 516, 538, 546
Reference 213, 608
References 608, 609
RefreshDataBaseWindow 389
RefreshLink 363
RelatedColumn 353
ReminderMinutesBeforeStart 658, 661
ReminderPlaySound 659, 661
ReminderSet 659, 661
ReminderSoundFile 661
Remove 606, 613
RemoveDirectory 130
RemoveItem 447, 448
Rename 189, 499
Replace 62, 625
ReplaceLine 626
Report 512
Report_Open 525
Rept 707
RequiredAttendees 658
Reset 93, 258
Restore 206
RGB 427, 431, 503, 692
Right 61
RmDir 76
Rmische Zahlen
wandeln 170
RootFolder 234
Round 104, 234
RowSource 457, 458
RowSourceTyp 457
RTrim 164
Run 679, 707
RunCommand 201, 415, 468, 494
RunSQL 204, 365, 368
Sandini Bib
760 Stichwortverzeichnis
S
Sammel-Mails
versenden 665
Save 653, 666
SaveAsFile 668
Schaltflche
anpassen 562
einfgen 466
programmieren 464
Schaltjahr
berprfen 154
Schlieen
verhindern 534
Schriftfarbe
anpassen 430
SearchSubFolders 238, 444, 464, 480, 484,
669, 711
SearchTreeForFile 146
Second 40
SELECT 279, 286, 298
SELECT * 380
Select Case 59, 71, 166, 174, 351, 509, 548
SELECT DISTINCT 286
SELECT INTO 375
SELECT TOP 5 301
Selected 449, 534
SelectedItems 414
Selection 674
SelLenght 432
SelStart 432
SenderName 664
SendObject 196, 642, 646
Set 187, 252, 321, 341, 353, 482, 624, 636,
671
SetAttr 94
SetCurrentDirectoryA 139
SetData 483
SetFocus 433, 528, 548, 611
SetPermissions 597
SetSelection 622
SetWarnings 369
Sgn 100
SHBrowseForFolder 131
Shell 95, 128
ShellAbout 138
ShellExecute 126, 565, 644
SHGetPathFromIDList 131
Show 218, 414, 682
ShowAllRecords 189
ShowDateSelectors 471
ShowToolbar 203, 242
Sicherheitscheck
durchfhren 529
Size 228, 238
SizeTofit 516
Sleep 129, 669
Slider-Steuerelement
einsetzen 486
SLN 102
sndPlaySound32 144
Sonderzeichen
entfernen 167
Sort 293, 482
SortOrder 353
Soundkarte
berprfen 144
Sounds
ausgeben 144
Space 64
SpecialEffect 565, 699
Speicherrckfrage
einholen 547
Spezialeffekt
einsetzen 563
Spinbutton-Steuerelement
einsetzen 488
Split 54
SpreadSheet-Steuerelement
einsetzen 484
SQL-Anweisungen
absetzen 204
SQL-Statements
absetzen (ADO) 285
Stammverzeichnis
abfragen 234
Standarddialoge
anzeigen 411
Standardmeldungen
unterdrcken 369
Standardverzeichnis
festlegen 139
setzen 71
Start 658
StartDate 660
STDDEV 383
StDev 304
Step 30
Sandini Bib
Stichwortverzeichnis 761
Steuerelemente
identifizieren 420
lschen 620
Str 64, 117
StrComp 65
StrConv 56
String 67
StrReverse 67
Stckzahl
errechnen 151
Stunden
umrechnen 152
Stundengeschwindigkeit
errechnen 154
Subject 658, 660, 664, 666
SUM 383
Sum 304
Switch 68
Symbolbeschriftung
ermitteln 244
Symbolleiste
ausblenden 203, 241
einblenden 203, 241
erstellen 247
lschen 247
Symbolleisten
schtzen 252
Symbolleisten-IDs
ermitteln 243
Symbolschaltflche 248, 251, 254
aktivieren 246
Aussehen festlegen 248
deaktivieren 246
Symbolschaltflchen 249
Symboltyp
festlegen 216
SysCmd 182
Systemdatum
abrufen 24
T
TabDef 360
Tabelle
aktualisieren 362
auflisten 178
entfernen 391
erstellen 354, 388
konvertieren 273
lschen 359
ffnen 114, 267, 277, 281
programmieren 267
schlieen 239
transferieren 208
verknpfen 271, 357
verlinken (DAO) 361
zusammenfassen (ADO) 295
Tabellennderungsabfrage
ausfhren 386
Tabellencheck
vornehmen 113
Tabelleneigenschaften
abfragen 352
auslesen (ADOX) 349
Tabellenerstellungsabfrage
durchfhren 375
Tabellenfeld
anhngen (DAO) 359
Tabellennamen
ermitteln 347
Tabellenstrukturen
auslesen (ADOX) 350
TableDefs 114, 362
Tables 353
Tasten
abfangen 145
erkennen 569
Tastenkombinationen
einrichten 570
Temporres Verzeichnis
ermitteln 136
Termine
abfragen 657
Text
ersetzen 623
exportieren 210
importieren 210
konvertieren 142
zerlegen 54, 59
Textdatei
auslesen 88
einlesen 235
erstellen 92
importieren 718
lesen 85, 87
ffnen 85
schlieen 87
schreiben 89, 236
speichern 712
Text
vervollstndigen 67
Sandini Bib
762 Stichwortverzeichnis
Textfeld
ausblenden 437
begrenzen 438
einblenden 437
hervorheben 568
identifizieren 186
initialisieren 441
leeren 701
prfen 442
schtzen 435
sperren 435
berwachen 439
Textlnge
feststellen 60
Textstream 235
Time 24, 440
TimerInterval 531
TimeValue 32
Title 414
Today 472
ToolTipText 249
TOP 300, 307
Top 247
TotalSize 234
TransferDatabase 206, 272
TransferSpreadsheet 208, 687
TransferText 210, 714
TreeView 478
TreeView-Steuerelement
einsetzen 477
Trim 70
Type 240, 348, 351, 352, 451, 610, 614, 628
TypeName 187, 441, 701
TypeText 674, 684
U
UBound 55, 113
UCase 55, 56, 540
Uhrzeit
abrufen 24
Umgebungsvariablen
auslesen 83
Umlaute
tauschen 63
Unikatsliste
erstellen (ADO) 286
erstellen (DAO) 289
UNION 295, 380
UNIQUE 390
UnRead 664
UPDATE 368
Update 318, 336, 544, 553, 664, 719
URLs
auslesen 669
UserForm
einfgen 690
Users 594
V
Val 117
Value 462, 470, 475, 487, 488, 541
Value List 457
VAR 383
Variable Feldanpassung
vornehmen 558
Variablen Titel
einsetzen 539
VBComponent 599
VBE
aufrufen 610
VBE-Bibliothek
einbinden 601
VBE-Programmierung 599
VB-Komponenten
identifizieren 609
VBProjects 600
Vergleichsabfrage
durchfhren 376
Verknpfte Tabellen
abfragen (ADO) 296
abfragen (DAO) 298
Verknpfungsadresse
anpassen 363
Version 58, 186
Verweise
auslesen 607
Verzeichnis
anlegen 75, 226
auslesen 72, 73
entfernen 76
erstellen 129
lschen 130, 226
berprfen 158
Verzeichnisbaum
anzeigen 131
Visible 242, 247, 437, 510, 527, 539, 559,
611, 674, 692, 696
VolumneName 234
Sandini Bib
Stichwortverzeichnis 763
Vorzeichen
auslesen 100
W
Whrungsumrechnung
durchfhren (ADO) 321
durchfhren (DAO) 323
Warnmeldung
anzeigen 407
WaveOutGetNumDevs 144
Webbrowser
programmieren 475
WeekDay 42
WeekDayName 42
WHERE 286, 298, 372, 373, 393
Window 611
Windows 599
Windows Explorer
ffnen 97
Windows-Infobildschirm
anzeigen 138
Windows-Systemverzeichnis
ermitteln 135
Windows-Version
ermitteln 133
WindowWidth 558
With 260
Wochennummer
ausgeben 27
Wochentag
ermitteln 42
Word-Dokument
ffnen 679
schlieen 679
Word-Makro
starten 678
Word-Status
abfragen 671
WorksheetFunction 172
Write 92
Y
Year 33, 175, 471
Z
Zahlen
entfernen 46
extrahieren 117
runden 104
wandeln 47
Zahlungsart
definieren 47
Zeichen
auslesen 87
ersetzen 62
Zeichenfolgen
spiegeln 67
umwandeln 23
vergleichen 49, 65
Zeile
lesen 86
Zeitverzgerung
einstellen 40
Zeitwerte
erkennen 32
umsetzen 32
Zinssatz
errechnen 106
Zufallsbuchstaben
erzeugen 110
Zufallszahlen
erzeugen 109
Zugangsverwaltung
aufsetzen 525
Zugriff
dokumentieren 532
Zugriffsmodus
feststellen 93
Zuletzt genderten Satz
einstellen 556
Zuordnungen
treffen 68
Zwischenablage
lschen 143
Sandini Bib
In Zusammenarbeit mit den Top-Autoren von Addison-Wesley, absoluten
Spezialisten ihres Fachgebiets, bieten wir Ihnen stndig hochinteressante,
brandaktuelle Informationen und kompetente Lsungen zu nahezu allen
IT-Themen.
[Link]
wenn Sie mehr wissen wollen ... [Link]
[Link], Partner von Addison-Wesley, ist unsere Antwort auf alle Fragen
der IT-Branche.
... aktuelles Fachwissen rund,
um die Uhr zum Probelesen,
Downloaden oder auch auf Papier.
Sandini Bib
Copyright
Daten, Texte, Design und Grafiken dieses eBooks, sowie die eventuell angebotenen
eBook-Zusatzdaten sind urheberrechtlich geschtzt.
Dieses eBook stellen wir lediglich als Einzelplatz-Lizenz zur Verfgung!
Jede andere Verwendung dieses eBooks oder zugehriger Materialien und
Informationen, einschliesslich der Reproduktion, der Weitergabe, des Weitervertriebs,
der Platzierung im Internet, in Intranets, in Extranets anderen Websites, der
Vernderung, des Weiterverkaufs und der Verffentlichung bedarf der schriftlichen
Genehmigung des Verlags.
Bei Fragen zu diesem Thema wenden Sie sich bitte an:
[Link]
Zusatzdaten
Mglicherweise liegt dem gedruckten Buch eine CD-ROM mit Zusatzdaten bei. Die
Zurverfgungstellung dieser Daten auf der Website ist eine freiwillige Leistung des
Verlags. Der Rechtsweg ist ausgeschlossen.
Hinweis
Dieses und andere eBooks knnen Sie rund um die Uhr
und legal auf unserer Website
([Link]
herunterladen