Date post: | 06-Feb-2018 |
Category: |
Documents |
Upload: | phungkhuong |
View: | 248 times |
Download: | 6 times |
LeseprobeDieses Buch beantwortet alle Ihre Fragen zur VBA-Programmierung in Access: Abfragen, Formulare, Steuerelemente, API-Funktionen u. v. m. In diesem Buchauszug machen Sie sich mit der objektorien-tierten Programmierung vertraut und erfahren, wie Sie mit API- Abrufen typische Aufgaben in Access erledigen können.
Bernd Held
VBA mit Access – Das umfassende Handbuch800 Seiten, gebunden, 2. Auflage 2016 49,90 Euro, ISBN 978-3-8362-4286-8
www.rheinwerk-verlag.de/4209
»Ein Streifzug in die Welt der Objekte« »API-Funktionen einsetzen«
Inhaltsverzeichnis
Index
Der Autor
Leseprobe weiterempfehlen
Wissen, wie’s geht.
195
4
Kapitel 4
Ein Streifzug in die Welt der Objekte
In diesem Kapitel werde ich die wichtigsten und interessantesten
Objekte von Access und VBA behandeln. Jedes Objekt in Access hat
bestimmte Methoden und Eigenschaften, die genau für dieses Objekt
ausgeführt werden können.
Unter anderem werde ich in diesem Kapitel folgende Fragen beantworten:
� Wie zeige ich Informationen zu meiner Datenbank an?
� Wie beende ich Datenbanken sowie die Applikation?
� Wie greife ich mit Funktionen auf Tabellen zu?
� Welche Drucker sind installiert, und wie heißen sie?
� Welche Tabellen, Berichte und Formulare befinden sich in der Datenbank?
� Wie rufe ich Berichte und Formulare in Access auf?
� Wie führe ich einen Datentransfer nach Excel durch?
� Welche Möglichkeiten habe ich, auf integrierte Dialoge in Access zuzugreifen?
In der Entwicklungsumgebung sehen Sie die Methoden und Eigenschaften sofort,
wenn Sie ein Objekt eingeben und danach einen Punkt setzen. Dann erscheint näm-
lich prompt ein Kontextmenü, das die zur Verfügung stehenden Methoden und
Eigenschaften anzeigt.
Alle Prozeduren und Funktionen aus diesem Kapitel finden Sie in den Materialien
zum Buch im Verzeichnis Kap04 unter dem Namen Objekte.accdb.
4.1 Das »Application«-Objekt
Das Application-Objekt steht auf oberster Ebene. Es bezieht sich auf die aktive Micro-
soft-Access-Anwendung und enthält alle darunterliegenden Objekte, wie Formulare,
Reports, Drucker und Bildschirm.
4286-8.book Seite 195 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
196
4.1.1 Datenbankinformationen erhalten
Anhand des Application-Objekts können Sie einiges über Ihre Access-Umgebung
erfahren, indem Sie verschiedene Methoden anwenden. Listing 4.1 gibt den Namen
der Datenbank wieder.
Sub AccessDBErmitteln()
MsgBox "Die aktuelle Datenbank heißt: " & _Application.CurrentProject.Name
End Sub
Listing 4.1 Den Namen der Datenbank ermitteln
Die Eigenschaft Name gibt den Namen des Objekts CurrentProject bekannt.
Möchten Sie nicht nur den Namen der aktuell geöffneten Datenbank angezeigt be-
kommen, sondern auch den kompletten Speicherpfad, so starten Sie die Prozedur
aus Listing 4.2:
Sub AccessDBMitPfadErmitteln()
MsgBox "Die aktuelle Datenbank heißt: " & _Application.CurrentDb.Name
End Sub
Listing 4.2 Namen und Speicherort der Datenbank ermitteln (Variante 1)
Die CurrentDb-Methode gibt eine Objektvariable des Typs Database zurück, die der
Datenbank entspricht, die momentan im Microsoft-Access-Fenster geöffnet ist.
Alternativ zu der letzten Prozedur können Sie Listing 4.3 einsetzen, um den Pfad der
aktuell geöffneten Datenbank auszugeben:
Sub AccessDBMitPfadErmitteln2()
MsgBox "Die aktuelle Datenbank heißt: " & _Application.CurrentProject.Path
End Sub
Listing 4.3 Namen und Speicherort der Datenbank ermitteln (Variante 2)
Über die Eigenschaft Path, die Sie auf das Objekt CurrentProject anwenden, ermitteln
Sie den Pfad der aktuell geöffneten Datenbank.
4286-8.book Seite 196 Dienstag, 6. Dezember 2016 9:52 09
4.1 Das »Application«-Objekt
197
4
4.1.2 Aktuellen Anwendernamen ermitteln
Mit der Methode CurrentUser geben Sie den Namen des aktuellen Benutzers der
Datenbank zurück.
Sub AktuellerUser()
MsgBox "Der aktuelle Benutzer ist: " & _Application.CurrentUser, vbInformation
End Sub
Listing 4.4 Den aktuellen Benutzer der Datenbank abfragen
Möchten Sie hingegen den aktuell an Windows angemeldeten User abfragen, dann
verwenden Sie folgende Zeile:
MsgBox environ("username")
4.1.3 Installierte Drucker ermitteln
Um zu ermitteln, welche Drucker Sie einsetzen und an welchem Anschluss sie hän-
gen, können Sie das neue Auflistungsobjekt Printers nutzen, das Sie im Zusammen-
spiel mit dem Objekt Application einsetzen. Den dafür notwendigen Code sehen Sie
in Listing 4.5:
Sub DruckerErmitteln()Dim prtDrucker As PrinterDim strDrucker As String
For Each prtDrucker In Application.PrintersWith prtDruckerstrDrucker = strDrucker & vbLf & "Druckername: " & .DeviceName & vbCr _
& "Anschluss: " & .PortEnd With
Next prtDruckerDebug.Print strDrucker
End Sub
Listing 4.5 Alle installierten Drucker auslesen
Die Eigenschaft DeviceName zeigt den Druckernamen an. Über die Eigenschaft Port
zeigen Sie den Anschluss an, an dem Ihr Drucker hängt.
4286-8.book Seite 197 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
198
Abbildung 4.1 Alle im System bekannten Drucker werden ermittelt und ausgegeben.
4.1.4 Datenbank schließen
Soll die aktuelle Datenbank geschlossen werden, dann können Sie für diese Aufgabe
die Methode CloseCurrentDatabase einsetzen.
Sub AktuelleDBschließen()
Application.CloseCurrentDatabase
End Sub
Listing 4.6 Access-Datenbank schließen
4.1.5 Access beenden
Die Methode Quit dient zum Beenden von Access. Sie können dabei bestimmen, ob
Änderungen angenommen oder verworfen werden sollen. Bei der Prozedur aus Lis-
ting 4.7 wird Access geschlossen. Dabei werden Sie durch eine Meldung aufgefordert,
anzugeben, wie Sie mit den Änderungen umgehen möchten.
Sub AccessBeenden()
Application.Quit acQuitPrompt
End Sub
Listing 4.7 Access beenden
4286-8.book Seite 198 Dienstag, 6. Dezember 2016 9:52 09
4.1 Das »Application«-Objekt
199
4
Um zu bestimmen, was mit den Änderungen an der Datenbank beim Beenden des
Programms geschehen soll, können Sie die acQuit-Option einsetzen. Dabei stehen
Ihnen folgende Konstanten zur Verfügung:
� acQuitPrompt: Beim Schließen Ihrer Datenbank wird ein Meldungsfenster ange-
zeigt, in dem Sie selbst entscheiden müssen, ob Sie Änderungen an der Datenbank
akzeptieren oder verwerfen möchten.
� acQuitSaveAll: Bei dieser Standardeinstellung werden alle geänderten Daten in
der Datenbank automatisch gespeichert, ohne dass eine Rückfrage erfolgt.
� acQuitSaveNone: Bei Verwendung dieser Konstanten wird die Access-Datenbank
geschlossen, wobei keine Änderungen an den Daten übernommen werden.
4.1.6 Aktuelle Access-Version ausgeben
Über die Eigenschaft Version des Objekts Application können Sie herausfinden, wel-
che Access-Version bei Ihnen oder beim Kunden im Einsatz ist.
Die Prozedur aus Listing 4.8 meldet Ihnen die aktuell installierte Access-Version.
Sub AccessVersionAusgeben()MsgBox "Sie arbeiten mit der Access-Version: " _& Application.Version
End Sub
Listing 4.8 Access-Version ermitteln
4.1.7 Formular anlegen
Über das Objekt Application und die Methode CreateForm können Sie ein Formular
anlegen und dabei einen Bezug zu einer in der Datenbank vorhandenen Tabelle her-
stellen. Des Weiteren ist es dabei möglich, das neue Formular auf Basis eines bereits
vorhandenen herzustellen.
Sub NeuesFormularAnlegen()Dim frm As Form
Set frm = Application.CreateForm _(Application.CurrentDb.Name, "Artikel")
DoCmd.Restorefrm.RecordSource = "Artikel"
End Sub
Listing 4.9 Ein neues Formular erstellen
4286-8.book Seite 199 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
200
Die CreateForm-Methode erstellt ein Formular und gibt ein Form-Objekt zurück. Dabei
lautet die Syntax dieser Methode:
CreateForm([Datenbank[, Formularvorlage]])
Im Argument Datenbank geben Sie den Namen der Datenbank an, die die Formular-
vorlage enthält, mit der Sie Ihr Formular erstellen wollen. Wenn Sie die aktuelle
Datenbank verwenden möchten, geben Sie dieses Argument nicht an bzw. ermitteln
über die Anweisung Application.CurrentDb.Name den Namen der aktiven Datenbank.
Abbildung 4.2 Ein neues Formular wurde auf Basis einer Vorlage erstellt.
Im Argument Formularvorlage geben Sie den Namen des Formulars an, das Sie als
Vorlage zum Erstellen eines neuen Formulars verwenden möchten. Wenn Sie dieses
Argument nicht angeben, legt Microsoft Access dem neuen Formular die Vorlage
zugrunde, die auf der Registerkarte Formulare � Berichte des Dialogfelds Optio-
nen angegeben ist. Sie rufen dieses Dialogfeld auf, indem Sie im Menü Extras auf
Optionen klicken. Bei den Versionen Access 2007, Access 2013 und Access 2016 fin-
den Sie diese Einstellungen bei den Optionen unter Object-Designer im Abschnitt
Entwurfsansicht für Formular/Berichte.
Mit der Methode Restore stellen Sie ein maximiertes oder minimiertes Fenster in sei-
ner vorherigen Größe wieder her. Über die Eigenschaft RecordSource geben Sie an,
woher das neue Formular die Daten nehmen soll, mit denen es verknüpft wird.
4286-8.book Seite 200 Dienstag, 6. Dezember 2016 9:52 09
4.1 Das »Application«-Objekt
201
4
4.1.8 Durchschnitt errechnen
Ebenfalls direkt unterhalb des Application-Objekts liegt die Funktion DAvg. Mit dieser
Funktion ermitteln Sie den Mittelwert beispielsweise aus einer Tabelle. Die Prozedur
aus Listing 4.10 berechnet aus allen Frachtkosten der Tabelle Bestellungen den Durch-
schnitt und gibt ihn auf dem Bildschirm aus.
Sub MittelwertBerechnen()
MsgBox "Die durchschnittlichen Frachtkosten liegen bei" _& vbLf & Format(DAvg("[Frachtkosten]", _"Bestellungen"), "0.00"), vbInformation
End Sub
Listing 4.10 Den Durchschnitt eines Tabellenfeldes berechnen
Die Funktion Format wird hier eingesetzt, um die Ausgabe in das gewünschte Format
zu bringen.
4.1.9 Summen ermitteln
Die Funktion DSum liegt auch direkt unterhalb des Application-Objekts. Mit ihrer Hilfe
ermitteln Sie die Summe eines Feldes beispielsweise aus einer Tabelle. Die folgende
Prozedur ermittelt aus allen Frachtkosten der Tabelle Bestellungen die Summe und
gibt diese auf dem Bildschirm aus.
Sub SummeBerechnen()
MsgBox "Die Summe der Frachtkosten beträgt" _& vbLf & Format(DSum("[Frachtkosten]", _"Bestellungen"), "0,000.00"), vbInformation
End Sub
Listing 4.11 Die Summe eines Tabellenfeldes berechnen
Abbildung 4.3 Die Summe aller Frachtkosten
aus einer geschlossenen Tabelle ermitteln
4286-8.book Seite 201 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
202
4.1.10 Datensätze zählen
Mit der Funktion DCount ermitteln Sie die Anzahl der Datensätze beispielsweise einer
Tabelle. Die Prozedur aus Listing 4.12 zählt aus der Tabelle Bestellungen die Daten-
sätze und gibt die Anzahl auf dem Bildschirm aus.
Sub SätzeZählen()
MsgBox "Die Anzahl der Datensätze beträgt" _& vbLf & DCount("*", "Bestellungen"), vbInformation
End Sub
Listing 4.12 Die Anzahl aller Datensätze einer Tabelle ermitteln
Sollen die Sätze nur bedingt gezählt werden, dann starten Sie die Prozedur aus Listing
4.13. Dort werden nur Sätze gezählt, bei denen die Frachtkosten bei mehr als 100 Euro
liegen.
Sub SätzeBedingtZählen()
MsgBox "Die Anzahl der Datensätze beträgt" _& vbLf & DCount("Frachtkosten", "Bestellungen", "Frachtkosten>100"), _vbInformation
End Sub
Listing 4.13 Ein zusätzliches Kriterium für eine bedingte Zählung angeben
Das dritte Argument entspricht dem Kriterium, auf Basis dessen gezählt werden soll.
4.1.11 Minimal- und Maximalwerte ermitteln
Mit der Funktionen DMax und DMin ermitteln Sie aus einer Tabelle für ein bestimmtes
Feld den größten bzw. den kleinsten Wert. Die Prozedur aus Listing 4.14 findet in allen
Frachtkosten in der Tabelle Bestellungen den größten bzw. den kleinsten Wert und
gibt ihn auf dem Bildschirm aus.
Sub MinUndMaxBerechnen()
MsgBox "Die höchsten Frachtkosten betragen" & _vbLf & Format(DMax("[Frachtkosten]", _"Bestellungen"), _"0,000.00") & vbLf & vbLf & _"Die niedrigsten Frachtkosten betragen" & _
4286-8.book Seite 202 Dienstag, 6. Dezember 2016 9:52 09
4.2 Das Objekt »AccessObject«
203
4
vbLf & Format(DMin("[Frachtkosten]", _"Bestellungen"), "0.00"), vbInformation
End Sub
Listing 4.14 Die Ausreißerwerte einer Tabelle ermitteln
Abbildung 4.4 Die Extremwerte bei den Frachtkosten ermitteln
4.2 Das Objekt »AccessObject«
Mithilfe des AccessObject-Objekts können Sie auf Auflistungsobjekte zugreifen und
diese auswerten. Dabei stehen Ihnen die Auflistungsobjekte aus Tabelle 4.1 zur Verfü-
gung.
AccessObject Auflistung Enthält Informationen über
Datenzugriffsseite AllDataAccessPages gespeicherte Datenzugriffsseiten
(wird von Access 2007 nicht mehr
unterstützt)
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
Tabelle 4.1 Alle AccessObjects im Überblick
4286-8.book Seite 203 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
204
Sehen Sie nun anhand einiger Beispiele, wie Sie diese Auflistungsobjekte einsetzen
können.
Im Beispiel aus Listing 4.15 lesen Sie die Namen aller Module aus, die sich in Ihrer
aktuellen Datenbank befinden:
Sub AlleModuleAuflisten()Dim obj As AccessObjectDim dbs As Object
Set dbs = Application.CurrentProjectFor Each obj In dbs.AllModulesDebug.Print obj.Name
Next obj
End Sub
Listing 4.15 Alle Module in der Datenbank auflisten
Über die Eigenschaft Name lassen Sie sich die Namen der einzelnen Module ausgeben,
indem Sie das Auflistungsobjekt AllModules einsetzen.
So können Sie nach und nach jedes einzelne Access-Objekt abfragen. Die Prozedur
aus Listing 4.16 listet z. B. alle Tabellen der Datenbank auf:
Sub TabellenAuflisten()Dim obj As AccessObjectDim dbs As Object
Set dbs = Application.CurrentDataFor Each obj In dbs.AllTablesDebug.Print obj.Name
Next obj
End Sub
Listing 4.16 Alle Tabellen der Datenbank auflisten
Gespeicherte Prozedur AllStoredProcedures gespeicherte Prozeduren
Tabelle AllTables gespeicherte Tabellen
Sicht AllViews gespeicherte Ansichten
AccessObject Auflistung Enthält Informationen über
Tabelle 4.1 Alle AccessObjects im Überblick (Forts.)
4286-8.book Seite 204 Dienstag, 6. Dezember 2016 9:52 09
4.2 Das Objekt »AccessObject«
205
4
Abbildung 4.5 Alle Module der Datenbank im Direktfenster ausgeben
Im Auflistungsobjekt AllTables sind alle Tabellen der Datenbank verzeichnet. Wollen
Sie die Abfrage aus Listing 4.16 auf alle geöffneten Tabellen beschränken, setzen Sie
die Prozedur aus Listing 4.17 ein:
Sub TabelleGeöffnet()Dim obj As AccessObjectDim dbs As Object
Set dbs = Application.CurrentData
For Each obj In dbs.AllTablesIf obj.IsLoaded = True ThenDebug.Print "Name: " & obj.NameDebug.Print "Erstellungsdatum: " & obj.DateCreatedDebug.Print "Änderungsdatum: " & obj.DateModified & vblf
End IfNext obj
End Sub
Listing 4.17 Alle geöffneten Tabellen der Datenbank auflisten
Über die Eigenschaft IsLoaded ermitteln Sie, ob die Tabelle momentan geladen ist.
Über die Eigenschaft Name finden Sie den Namen der Tabelle heraus. Die Eigenschaf-
ten DateCreated sowie DateModified geben Auskunft über das Erstellungs- bzw. das
letzte Änderungsdatum der Tabelle.
4286-8.book Seite 205 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
206
Abbildung 4.6 Den Namen, das Erstellungs- sowie das Änderungsdatum
der geöffneten Tabellen herausfinden
Darüber hinaus können Sie sich mit dem AccessObject alle Abfragen der Datenbank
anzeigen lassen. Die Prozedur für diesen Zweck lautet:
Sub AlleAbfragenAuflisten()Dim obj As AccessObjectDim dbs As Object
Set dbs = Application.CurrentData
For Each obj In dbs.AllQueriesDebug.Print obj.Name
Next obj
End Sub
Listing 4.18 Alle Abfragen einer Datenbank auflisten
Mithilfe des Auflistungsobjekts AllQueries ermitteln Sie alle Abfragen der Datenbank.
Der Vollständigkeit halber ist hier noch eine Prozedur zum Auflisten aller Formulare
einer Datenbank:
Sub AlleFormulareAuflisten()Dim obj As AccessObjectDim dbs As Object
Set dbs = Application.CurrentProjectFor Each obj In dbs.AllFormsDebug.Print obj.Name
Next obj
End Sub
Listing 4.19 Alle Formulare einer Datenbank auflisten
4286-8.book Seite 206 Dienstag, 6. Dezember 2016 9:52 09
4.3 Das Objekt »CodeData«
207
4
Mit dem Auflistungsobjekt AllForms ermitteln Sie alle Formulare in Ihrer Datenbank.
Wie aber gehen Sie vor, wenn Sie prüfen möchten, ob ein bestimmtes Formular in
Ihrer Datenbank existiert? Um diese Aufgabe zu lösen, schreiben Sie eine Funktion
wie die in Listing 4.20:
Function FormularPrüfer(str) As StringDim obj As AccessObject
For Each obj In CurrentProject.AllFormsIf obj.Name = str Then str = obj.Name
NextFormularPrüfer = str
End Function
Listing 4.20 Ist ein bestimmtes Formular in der Datenbank vorhanden?
Über das Auflistungsobjekt AllForms durchlaufen Sie alle Formulare in Ihrer Daten-
bank. Prüfen Sie, ob sich das gesuchte Formular innerhalb der For Each-Schleife befin-
det. Wenn ja, rufen Sie wie in Listing 4.21 das Formular über die Methode OpenForm auf:
Sub FormularDa()On Error GoTo FehlerIf FormularPrüfer("Personal") <> "" _Then DoCmd.OpenForm "Personal"
Exit Sub
Fehler:MsgBox "Dieses Formular gibt es nicht!"
End Sub
Listing 4.21 Formular öffnen nach Prüfung
Gerade haben Sie das Objekt DoCmd verwendet. Sie sehen etwas später in diesem Kapi-
tel noch einige Beispiele für den Einsatz dieses Objekts.
4.3 Das Objekt »CodeData«
Das CodeData-Objekt verweist auf Objekte, die innerhalb der von der Serveranwen-
dung (Jet oder SQL) verwalteten Code-Datenbank gespeichert sind.
Das CodeData-Objekt besitzt mehrere Auflistungen, die bestimmte Objekttypen inner-
halb der Code-Datenbank enthalten.
4286-8.book Seite 207 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
208
Wie schon beim Objekt AccessObject gezeigt, können Sie auch mithilfe des Objekts
CodeData alle Tabellen, seien sie nun geöffnet oder nicht, im Direktbereich der Ent-
wicklungsumgebung ausgeben.
Sub TabellenAuflisten2()Dim obj As AccessObject
For Each obj In Application.CodeData.AllTablesDebug.Print obj.Name
Next obj
End Sub
Listing 4.22 Alle Tabellen auflisten
Neben der Auflistung AllTables existieren hier diejenigen Auflistungen, die ich
bereits beim Objekt AccessObject in Tabelle 4.1 beschrieben habe.
4.4 Das Objekt »DoCmd«
Sie können das Objekt DoCmd verwenden, um Microsoft-Access-Aktionen aus Visual
Basic heraus auszuführen. Eine Aktion führt Operationen durch, wie etwa das Schlie-
ßen von Fenstern, das Öffnen von Berichten und Formularen oder das Festlegen der
Werte von Steuerelementen.
4.4.1 Berichte aufrufen
In der Prozedur aus Listing 4.23 wird der Bericht Alphabetische Artikelliste geöffnet
und die Seite 1 zweimal gedruckt. Danach wird der Bericht wieder geschlossen.
Sub BerichtÖffnenUndDrucken()DoCmd.Echo FalseDoCmd.OpenReport _"Alphabetische Artikelliste", acViewPreview
DoCmd.PrintOut acPages, 1, 1, , 2DoCmd.CloseDoCmd.Echo True
End Sub
Listing 4.23 Bericht öffnen, drucken und schließen
Beim Ausführen einer Prozedur in Microsoft Access werden durch Bildschirmaktua-
lisierungen oft Informationen angezeigt, die für die Funktionalität der Prozedur
4286-8.book Seite 208 Dienstag, 6. Dezember 2016 9:52 09
4.4 Das Objekt »DoCmd«
209
4
ohne Bedeutung sind. Wenn Sie das Argument Echo auf False setzen, wird die Proze-
dur ohne Bildschirmaktualisierung ausgeführt. Beim Beenden der Prozedur schaltet
Microsoft Access automatisch Echo wieder ein und aktualisiert das Fenster. Während
der Laufzeit der Prozedur ändert sich demnach die Ansicht nicht.
Mit der Methode OpenReport öffnen Sie den angegebenen Bericht. Dabei können Sie
auswählen, in welcher Ansicht der Bericht geöffnet werden soll. Zu diesem Zweck ste-
hen Ihnen einige Konstanten zur Verfügung:
� Die Konstante acViewPreview ruft die Seitenansicht des Berichts auf.
� Über die Konstante acViewDesign wechseln Sie in den Entwurfsmodus des Be-
richts.
� Die Konstante acViewNormal gibt den Bericht sofort auf dem Drucker aus.
Die Methode PrintOut führt den Drucken-Befehl aus und hat folgende Syntax:
PrintOut(Druckbereich, Von, Bis, Druckqualität, Exemplare, ExemplareSortieren)
Im Argument Druckbereich geben Sie an, was Sie genau drucken möchten. Dabei ste-
hen Ihnen folgende Konstanten zur Verfügung:
� acPages: Damit legen Sie fest, welche Seiten des Berichts Sie drucken möchten.
Wenn Sie diese Konstante verwenden, müssen Sie die Argumente Von und Bis
angeben.
� acPrintAll: Bei diesem Argument wird der gesamte Bericht gedruckt.
� acSelection: Bei dieser Konstanten wird nur der Bereich gedruckt, der gerade mar-
kiert ist.
Für das Argument Druckqualität stehen wiederum einige Konstanten zur Verfü-
gung:
� acDraft: Dies ist die Entwurfsqualität.
� acHigh: Dahinter verbirgt sich die bestmögliche Druckqualität.
� acMedium: Damit ist eine mittlere Druckqualität gemeint.
� acLow: Durch diese Konstante erreichen Sie eine niedrige Druckqualität (Konzept-
druck).
Das nächste Argument, Exemplare, sagt aus, wie viele Kopien gedruckt werden sollen.
Beim letzten Argument, ExemplareSortieren, verwenden Sie die Einstellung True, um
die Exemplare während des Druckvorgangs zu sortieren, und False, um sie nicht zu
sortieren. Wenn Sie dieses Argument nicht angeben, wird der Standardwert True ver-
wendet.
Beim Beispiel aus Listing 4.24 wird das Objekt DoCmd dazu eingesetzt, einen Bericht
aufzurufen und diesen in einem bestimmten Zoomfaktor einzustellen.
4286-8.book Seite 209 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
210
Sub BerichtAnzeigen()
DoCmd.OpenReport "Kundenetiketten", acPreviewDoCmd.MaximizeDoCmd.RunCommand acCmdZoom75
End Sub
Listing 4.24 Bericht öffnen und in einer größeren Ansicht anzeigen
Sie können die Methode Maximize verwenden, um das aktive Fenster zu vergrößern,
sodass es das Microsoft-Access-Fenster ausfüllt. Mit dieser Aktion können Sie so viel
wie möglich vom Objekt im aktiven Fenster anzeigen.
Setzen Sie die Methode RunCommand ein, um den Zoom einzustellen. Allgemein kön-
nen Sie über diese Methode nahezu alle eingebauten Symbole und Menübefehle aus-
führen. Sie führen diesen Klick auf bestimmte Symbole und Menüs demnach »wie
von Zauberhand« aus. Alles, was Sie dieser Methode noch bekannt geben müssen, ist
das Symbol bzw. der Menübefehl, der angeklickt werden soll. In Access wird das über
eine Konstante erreicht. Die Konstante für eine Ansicht von 75 % des Berichts lautet
acCmdZoom75.
Abbildung 4.7 Einen Bericht vergrößert anzeigen
4286-8.book Seite 210 Dienstag, 6. Dezember 2016 9:52 09
4.4 Das Objekt »DoCmd«
211
4
Weitere Konstanten finden Sie in der Online-Hilfe Ihrer Entwicklungsumgebung.
Setzen Sie im Quellcode die Einfügemarke auf die Methode RunCommand, und drücken
Sie die Taste (F1). In der Online-Hilfe klicken Sie dann auf den Hyperlink acCom-
mand.
4.4.2 Tabellen nach Excel exportieren
Eine weitere Einsatzmöglichkeit für das Objekt DoCmd ist der Transfer einer Access-
Tabelle in eine Excel-Arbeitsmappe. Die Prozedur für diese Aufgabe lautet:
Sub TabelleTransferieren()
DoCmd.TransferSpreadsheet acExport, _acSpreadsheetTypeExcel9, "Artikel", _Application.CurrentProject.Path & "\Artikel.xls", True
End Sub
Listing 4.25 Access-Tabelle nach Excel exportieren
Um eine Access-Datentabelle in eine Excel-Arbeitsmappe oder auch in eine Lotus-
Tabelle zu übertragen, setzen Sie die Methode TransferSpreadsheet ein.
Die Methode TransferSpreadsheet hat folgende Syntax:
TransferSpreadsheet(Transfertyp, Dateiformat, Tabellenname, Dateiname,BesitztFeldnamen, Bereich)
Im Argument Transfertyp geben Sie an, welchen Transfer Sie genau durchführen
möchten. Sie haben dabei die Auswahl zwischen dem Export (acExport), dem Import
(acImport) oder einer Verknüpfung (acLink).
Im Argument Dateiformat geben Sie an, in welche Excel-Version (bzw. Lotus-Version)
Sie die Access-Tabelle exportieren möchten.
Im darauf folgenden Argument Tabellenname geben Sie den Namen der zu exportie-
renden Access-Tabelle an. Über das Argument Dateiname geben Sie das Ziel für den
Datenexport bekannt. Dabei muss die angegebene Datenquelle nicht einmal existie-
ren. Access legt diese neu für Sie an.
Beim Argument BesitztFeldnamen verwenden Sie den Wert True, um die erste Zeile
der Kalkulationstabelle beim Importieren, Exportieren oder Verknüpfen 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 ange-
ben, wird der Standardwert False verwendet.
4286-8.book Seite 211 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
212
Abbildung 4.8 Eine Access-Tabelle wurde in eine Excel-Tabelle transferiert.
Achtung
Das Argument Bereich gilt nur für Importoperationen und darf beim Export nicht
angegeben werden. Beim Import werden standardmäßig alle Datensätze importiert,
sofern dieses Argument nicht gesetzt wird.
4.4.3 Formular aufrufen und Vorauswahl treffen
Im nächsten Beispiel soll das Formular Artikel geöffnet werden. Dabei sollen nur Arti-
kel des Lieferanten Nr. 4 voreingestellt sein, in unserer Beispieldatenbank ist das die
Lieferantennummer des Lieferanten »Tokyo Traders«. Die Lösung für diese Aufgabe
können Sie Listing 4.26 entnehmen:
Sub FormularÖffnen()
DoCmd.OpenForm "Artikel", , , "[Lieferanten-Nr] = 4"
End Sub
Listing 4.26 Formular öffnen und filtern
4286-8.book Seite 212 Dienstag, 6. Dezember 2016 9:52 09
4.4 Das Objekt »DoCmd«
213
4
Die Methode OpenForm setzen Sie ein, um ein Formular zu öffnen. Diese Methode hat
folgende Syntax:
OpenForm(Formularname, Ansicht, Filtername, Bedingung, Datenmodus,Fenstermodus)
Im Argument Formularname geben Sie an, welches Formular Sie öffnen möchten. Das
Argument Ansicht können Sie leer lassen, wenn Sie Ihr Formular in der Normal-
ansicht, also per Doppelklick, öffnen möchten. Ansonsten haben Sie die folgenden
Ansichtskonstanten zur Verfügung:
� acDesign öffnet das Formular in der Entwurfsansicht.
� acFormDS öffnet das Formular in einer Tabellenansicht.
� acFormPivotChart stellt das Formular für ein Pivot-Diagramm zur Verfügung.
� acFormPivotTable: Hiermit können Sie die Felder des Formulars für eine Pivot-
Tabelle verwenden.
� acNormal öffnet das Formular in gewohnter Weise (Standardeinstellung).
� acPreview zeigt das Formular in der Seitenansicht an.
Über das Argument Filtername stellen Sie ein, welche Sätze im Formular nach dem
Starten angezeigt werden sollen. Dabei geben Sie den Namen des Feldes an, das Sie
filtern möchten. Dazu gehört ebenso das Argument Bedingung. Dort formulieren Sie
die Bedingung für den Filter.
Im Argument Datenmodus können Sie bestimmen, welche Aktionen der Anwender im
Formular durchführen darf. Zu diesem Zweck stehen Ihnen folgende Konstanten zur
Verfügung:
� acFormAdd: Der Anwender darf neue Daten ins Formular eingeben.
� acFormEdit: Änderungen an Feldinhalte sind erlaubt.
� acFormPropertySettings: Bei dieser Standardeinstellung darf der Anwender über
das Formular Daten ändern, einfügen und löschen.
� acFormReadOnly: Es dürfen keinerlei Änderungen an den Feldinhalten des Formu-
lars vorgenommen werden.
Im Argument Fenstermodus geben Sie an, wie das Formular angezeigt werden soll.
Dabei können Sie auswählen, ob Sie das Formular als Dialog (acDialog), versteckt
(acHidden), als Symbol in der Taskleiste (acIcon) oder standardmäßig (acWindowNormal)
anzeigen möchten.
4286-8.book Seite 213 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
214
Abbildung 4.9 Formular mit Filterung aufrufen
Das Objekt DoCmd wurde in der neuen Version um mehrere Methoden angerei-
chert:
� Schließen einer Datenbank
Mit der Methode CloseCurrentDatabase schließen Sie die aktuelle Datenbank.
� Schützen der Navigationsleiste
Schon lange gewünscht und jetzt umgesetzt, ist auch der Schutz der Navigations-
leiste. Über die Methode LockNavigationPane können Sie verhindern, dass Tabel-
len, Abfragen oder Berichte gelöscht werden. Die Syntax hierfür lautet:
DoCmd.LockNavigationPane (true)
� Erweiterte Suchmöglichkeit
Die Methode SearchForRecord dient dazu, Datensätze anhand von etwas kom-
plexeren Bedingungen aufzuspüren. Im folgenden Beispiel wird das Formular
Artikel geöffnet und der erste Satz mit einem Lagerbestand von mehr als 10 Stück
des Lieferanten mit der Nummer 11 im Formular angezeigt:
4286-8.book Seite 214 Dienstag, 6. Dezember 2016 9:52 09
4.5 Integrierte Dialoge einsetzen
215
4
Sub SucheKomplex()DoCmd.OpenForm "Artikel"DoCmd.SearchForRecord acDataForm, "Artikel", acNext, _"Lagerbestand>10 and [Lieferanten-Nr]=11"
End Sub
Listing 4.27 Formular öffnen, Datensatz suchen und anzeigen
Die Syntax der Methode SearchForRecord lautet:
SearchForRecord(ObjectType, ObjectName, Record, WhereCondition)
Im Argument ObjectType geben Sie den Objekttyp an:
� acActiveDataObject: Das aktive Objekt enthält den Datensatz.
� acDataForm: Ein Formular enthält den Datensatz.
� acDataFunction: Eine benutzerdefinierte Funktion enthält den Datensatz acData-
Query: Eine Abfrage enthält den Datensatz.
� acDataReport: Ein Bericht enthält den Datensatz.
� acDataServerView: Eine Serversicht enthält den Datensatz (nur Microsoft Access-
Projekt).
� acDataStoredProcedure: Eine gespeicherte Prozedur enthält den Datensatz (nur
Microsoft Access-Projekt).
� acDataTable: Eine Tabelle enthält den Datensatz.
Im Argument ObjectName geben Sie den Namen des Objekts an.
Das Argument Record bestimmt den Anfangspunkt und die Richtung der Suche. Der
Standardwert lautet acFirst.
Im letzten Argument, WhereCondition, geben Sie die Bedingung an, anhand der ge-
sucht werden soll.
4.5 Integrierte Dialoge einsetzen
Bei der Programmierung mit Dialogen müssen Sie nicht unbedingt eigene Dialoge
erstellen. Oft reicht es auch aus, wenn Sie bereits vorhandene Dialoge in Access für
Ihre eigenen Projekte nutzen. Ein weiterer Vorteil ist, dass ein Anwender diese Dia-
loge bereits kennt und sich nicht in fremde Dialoge einarbeiten muss.
Bitte beachten Sie, dass Sie für einige der folgenden Beispiele einen Verweis auf die
Microsoft Office Object Library hinzufügen müssen.
4286-8.book Seite 215 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
216
Abbildung 4.10 So setzen Sie einen Verweis auf die
»Microsoft Office Object Library« im Menü »Extras � Verweise«.
4.5.1 Das Dialogfeld »Öffnen« anzeigen
Wenn Sie aus dem Menü Datei den Befehl Öffnen aufrufen, zeigen Sie damit das
Dialogfeld Öffnen an.
Abbildung 4.11 Das Dialogfeld »Öffnen«
Ein solches Dialogfeld können Sie mitsamt der kompletten Steuerung auch über
VBA-Code anzeigen lassen. Sehen Sie sich dazu die Prozedur in Listing 4.28 an:
4286-8.book Seite 216 Dienstag, 6. Dezember 2016 9:52 09
4.5 Integrierte Dialoge einsetzen
217
4
Sub DialogOeffnen()Dim fd As FileDialogDim varAusgewaehlt As Variant
Set fd = Application.FileDialog(msoFileDialogOpen)
With fdIf .Show = -1 Then
For Each varAusgewaehlt In .SelectedItemsMsgBox "Sie haben ausgewählt: " _
& varAusgewaehltNext varAusgewaehlt
End IfEnd With
Set fd = NothingEnd Sub
Listing 4.28 Das Dialogfeld »Öffnen« anzeigen und auswerten
Im ersten Schritt deklarieren Sie eine Variable als FileDialog-Objekt. Danach benöti-
gen Sie ein Array. In diesem Array (varAusgewaehlt) werden Sie später die ausgewählten
Dateien im Dialogfeld Öffnen verwalten. Im Anschluss an die Variablendeklaration
erzeugen Sie das Objekt FileDialog und geben ihm die Konstante msoFileDialogOpen
mit. Dadurch weiß Access, dass das Dialogfeld Öffnen angezeigt werden soll.
Weitere mögliche Konstanten für integrierte Dialoge sind übrigens msoFileDialog-
FilePicker (Dialogfeld Durchsuchen mit Dateiauswahlmöglichkeit), msoFileDia-
logFolderPicker (Dialogfeld Durchsuchen mit Verzeichnisauswahlmöglichkeit)
und msoFileDialogSaveAs (Dialogfeld Speichern unter).
Über die Methode Show zeigen Sie den Dialog an. Dabei können Sie sich auch anzeigen
lassen, welche Schaltfläche auf dem Dialogfeld angeklickt wurde. Falls der Anwender
auf die Schaltfläche Öffnen klickt, wird der Wert –1 zurückgegeben. Anderenfalls,
also wenn der Anwender die Schaltfläche Abbrechen klickt oder die Taste (Esc)
drückt, meldet Access den Wert 0.
Mit einer For Each-Schleife durchlaufen Sie alle im Dialogfeld markierten Dateien, die
Sie automatisch über die Eigenschaft SelectedItems abfragen können. Die ausge-
wählten Dateien geben Sie über ein Meldungsfenster am Bildschirm aus.
Vergessen Sie nicht, am Ende das Schlüsselwort Nothing einzusetzen, um die Ver-
bindung der Objektvariablen fd zum zugehörigen Objekt FileDialog aufzuheben.
Dadurch werden die Speicher- und Systemressourcen wieder freigegeben, die für
dasjenige Objekt reserviert wurden, auf das die Variablen verweisen.
4286-8.book Seite 217 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
218
Möchten Sie das Dialogfeld Durchsuchen anzeigen und auswerten lassen, dann
setzen Sie die Prozedur aus Listing 4.29 ein:
Sub DialogSuchen()Dim fd As FileDialogDim varAusgewaehlt As Variant
Set fd = _Application.FileDialog(msoFileDialogFilePicker)
With fdIf .Show = -1 ThenFor Each varAusgewaehlt In .SelectedItemsMsgBox "Sie haben ausgewählt: " & varAusgewaehlt
Next varAusgewaehltEnd If
End WithSet fd = Nothing
End Sub
Listing 4.29 Das Dialogfeld »Durchsuchen« anzeigen und auswerten
4.5.2 Verzeichnis einstellen
Möchten Sie es dem Anwender überlassen, welches Verzeichnis er standardmäßig
zur Verfügung gestellt bekommt, wenn er aus dem Menü Datei den Befehl Öffnen
wählt, dann hilft Ihnen die Prozedur aus Listing 4.30 weiter. Dabei hat der Anwender
die Möglichkeit, sein Standardverzeichnis aus dem Dialog Durchsuchen zu wählen.
Sub OrdnerEinstellen()Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fdIf .Show = -1 ThenMsgBox "Sie haben eingestellt: " _& fd.SelectedItems(1)
'Ins ausgewählte Verzeichnis wechselnChDir fd.SelectedItems(1)
End IfEnd WithSet fd = Nothing
End Sub
Listing 4.30 Ordner über das Dialogfeld »Durchsuchen« einstellen
4286-8.book Seite 218 Dienstag, 6. Dezember 2016 9:52 09
4.5 Integrierte Dialoge einsetzen
219
4
Im ersten Schritt deklarieren Sie eine Variable als FileDialog-Objekt. Im Anschluss an
die Variablendeklaration erzeugen Sie das FileDialog-Objekt und geben ihm die Kon-
stante msoFileDialogFolderPicker mit. Dadurch weiß Access, dass das Dialogfeld
Durchsuchen angezeigt werden soll.
Über die Methode Show zeigen Sie das Dialogfeld an. Dabei können Sie zusätzlich
sehen, welche Schaltfläche auf dem Dialogfeld geklickt wurde. Falls der Anwender auf
die Schaltfläche OK klickt, wird der Wert –1 zurückgegeben. Anderenfalls – also wenn
der Anwender auf die Schaltfläche Abbrechen klickt oder die Taste (Esc) drückt –
meldet Access den Wert 0.
Über die Eigenschaft SelectedItems können Sie abfragen, welcher Ordner im Dialog-
feld Durchsuchen gewählt wurde. Den ausgewählten Ordner geben Sie über ein
Meldungsfenster am Bildschirm aus. Direkt im Anschluss daran wechseln Sie mit der
Anweisung ChDir in den ausgewählten Ordner.
Setzen Sie am Ende das Schlüsselwort Nothing ein, um die Referenz der Objektvaria-
blen fd zum zugehörigen Objekt FileDialog aufzuheben und reservierte Ressourcen
wieder freizugeben.
Abbildung 4.12 Der Dialog »Durchsuchen«
4.5.3 Dateien per Filtereinstellung suchen
Das Dialogfeld Durchsuchen können Sie einsetzen, um Dateien eines bestimmten
Dateityps anzuzeigen.
In Listing 4.31 wird das Dialogfeld Durchsuchen angezeigt und per eigener Defini-
tion nur HTML-Dateien aufgelistet:
4286-8.book Seite 219 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
220
Sub DateienSuchenMitFiltereinstellung()Dim fd As FileDialogDim varAusgewaehlt As Variant
Set fd = Application.FileDialog(msoFileDialogFilePicker)With fd.Filters.Clear.Filters.Add "Internet", "*.htm; *.html,", 1If .Show = -1 ThenFor Each varAusgewaehlt In .SelectedItemsMsgBox "Pfadname: " & varAusgewaehlt
Next varAusgewaehltEnd If
End WithSet fd = Nothing
End Sub
Listing 4.31 Das Dialogfeld »Durchsuchen« mit Voreinstellung anzeigen
Im ersten Schritt deklarieren Sie eine Variable als FileDialog-Objekt. Im Anschluss an
die Variablendeklaration erzeugen Sie das Objekt FileObject und geben diesem die
Konstante msoFileDialogFilePicker mit. Dadurch weiß Access, dass das Dialogfeld
Durchsuchen angezeigt werden soll.
Um auf das Dropdown-Listenfeld Dateityp zugreifen zu können, müssen Sie die
Eigenschaft Filters verwenden. Um den Filter zu initialisieren, wenden Sie die
Methode Clear an. Danach definieren Sie sich Ihren eigenen Filter über die Methode
Add. Dadurch fügen Sie einen neuen Dateifilter zur Liste der Filter im Dropdown-Lis-
tenfeld Dateityp des Dialogfelds Durchsuchen hinzu.
Möchten Sie im Dropdown-Feld alle Dateien zur Auswahl haben, dann geben Sie das
Filterkriterium wie folgt an:
.Filters.Add "Alle Dateien", "*.*"
Über die Methode Show zeigen Sie das Dialogfeld an. Dabei können Sie sich zusätzlich
anzeigen lassen, welche Schaltfläche auf dem Dialogfeld angeklickt wurde. In dem
Fall, dass der Anwender auf die Schaltfläche OK klickt, wird der Wert -1 zurückgege-
ben. Im anderen Fall – also wenn der Anwender auf die Schaltfläche Abbrechen
klickt oder die Taste (Esc) drückt – wird der Wert 0 von Access gemeldet.
Mit einer For Each-Schleife durchlaufen Sie alle markierten Dateien im Dialogfeld, die
Sie automatisch über die Eigenschaft SelectedItems abfragen können. Die ausge-
wählten Dateien geben Sie über ein Meldungsfenster am Bildschirm aus.
4286-8.book Seite 220 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
221
4
Setzen Sie am Ende das Schlüsselwort Nothing ein, um die Referenz der Objektvaria-
blen fd zum zugehörigen Objekt FileDialog aufzuheben und reservierte Ressourcen
wieder freizugeben.
4.5.4 Weitere Dialogfelder verwenden
Selbstverständlich haben Sie auch die Möglichkeit, nahezu alle anderen integrierten
Dialogfelder von Access für Ihre Arbeit zu nutzen. Dazu setzen Sie die Methode Run-
Command ein. Diese Methode führt einen eingebauten Menü- oder Symbolleistenbe-
fehl aus, was bedeutet, dass Sie in der Lage sind, fast jedes Dialogfeld von Access
aufzurufen.
Im Listing 4.32 rufen Sie das Dialogfeld Optionen auf:
Sub DialogOptionenEinstellen()
DoCmd.RunCommand acCmdOptions
End Sub
Listing 4.32 Das Dialogfeld »Optionen« aufrufen
Diese Prozedur ist gleichbedeutend mit der manuellen Vorgehensweise, bei der Sie
aus dem Menü den Dialog Access-Optionen wählen.
Entnehmen Sie Tabelle 4.2, wie Sie die anderen Registerkarten per VBA öffnen können.
4.6 Das Objekt »FileSystemObject«
Über das FileSystemObject gewinnen Sie Zugriff auf Ihre Laufwerke und Ihr Netz-
werk. Dieses Objekt ist Bestandteil der Bibliothek Microsoft Scripting Runtime. Diese
Registerkarte Befehl
Abfragen DoCmd.RunCommand acCmdViewQueries
Formulare DoCmd.RunCommand acCmdViewForms
Berichte DoCmd.RunCommand acCmdViewReports
Seiten DoCmd.RunCommand acCmdViewDataAccessPages
Makros DoCmd.RunCommand acCmdViewMacros
Module DoCmd.RunCommand acCmdViewModules
Tabelle 4.2 Mögliche Ansichtskonstanten der Methode »RunCommand«
4286-8.book Seite 221 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
222
Bibliothek enthält Befehle für den Windows Scripting Host (WSH). Dabei handelt es
sich um eine eigene Skriptsprache unter Windows, die Sie auch von Access aus aufru-
fen können. Skripte können Sie einsetzen, um tägliche Routineaufgaben zu automa-
tisieren – wie das Sichern von Dateien, das Starten von Programmen, das Öffnen und
die Bearbeitung von Dateien, die Abfrage von Systeminformationen, das Erstellen
und Löschen von Verzeichnissen, die Verbindung und das Trennen von Netzlaufwer-
ken und vieles mehr.
Bevor Sie aber mit diesem Objekt arbeiten, sollten Sie erst einmal die entsprechende
Objektbibliothek einbinden und im Objektkatalog nachsehen, welche Methoden und
Eigenschaften zur Verfügung stehen.
Abbildung 4.13 Alle Methoden und Eigenschaften für die Dateibearbeitung
Um die Bibliothek Microsoft Scripting Runtime einzubinden, befolgen Sie die folgen-
den Arbeitsschritte:
1. Wählen Sie in der Entwicklungsumgebung den Befehl Verweise aus dem Menü
Extras.
2. Wählen Sie aus dem Listenfeld Verfügbare Verweise die Bibliothek Microsoft
Scripting Runtime.
4286-8.book Seite 222 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
223
4
3. Bestätigen Sie Ihre Einstellung mit OK.
4. Drücken Sie gleich im Anschluss die Taste (F2), um den Objektkatalog aufzurufen.
5. Stellen Sie im ersten Dropdown-Feld den Eintrag Scripting ein.
4.6.1 Computerinformationen anzeigen
Möchten Sie den Namen Ihres Computers sowie den Namen des angemeldeten
Benutzers erfahren, dann können Sie die Prozedur aus Listing 4.33 ausführen:
Sub ComputerInfosAnzeigen()
Dim fsNetzwerk As Variant
Set fsNetzwerk = CreateObject("wscript.network")
Debug.Print "Computer: " & fsNetzwerk.Computername
Debug.Print "User : " & fsNetzwerk.UserName
End Sub
Listing 4.33 Computernamen und Anwendernamen ermitteln
Um Informationen bezüglich Ihres Computers abzufragen, müssen Sie auf das Ob-
jekt network zurückgreifen. Dieses Objekt erstellen Sie mit der Anweisung CreateOb-
ject. Um Schreibarbeit zu sparen, setzen Sie die Anweisung Set ein. Hiermit weisen
Sie das Objekt einer Variablen mit dem Namen Netzwerk zu. Dies ermöglicht Ihnen
später, unter dem Alias Netzwerk auf dieses Objekt zuzugreifen.
Abbildung 4.14 Den Computernamen und den
Anwendernamen im Direktbereich ausgeben
4.6.2 Verzeichnisse ermitteln
Wenn Sie mehrere Benutzer auf Ihrem PC zugelassen haben, ist es gar nicht so ein-
fach, die persönlichen Verzeichnisse auf dem PC zu finden. Um diese Verzeichnisse
zu ermitteln, können Sie die Prozedur aus Listing 4.34 einsetzen:
Sub VerzeichnisseErmitteln()
Dim wshshShell As WshShell
4286-8.book Seite 223 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
224
Set wshshShell = CreateObject("WScript.Shell")
Debug.Print "Ihr Desktop liegt unter:" _
& Chr(13) _
& wshshShell.SpecialFolders("Desktop") _
& Chr(13)
Debug.Print "Ihre Verlaufsliste liegt unter: " _
& Chr(13) _
& wshshShell.SpecialFolders("Recent") _
& Chr(13)
Debug.Print "Ihre Favoriten liegen unter: " _
& Chr(13) _
& wshshShell.SpecialFolders("Favorites") _
& Chr(13)
Debug.Print "Das Verzeichnis >>Eigene Dateien<< ist: " _
& Chr(13) _
& wshshShell.SpecialFolders("Mydocuments") _
& Chr(13)
Debug.Print "Ihr Startverzeichnis befindet sich im " _
& " Ordner: " & Chr(13) _
& wshshShell.SpecialFolders("StartMenu") _
& Chr(13)
Debug.Print "Ihre Programme finden Sie unter: " _
& Chr(13) _
& wshshShell.SpecialFolders("Programs") _
& Chr(13)
Debug.Print "Ihre Schriften sind im Ordner: " _
& Chr(13) _
& wshshShell.SpecialFolders("Fonts") _
& Chr(13)
End Sub
Listing 4.34 Die Standardverzeichnisse auswerten
4286-8.book Seite 224 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
225
4
Abbildung 4.15 Die Windows-Verzeichnisse abfragen
Erstellen Sie das Objekt WScript.Shell mit der Methode CreateObject. Das Objekt
WScript.Shell hat mehrere Eigenschaften. Beispielsweise können Sie die Eigenschaft
SpecialFolders einsetzen, um Ihre Standardverzeichnisse bekannt zu geben. Die
Eigenschaft SpecialFolders kennt bestimmte Konstanten, die Sie abfragen können.
Unter anderem ist das die Konstante »Fonts«, die auf den Ordner mit den installier-
ten Schriftarten zeigt.
4.6.3 Tastenkombinationen programmieren
Möchten Sie ein Programm, beispielsweise den Windows-Explorer, über eine Tasten-
kombination aufrufen, dann führt die Prozedur aus Listing 4.35 Sie zum Ziel:
Sub ShortcutErzeugen()Dim wshshShell As WshShellDim strDesktop As StringDim wshscShortCut As WshShortcut
Set wshshShell = CreateObject("WScript.Shell")strDesktop = wshshShell.SpecialFolders("Desktop")Set wshscShortCut = _wshshShell.CreateShortcut(strDesktop & "\Explorer.lnk")wshscShortCut.TargetPath = "%windir%\explorer.exe"wshscShortCut.Hotkey = "ALT+CTRL+L"wshscShortCut.Save
4286-8.book Seite 225 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
226
Debug.Print "Der Shortcut ist: " & wshscShortCut.Hotkey
End Sub
Listing 4.35 Einen Shortcut erzeugen
Nach dem Starten dieser Prozedur wird eine Verknüpfung auf Ihrem Desktop erzeugt,
über die Sie ganz schnell Ihren Windows-Explorer starten können. Zusätzlich können
Sie den Explorer jetzt über die Tastenkombination (Strg)+(Alt)+(L) aufrufen.
Abbildung 4.16 Das neue Symbol auf dem Desktop zum Starten des Explorers
Erstellen Sie zuerst das Objekt Wscript.Shell mit der Methode CreateObject. Danach
definieren Sie als Speicherort für Ihre Verknüpfung zum Explorer Ihren Windows-
Desktop. Dazu setzen Sie die Eigenschaft SpecialFolders ein. Jetzt erzeugen Sie mit
der Methode CreateShortcut eine Verknüpfung auf Ihrem Desktop.
Achten Sie darauf, dass Sie beim Namen der Verknüpfung die Endung .lnk oder .url
anfügen, sonst kommt es zu einer Fehlermeldung. Nun müssen Sie ermitteln, wo
das Programm Explorer gespeichert ist. Dazu setzen Sie die Eigenschaft TargetPath
ein und geben mit der Umgebungsvariablen %windir% an, dass das Programm sich
im Windows-Verzeichnis befindet. Übergeben Sie zusätzlich zur Speicheradresse
den vollständigen Namen mit Endung. Mit der Eigenschaft Hotkey bestimmen Sie,
welche Tastenkombination Sie verwenden möchten. Mit der Methode Save speichern
Sie letztendlich den Shortcut und geben die Tastenkombination zur Information im
Direktbereich aus.
4.6.4 Website-Zugang ganz fix
Wenn Sie im Internet schnell auf eine Seite zugreifen möchten, können Sie im Inter-
net Explorer diese Webseite im Favoriten-Ordner speichern und schnell darauf
zugreifen. Allerdings können Sie die URL der Internetseite auch als Symbol auf Ihrem
Desktop ablegen. Setzen Sie dazu Listing 4.36 ein:
Sub InternetSeiteDirekt()Dim wshshShell As WshShellDim strDesktop As StringDim wshshLink As WshURLShortcut
Set wshshShell = CreateObject("WScript.Shell")strDesktop = wshshShell.SpecialFolders("Desktop")
4286-8.book Seite 226 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
227
4
Set wshshLink = wshshShell.CreateShortcut(strDesktop _& "\Held-Office.url")
wshshLink.TargetPath = "http://www.held-office.de"wshshLink.SaveDebug.Print "Der schnelle Website-Zugang ist" & _"eingerichtet!"
End Sub
Listing 4.36 Ein Desktop-Symbol anlegen
Beachten Sie bei der Benennung des Symbols, dass der Name mit .url enden muss.
Mit einem Doppelklick auf das neue Symbol auf Ihrem Desktop gelangen Sie direkt
auf meine Website. Allerdings muss dazu die Internetverbindung aktiviert sein bzw.
aktiviert werden.
Abbildung 4.17 Eine Internetseite per Doppelklick öffnen
4.6.5 Laufwerke mappen
Wenn Sie ein Netzwerk betreiben, können Sie einzelne Verzeichnisse durch Laufwerks-
buchstaben im Explorer darstellen. Dieser Vorgang wird als Mapping bezeichnet. Damit
können Sie die gewünschten Verzeichnisse im Explorer schneller erreichen. Gerade bei
weit verzweigten Verzeichnisstrukturen sparen Sie so viel Zeit. Wenn Sie diese Arbeit
manuell durchführen möchten, wählen Sie im Windows-Explorer aus dem Menü Ex-
tras den Befehl Netzlaufwerk verbinden. Danach weisen Sie das Netzwerkver-
zeichnis einem noch freien Laufwerksbuchstaben zu und klicken abschließend auf die
Schaltfläche Fertig stellen. Dieser Vorgang benötigt Zeit, besonders wenn Sie gleich
mehrere Verzeichnisse verbinden möchten. Diese zeitraubende Aufgabe können Sie
leicht mit der folgenden Prozedur automatisch erledigen lassen. Dies lohnt sich dann,
wenn Sie dasselbe Mapping immer wieder auf neuen Rechnern vornehmen müssen.
Sub MappingsAnlegen()Dim wshnwNetzwerk As WshNetwork
Set wshnwNetzwerk = CreateObject("WScript.Network")
'Mehrere Mappings automatisch erstellenwshnwNetzwerk.MapNetworkDrive "W:", \\Hpserver\webdatenwshnwNetzwerk.MapNetworkDrive "S:", \\Hpserver\webdaten\SeminarewshnwNetzwerk.MapNetworkDrive "P:", \\Hpserver\webdaten\Programmierung
4286-8.book Seite 227 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
228
MsgBox "Die Mappings wurden durchgeführt!", vbInformationEnd Sub
Listing 4.37 Laufwerke automatisch mappen
Um Netzlaufwerke zu verbinden, verwenden Sie das Objekt WScript.Network und
seine Methode MapNetworkDrive. Die Methode verlangt als erstes Argument das Lauf-
werk, unter dem Sie in Zukunft Ihr Netzlaufwerksverzeichnis ansprechen möchten.
Im zweiten Argument geben Sie das Netzverzeichnis an, das Sie zuweisen möchten.
Abbildung 4.18 Die Laufwerke wurden gemappt.
Die Mappings können Sie aber auch wieder auflösen. Auch diese Aufgabe können Sie
wieder manuell im Explorer durchführen oder automatisch durch die Prozedur aus
Listing 4.38 erledigen lassen.
Sub MappingsAufheben()Dim wshnwNetzwerk As WshNetworkSet wshnwNetzwerk = CreateObject("WScript.Network")
Debug.Print "Die gemappten Laufwerke werden" _& "wieder freigegeben!"
'Mehrere Mappings automatisch aufhebenwshnwNetzwerk.RemoveNetworkDrive "W:"wshnwNetzwerk.RemoveNetworkDrive "S:"wshnwNetzwerk.RemoveNetworkDrive "P:"
End Sub
Listing 4.38 Mappings wieder aufheben
Über die Methode RemoveNetworkDrive heben Sie die einzelnen Mappings wieder auf.
4286-8.book Seite 228 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
229
4
4.6.6 Gemappte Laufwerke anzeigen
In der nächsten Aufgabe geben Sie zur Information alle gemappten Laufwerke im
Direktfenster der Entwicklungsumgebung aus:
Sub MappingsAnzeigen()Dim wshshShell As WshShellDim wshnwNetzwerk As WshNetworkDim wshcoLaufwerke As WshCollectionDim intZ As Integer
Set wshnwNetzwerk = CreateObject("WScript.Network")Set wshcoLaufwerke = wshnwNetzwerk.EnumNetworkDrives
For intZ = 0 To wshcoLaufwerke.Count - 1Debug.Print wshcoLaufwerke.Item(intZ) & vbLf
Next intZ
End Sub
Listing 4.39 Mappings ermitteln und ausgeben
Ermitteln Sie mit der Eigenschaft Count, die Sie auf das Objekt EnumNetworkDrives
anwenden, die Anzahl der gemappten Laufwerke. Diese geben Sie im Direktbereich
von Access aus.
Abbildung 4.19 Alle Mappings anzeigen
4.6.7 Laufwerk auswerten
Den noch freien Speicherplatz Ihrer lokalen Festplatte ermitteln Sie über die Eigen-
schaft FreeSpace, indem Sie sie auf das FileSystemObject anwenden. Wie das genau
aussieht, sehen Sie in Listing 4.40:
4286-8.book Seite 229 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
230
Sub FreienPlattenplatzAnzeigen()Dim fs As FileSystemObjectDim drv As DriveDim str As String
Set fs = CreateObject("Scripting.FileSystemObject")Set drv = fs.GetDrive(fs.GetDriveName("C:\"))str = "Laufwerk " & UCase("C:\") & " - "str = str & drv.VolumeName & vbCrLfstr = str & "Freier Platz: " & _FormatNumber(drv.FreeSpace / 1024, 0)
str = str & " Kbytes"MsgBox str, vbInformation
End Sub
Listing 4.40 Freien Plattenplatz ermitteln
Mit der Methode GetDrive bekommen Sie Zugriff auf das Laufwerk, das Sie mit der
Methode GetDriveName übergeben. Über die Eigenschaft VolumeName lesen Sie den
Datenträgernamen des Laufwerks aus. Die Funktion FormatNumber sorgt dafür, dass
Sie die so ermittelte Größe in einen formatierten Ausdruck übersetzen. Die Null
bedeutet dabei, dass keine Nachkommastellen angezeigt werden sollen. Die Eigen-
schaft Freespace ermittelt den momentan noch freien Platz auf Ihrer Festplatte.
Abbildung 4.20 Freien Plattenplatz ermitteln und anzeigen
Möchten Sie wissen, welche Laufwerke auf Ihrem PC oder Netzwerk zur Verfügung
stehen, dann führen Sie die folgende Prozedur aus:
Sub LaufwerksbuchstabenErmitteln()Dim fs As FileSystemObjectDim drv As DriveDim drvs As DrivesDim strMedium As String
Set fs = CreateObject("Scripting.FileSystemObject")
4286-8.book Seite 230 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
231
4
Set drvs = fs.DrivesFor Each drv In drvsDebug.Print drv.DriveLetterSelect Case drv.DriveTypeCase 0: strMedium = "Unbekannt"Case 1: strMedium = "Diskettenlaufwerk"Case 2: strMedium = "Festplatte"Case 3: strMedium = "Netzwerk"Case 4: strMedium = "CDROM"Case 5: strMedium = "Wechselplatte"
End Select
Debug.Print strMediumDebug.Print drv.ShareName & Chr(13)
Next drv
End Sub
Listing 4.41 Laufwerksinformationen abfragen
Erzeugen Sie im ersten Schritt ein FileSystemObject über die Methode CreateObject.
Danach fragen Sie über das Auflistungsobjekt Drives alle verfügbaren Laufwerke in
einer Schleife ab. In der Schleife ermitteln Sie über die Eigenschaft DriveLetter den
Laufwerksbuchstaben. Über die Eigenschaft DriveType finden Sie den Laufwerkstyp
heraus. Dabei meldet diese Eigenschaft bestimmte numerische Werte zurück, die
Rückschluss auf den Laufwerkstyp geben. Mit der Eigenschaft ShareName geben Sie
den Namen der Netzwerkressource eines bestimmten Laufwerks aus.
Abbildung 4.21 Laufwerke ermitteln und auswerten
4.6.8 Aktuelle Datenbank sichern
Da Sie standardmäßig immer nur eine Datenbank pro Sitzung geöffnet haben kön-
nen, ist es recht aufwendig, eine Sicherungskopie Ihrer Datenbank in einem anderen
Verzeichnis zu speichern. Der Weg über das Menü Datei und den Befehl Speichern
unter ist ebenso unpraktisch wie der Umweg über den Windows-Explorer. Besser ist
4286-8.book Seite 231 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
232
es, Ihre Datenbank im laufenden Betrieb zu sichern. Dazu können Sie die Methode
CopyFile aus Listing 4.42 einsetzen:
Sub DatenbankSichern()Dim fs As Scripting.FileSystemObject
Set fs = New Scripting.FileSystemObjectfs.CopyFile CurrentDb.Name, "C:\Users\" & Environ("username") & _"\Documents\Sicherung.accdb", TrueSet fs = Nothing
End Sub
Listing 4.42 Datenbank sichern
Mit der Methode CopyFile haben Sie die Möglichkeit, den aktuellen Stand Ihrer Daten-
bank zu kopieren und unter einem anderen Namen in einem anderen Verzeichnis zu
sichern.
4.6.9 Datenbank-Datumsangaben auswerten
Bei der nächsten Aufgabe soll mithilfe des FileSystemObjects eine Datenbank ausge-
wertet werden. Uns interessieren folgende Informationen:
� das Erstellungsdatum der Datenbank
� das Datum der letzten Änderung
� das Datum des letzten Zugriffs
Diese Aufgabe können Sie beispielsweise lösen, indem Sie eine Funktion schreiben,
der Sie den Namen der Datenbank übergeben, die Sie auswerten möchten. Über
einen Index zwischen 1 und 3 geben Sie dann genau an, welches Datum Sie ermitteln
möchten.
Function DB_Daten(strFileName As String, _intDatNr As Integer) As StringDim fs As Scripting.FileSystemObject
Set fs = New Scripting.FileSystemObjectWith fs.GetFile(strFileName)If intDatNr = 1 Then DB_Daten = .DateCreatedIf intDatNr = 2 Then DB_Daten = .DateLastModifiedIf intDatNr = 3 Then DB_Daten = .DateLastAccessed
4286-8.book Seite 232 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
233
4
End With
End Function
Listing 4.43 Datumsauswertungen der Datenbank vornehmen
� Über die Eigenschaft DateCreated ermitteln Sie das Anlagedatum einer Datenbank
oder auch eines Ordners.
� Die Eigenschaft DateLastModified liefert Ihnen den genauen Zeitpunkt der letzten
Änderung einer Datenbank.
� Über die Eigenschaft DateLastAccessed ermitteln Sie das Datum des letzten
Zugriffs auf eine Datenbank oder einen Ordner.
Schreiben Sie nun noch die aufrufende Prozedur, und übergeben Sie der Funktion
nacheinander alle gewünschten Angaben:
Sub DB_Auswerten()Dim strInfo As String
Debug.Print CurrentDb.Name & vbLf
strInfo = DB_Datümer(CurrentDb.Name, 1)Debug.Print "Erstellungsdatum: " & strInfo & vbLf
strInfo = DB_Datümer(CurrentDb.Name, 2)Debug.Print "Letztes Änderungsdatum: " & strInfo & vbLf
strInfo = DB_Datümer(CurrentDb.Name, 3)Debug.Print "Letztes Zugriffsdatum: " & strInfo & vbLf
End Sub
Listing 4.44 Datenbanknamen und gewünschten Datumsindex übergeben
Abbildung 4.22 Alle Informationen zur aktuellen Datenbank
4286-8.book Seite 233 Dienstag, 6. Dezember 2016 9:52 09
4 Ein Streifzug in die Welt der Objekte
234
4.6.10 Verzeichnisstruktur auslesen
Im Beispiel aus Listing 4.45 wird eine Verzeichnisstruktur ausgelesen:
Function OrdnerDurchsuchen(strV As String) As BooleanDim fs As ObjectDim objOrdner As ObjectDim objSub As ObjectDim intZ As Integer
intZ = 0Set fs = CreateObject("Scripting.FileSystemObject")Set objOrdner = fs.GetFolder(strV)
For Each objSub In objOrdner.SubFoldersDebug.Print "Ordner " & intZ & ": " & objSub.NameintZ = intZ + 1
Next objSub
Set objOrdner = NothingSet fs = Nothing
End Function
Sub VerzeichnisStrukturAuslesen()Dim bool As Boolean
bool = OrdnerDurchsuchen("C:\Windows")
End Sub
Listing 4.45 Alle Unterordner des Windows-Ordners werden ausgelesen.
Erstellen Sie zunächst ein FileSystemObject, indem Sie die Methode CreateObject
anwenden. Danach greifen Sie über die Methode GetFolder auf das gewünschte Ver-
zeichnis zu. In einer For Each ... Next-Schleife arbeiten Sie alle Unterverzeichnisse
ab. Diese Unterverzeichnisse liegen in der Auflistung SubFolders automatisch vor.
Den Namen des jeweiligen Ordners fragen Sie über die Eigenschaft Name ab.
4286-8.book Seite 234 Dienstag, 6. Dezember 2016 9:52 09
4.6 Das Objekt »FileSystemObject«
235
4
Abbildung 4.23 Alle Unterordner des Windows-Ordners werden aufgelistet.
4286-8.book Seite 235 Dienstag, 6. Dezember 2016 9:52 09
623
11
Kapitel 11
API-Funktionen einsetzen
Viele Aufgaben in Access müssen nicht unbedingt durch den Einsatz
von VBA gelöst werden. Die meisten Lösungen stecken auch schon
direkt in Windows.
Ihr Betriebssystem stellt Ihnen eine ganze Reihe von Dynamic Link Libraries (DLLs)
zur Verfügung, die Sie bei der Programmierung von Access einsetzen können. Diese
DLLs enthalten Funktionen, die u. a. für die Speicher- und Ressourcenverwaltung, die
Bereitstellung von Dialog- und Steuerelementen, den Einsatz von Zeichenfunk-
tionen, die Verwendung von Multimediafunktionen oder auch die Verwaltung von
E-Mails verantwortlich sind.
In diesem Kapitel erfahren Sie, wie Sie mit API-Aufrufen typische Aufgaben in Access
erledigen können. Unter anderem werden dabei folgende Lösungen präsentiert:
� Ermitteln des CD-ROM-Laufwerks
� automatisches Öffnen und Schließen des CD-ROM-Laufwerks
� den Namen des angemeldeten Anwenders ermitteln
� die eingestellte Bildschirmauflösung ermitteln
� externes Programm starten und überwachen
� Anwendungsprogramme schlafen schicken
� Windows-Version ermitteln
� Verzeichnisse erstellen und abfragen
� den Windows-Info-Dialog aufrufen
� die Umgebungsvariablen von Windows ausgeben
� Texte mit API-Aufrufen konvertieren
� Sounds und Signale über eine API-Funktion ausgeben
� Tastenklicks überwachen
� Internetstatus überprüfen
� E-Mail versenden
� Standarddrucker abfragen
� Passwortverschlüsselung
4286-8.book Seite 623 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
624
Die in diesem Kapitel vorgestellten Lösungen finden Sie in den Materialien zum
Buch im Ordner Kap11 unter dem Namen API.accdb.
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 ihre univer-
selle Einsetzbarkeit. Ob Sie in Access, Excel, Word oder einer anderen beliebigen
Windows-Anwendung mit Programmierschnittstelle arbeiten, ist dabei gleichgültig.
Sie können API-Funktionen aus nahezu jeder Anwendung heraus aufrufen und für
Ihre Aufgaben nutzen.
Die bekannteste API ist die Windows-API, zu der auch die DLLs gehören, aus denen
das Windows-Betriebssystem besteht. Jede Windows-Anwendung kommuniziert
direkt oder indirekt mit der Windows-API. Durch die Windows-API wird sicherge-
stellt, dass das Verhalten aller unter Windows laufenden Anwendungen konsistent
bleibt.
Ein Nachteil von API-Funktionen ist, dass Sie sie in der Online-Hilfe leider nicht nach-
schlagen können bzw. dass die Syntax zur Deklaration – also zum Verfügbarmachen
innerhalb des Programms – von API-Funktionen recht kompliziert ist. Ein weiterer
Punkt ist, dass API-Funktionen sehr sensibel reagieren, wenn Sie irgendein Argu-
ment nicht korrekt wiedergeben bzw. die Syntax der API-Funktion nicht genau ein-
halten. Access reagiert dann nicht selten mit einem Programmabsturz.
11.1 Das CD-ROM-Laufwerk ermitteln
In der ersten Aufgabe werden Sie über den Einsatz einer API-Funktion herausfinden,
welcher Laufwerksbuchstabe Ihrem CD-ROM-Laufwerk zugeordnet ist.
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 StringDim lngLWTyp As LongDim strLW As StringDim lng As LongDim lng1 As LongDim strBuffer As String
4286-8.book Seite 624 Dienstag, 6. Dezember 2016 9:52 09
11.1 Das CD-ROM-Laufwerk ermitteln
625
11
strBuffer = Space(200)lng = GetLogicalDriveStrings(200, strBuffer)If lng = 0 ThenCdRomLWBuchstabe = vbNullStringExit Function
End Iflng1 = 1strLW = Mid(strBuffer, lng1, 3)Do While (Mid(strBuffer, lng1, 1) <> vbNullChar)lngLWTyp = GetDriveType(strLW)If lngLWTyp = 5 ThenCdRomLWBuchstabe = strLWExit Function
End Iflng1 = lng1 + 4strLW = Mid(strBuffer, lng1, 3)
LoopEnd Function
Listing 11.1 API-Funktion zur Ermittlung des CD-ROM-Laufwerks
Bevor Sie von VBA aus eine Funktion in einer DLL aufrufen können, müssen Sie VBA
mitteilen, wo sich die Funktion befindet und wie sie aufgerufen wird. Dazu verwen-
den Sie eine Declare-Anweisung in einem Modul. Sobald der Verweis festgelegt ist,
können Sie die DLL-Funktion so aufrufen, als sei sie Teil des Projekts. Durch das
Schlüsselwort Lib bestimmen Sie, welche DLL die Funktion enthält. Folgende DLLs
sind die am häufigsten verwendeten Bibliotheken in Windows:
� Kernel32.dll: Hier finden Sie Betriebssystemfunktionen z. B. für die Speicherver-
waltung und die Ressourcenbehandlung.
� User32.dll: Diese DLL übernimmt die Fensterverwaltungsfunktionen, wie z. B. Mel-
dungen, Menüs, Symbolleisten und Kommunikation.
� GDI32.dll: Damit ist die GDI-Bibliothek (Graphics Device Interface) gemeint. Sie
enthält die Funktionen für die Geräteausgabe, z. B. zum Zeichnen, zum Anzeigen
von Kontext und zur Schriftartenverwaltung.
Im zweiten Schritt schreiben Sie eine Funktion und definieren einen Puffer vom Typ
String, in den Sie alle logischen Laufwerksbezeichnungen Ihres Systems einlesen.
Danach rufen Sie die API-Funktion GetLogicalDriveStrings auf, die Ihnen alle ver-
wendeten Laufwerksbuchstaben in den Puffer schreibt. Prüfen Sie nach dem Füllen
des Puffers gleich einmal seine Länge. Sind im Puffer 0 Zeichen enthalten, konnte die
API-Funktion keine Laufwerksbuchstaben ermitteln. In diesem Fall übergeben Sie
der Funktion als Rückgabewert die Konstante vbNullString, die eine Zeichenfolge mit
dem Wert 0 darstellt. Falls der Puffer gefüllt ist, setzen Sie die Verarbeitung fort.
4286-8.book Seite 625 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
626
Im nächsten Schritt lesen Sie die einzelnen Laufwerke aus. Dazu legen Sie die Startpo-
sition 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 einset-
zen. Die Funktion Mid überträgt eine bestimmte Anzahl von Zeichen (genau drei, z. B.
a:\), beginnend bei der Startposition 1, in die String-Variable str. Setzen Sie nun eine
Schleife auf, die den Puffer Stück für Stück zerlegt. Innerhalb der Schleife wenden Sie
die API-Funktion GetDriveType an. Diese liefert den Index für das Laufwerk in der
Variablen strLW zurück. Jeder Laufwerkstyp weist einen eindeutigen Laufwerksindex
auf. Diese Indizes sehen Sie in Tabelle 11.1.
Rufen Sie nun die API-Funktion über die Prozedur aus Listing 11.2 auf:
Sub CDRomLW()Dim str As String
str = CdRomLWBuchstabe()MsgBox "Das CD-ROM-Laufwerk hat den Buchstaben " & str
End Sub
Listing 11.2 CD-ROM-Laufwerk ermitteln
11.2 Den Namen des Anwenders ermitteln
Im folgenden Beispiel soll der Name des angemeldeten Benutzers unter Windows
ermittelt und ausgegeben werden. Für diesen Zweck greifen Sie auf die Bibliothek
advapi32.dll zu und nutzen die API-Funktion GetUserName.
Erfassen Sie die API-Funktion aus Listing 11.3:
Private Declare Function GetUserName Lib "advapi32.dll" Alias _"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Index Beschreibung
2 Disketten- oder auch Zip-Laufwerk
3 Lokale Festplatte
4 Netzlaufwerk
5 CD-ROM-Laufwerk
6 RAM-Laufwerk
Tabelle 11.1 Die Laufwerksindizes für die API-Funktion »GetDriveType«
4286-8.book Seite 626 Dienstag, 6. Dezember 2016 9:52 09
11.3 Das CD-ROM-Laufwerk bedienen
627
11
Function AnwenderName() As StringDim lng As LongDim str As String
Const D_Puffer = 255str = Space(D_Puffer)lng = D_PufferIf CBool(GetUserName(str, lng)) ThenAnwenderName = Left$(str, lng - 1)
ElseAnwenderName = ""
End IfEnd Function
Sub WerBinIch()MsgBox "Der Anwender " & AnwenderName & _" ist angemeldet!"
End Sub
Listing 11.3 Anwendernamen ermitteln
Rufen Sie über eine Prozedur die Funktion AnwenderName auf. In dieser Funktion wird
ein leerer Datenpuffer erzeugt. Danach rufen Sie die API-Funktion GetUserName auf
und überprüfen, ob ein Anwendername ermittelt werden konnte. Um eventuell mit-
geschleppte Leerzeichen abzuschneiden, setzen Sie die Funktion Left ein und über-
tragen den ermittelten Anwendernamen. Da die API-Funktion ein Zeichen zu viel
überträgt, subtrahieren Sie dieses von der Gesamtlänge des ermittelten Anwender-
namens.
11.3 Das CD-ROM-Laufwerk bedienen
Haben Sie sich schon einmal überlegt, dass Sie Ihr CD-ROM-Laufwerk auch gut als
Tassenhalter verwenden können? Dazu müssen Sie es nur öffnen, und schon haben
Sie eine clevere Ablagemöglichkeit mehr. Diese nicht ganz ernst gemeinte Anwen-
dung können Sie automatisieren, indem Sie Ihr CD-ROM-Laufwerk auf Kommando
öffnen und schließen. Die API-Funktion für diese Aufgabe heißt mciSendString.
So öffnen und schließen Sie das CD-ROM-Laufwerk mithilfe der API-Funktion:
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
4286-8.book Seite 627 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
628
Sub ÖffnenCDROMLaufwerk()mciSendString "Set CDAudio Door Open", 0&, 0, 0
End Sub
Sub SchließenCDROMLaufwerk()mciSendString "Set CDAudio Door Closed", 0&, 0, 0
End Sub
Listing 11.4 CD-ROM-Laufwerk ansprechen
11.4 Die Bildschirmauflösung ermitteln
Wollen Sie prüfen, mit welcher Bildschirmauflösung ein Anwender arbeitet, dann
setzen Sie die API-Funktion aus Listing 11.5 ein:
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 = 8Const VERTRES = 10
Sub BildschirmAuflösungErmitteln()MsgBox "Ihre Bildschirmauflösung beträgt:" & _
Chr(13) & BildschirmAuflösung()End Sub
Function BildschirmAuflösung()Dim lngRval As LongDim lngDc As LongDim lngHSize As LongDim lngVSize As Long
lngDc = GetDC(0&)lngHSize = GetDeviceCaps(lngDc, HORZRES)lngVSize = GetDeviceCaps(lngDc, VERTRES)lngRval = ReleaseDC(0, lngDc)BildschirmAuflösung = lngHSize & "x" & lngVSize
End Function
Listing 11.5 Die Bildschirmauflösung ermitteln
4286-8.book Seite 628 Dienstag, 6. Dezember 2016 9:52 09
11.6 Ein externes Programm aufrufen
629
11
11.5 Ist ein externes Programm gestartet?
Im nächsten Beispiel prüfen Sie, ob Ihr E-Mail-Programm Outlook bereits gestartet
ist. Die API-Funktion für diese Aufgabe finden Sie in Listing 11.6:
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 Sub
Listing 11.6 Ist ein externes Programm gegenwärtig geöffnet?
Über die API-Funktion FindWindow prüfen Sie, ob eine andere Anwendung bereits ge-
startet ist. Ist dies der Fall, dann wird Ihnen ein Wert <>0 zurückgeliefert.
11.6 Ein externes Programm aufrufen
Um externe Programme aufzurufen, setzen Sie die API-Funktion ShellExecute ein. In
der folgenden Prozedur wird beispielsweise die Windows-Anwendung Rechner ge-
startet:
Private Declare Function ShellExecute Lib _"shell32.dll" 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()Dim hwnd As Long
ShellExecute hwnd, "open", "calc.exe", 0, 0, SW_SHOWEnd Sub
Listing 11.7 Ein externes Programm starten
4286-8.book Seite 629 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
630
Dazu übergeben Sie der API-Funktion unter anderem den Namen der Anwendung,
die Sie starten möchten.
11.7 Wie lange läuft ein externes Programm?
Im nächsten Beispiel ermitteln wir, wie lange ein externes Programm läuft, und
dokumentieren den Start- und Endzeitpunkt im Direktfenster. Nehmen wir bei-
spielsweise an, Sie möchten protokollieren, wann und wie lange Sie das Spiel Solitär
gespielt haben. Dazu setzen Sie die API-Funktionen OpenProcess sowie GetExitCode-
Process ein. Die eine API-Funktion eröffnet und überwacht den Start einer externen
Anwendung, die andere meldet das Beenden einer Anwendung zurück.
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 = &H400Public Const STILL_ACTIVE = &H103
Sub StartenExternerAnwendung()Dim lng As LongDim dtmBeginn As DateDim dtmEnde As DateDim lngProzess As LongDim lngStatus As Long
dtmBeginn = Now
Debug.Print "Start des Programms um: " & Nowlng = Shell("sol.exe", 1)lngProzess = _OpenProcess(PROCESS_QUERY_INFORMATION, False, lng)
MsgBox "Zeitnahme läuft..."
Do While lngStatus = STILL_ACTIVEGetExitCodeProcess lngProzess, lngStatus
4286-8.book Seite 630 Dienstag, 6. Dezember 2016 9:52 09
11.7 Wie lange läuft ein externes Programm?
631
11
DoEventsLoop
dtmEnde = NowDebug.Print "Die Anwendung wurde um " & Now _& " beendet!"
Debug.Print "Das Programm lief genau: " & _Format(dtmEnde - dtmBeginn, "s") & " Sekunden!"
End Sub
Listing 11.8 Wie lange läuft ein gestartetes Programm?
Speichern Sie gleich zu Beginn der Prozedur die aktuelle Uhrzeit mit der Funktion Now
in der Variablen Beginn. Danach schreiben Sie diesen Startzeitpunkt in das Direkt-
fenster. Als Nächstes setzen Sie die Funktion Shell ein, um das externe Programm zu
starten. Dabei haben Sie die Möglichkeit, als Argument die Anordnung der externen
Anwendung auf dem Bildschirm zu bestimmen. Diese verschiedenen Indizes und
ihre Bedeutung finden Sie in Tabelle 11.2.
Rufen Sie jetzt die erste API-Funktion OpenProcess auf, die den aktiven Prozess (im
Beispiel das Spiel Solitär) verwaltet. Den Rückgabewert 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. Mit der Funktion DoEvents übergeben Sie die Steue-
rung an das Betriebssystem, damit andere Ereignisse verarbeitet werden können.
Somit läuft diese Schleife im Hintergrund weiter und wird erst beendet, wenn der
Index Beschreibung
0 Das Fenster der aufgerufenen Anwendung ist ausgeblendet, und das aus-
geblendete Fenster erhält den Fokus.
1 Das Fenster hat den Fokus, und die ursprüngliche Größe und Position wer-
den wiederhergestellt.
2 Das Fenster wird als Symbol mit Fokus angezeigt.
3 Das Fenster wird maximiert (Vollbild) mit Fokus angezeigt.
4 Die zuletzt verwendete Größe und Position des Fensters wird wiederher-
gestellt. Das momentan aktive Fenster bleibt aktiv.
6 Das Fenster wird als Symbol angezeigt. Das momentan aktive Fenster bleibt
aktiv.
Tabelle 11.2 Die Möglichkeiten bei der Fensteranordnung von Programmen
4286-8.book Seite 631 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
632
Prozess beendet ist. Nach Beendigung der externen Anwendung schreiben Sie die
Laufzeit des externen Programms in das Direktfenster. Die Laufzeit ermitteln Sie,
indem Sie wiederum die Funktion Now heranziehen und diese Zeit mit der vorher
gespeicherten Startzeit in der Variablen Beginn abgleichen.
11.8 Access schlafen schicken
Möchten Sie eine Anwendung ein wenig schlafen lassen, dann können Sie die API-
Funktion aus Listing 11.9 einsetzen. Die Zeit ist in Millisekunden angegeben.
Declare Sub Sleep Lib "kernel32.dll" (ByVal SleepTime As Long)
Sub AccessZumSchlafenSchicken()Sleep (10000)MsgBox "Ruhepause beendet"
End Sub
Listing 11.9 API-Funktion zum »Schlafenlegen« einer Anwendung
11.9 Verzeichnisse erstellen
Neben der Standard-VBA-Funktion MkDir, mit der Sie einen neuen Ordner anlegen,
gibt es eine eigene API-Funktion, mit der Sie Verzeichnisse erstellen. Über API-Funk-
tionen haben Sie ganz allgemein Zugriff auf alle Ordner und Laufwerke Ihres Be-
triebssystems. So können Sie auch Verzeichnisse erstellen und löschen. In Listing
11.10 wird nach einer Benutzereingabe das gewünschte Verzeichnis angelegt:
Private Declare Function CreateDirectory Lib _"kernel32" Alias "CreateDirectoryA" _(ByVal lpPathName As String, _lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTESnLength As LonglpSecurityDescriptor As LongbInheritHandle As Long
End Type
Sub VerzeichnisErstellen()Dim Security As SECURITY_ATTRIBUTESDim lng As LongDim str As String
4286-8.book Seite 632 Dienstag, 6. Dezember 2016 9:52 09
11.11 Verzeichnisbaum anzeigen und auswerten
633
11
str = InputBox("Geben Sie das Verzeichnis ein", _"Verzeichnis erstellen", "C:\Test")
If str = "" Then Exit Sub
lng = CreateDirectory(str, Security)If lng = 0 ThenMsgBox "Das Verzeichnis konnte nicht erstellt" _& " werden!", vbCritical + vbOKOnly
End IfEnd Sub
Listing 11.10 Verzeichnis mit einer API-Funktion erstellen
11.10 Verzeichnis löschen
Um ein Verzeichnis zu entfernen, können Sie die API-Funktion RemoveDirectory ein-
setzen:
Private Declare Function RemoveDirectory Lib _"kernel32" Alias "RemoveDirectoryA" _(ByVal lpPathName As String) As Long
Sub VerzeichnisLöschen()Dim lng As Longlng = RemoveDirectory("C:\Test")
End Sub
Listing 11.11 Verzeichnis mit einer API-Funktion löschen
11.11 Verzeichnisbaum anzeigen und auswerten
Im folgenden Beispiel wird Ihre Verzeichnisstruktur in einem Dialogfeld als Ver-
zeichnisbaum angezeigt und ausgewertet:
Type BROWSEINFOhOwner As LongpidlRoot As LongpszDisplayName As StringlpszTitle As StringulFlags As Longlpfn As LonglParam As LongiImage As Long
4286-8.book Seite 633 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
634
End Type
Declare Function SHGetPathFromIDList Lib "shell32.dll" _Alias "SHGetPathFromIDListA" _(ByVal pidl As Long, ByVal pszPath As _String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _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() As StringDim bInfo As BROWSEINFODim strPath As StringDim lng As Long
lng = SHBrowseForFolder(bInfo)strPath = Space$(512)If SHGetPathFromIDList(ByVal lng, ByVal strPath) ThenVerzeichnisErmitteln = Left(strPath, _InStr(strPath, Chr$(0)) - 1)
ElseVerzeichnisErmitteln = ""
End IfEnd Function
Sub VerzeichnisBaum()Dim strVerz As String
strVerz = VerzeichnisErmitteln()If strVerz = "" Then Exit SubMsgBox "Das ausgewählte Verzeichnis lautet: " _& strVerz
End Sub
Listing 11.12 Verzeichnis auswählen und abfragen
4286-8.book Seite 634 Dienstag, 6. Dezember 2016 9:52 09
11.12 Die Windows-Version ermitteln
635
11
11.12 Die Windows-Version ermitteln
Um die installierte Windows-Version zu ermitteln, können Sie mit der API-Funktion
GetVersionEx arbeiten:
Private Type OSVERSIONINFOdwOSVersionInfoSize As LongdwMajorVersion As LongdwMinorVersion As LongdwBuildNumber As LongdwPlatformId As LongszCSDVersion As String * 128
End Type
Private Const VER_PLATFORM_WIN32s = 0Private Const VER_PLATFORM_WIN32_WINDOWS = 1Private Const VER_PLATFORM_WIN32_NT = 2
Private Declare Function GetVersionEx Lib "kernel32" _Alias "GetVersionExA" _(lpVersionInformation As OSVERSIONINFO) As Long
Sub WindowsVersion()Dim osInfo As OSVERSIONINFODim lngRet As Long
osInfo.dwOSVersionInfoSize = 148osInfo.szCSDVersion = Space(128)
lngRet = GetVersionEx(osInfo)
Select Case osInfo.dwPlatformIdCase VER_PLATFORM_WIN32sDebug.Print "Win32s on Windows 3.1"
Case VER_PLATFORM_WIN32_WINDOWSIf osInfo.dwMinorVersion = 0 ThenDebug.Print "Win32 mit Windows 95"
ElseDebug.Print "Win32 mit Windows 98"
End IfCase VER_PLATFORM_WIN32_NTIf osInfo.dwMajorVersion = 5 And _osInfo.dwMinorVersion = 0 Then
4286-8.book Seite 635 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
636
Debug.Print "Win32 mit Windows 2000"ElseIf osInfo.dwMajorVersion = 5 And _osInfo.dwMinorVersion >= 1 ThenDebug.Print "Win32 mit Windows XP"
ElseDebug.Print "Win32 mit Windows NT"
End IfEnd If
Case ElseDebug.Print "Betriebssystem unbekannt!"
End Select
Debug.Print "Version: " & osInfo.dwMajorVersion _& "." & osInfo.dwMinorVersion
Debug.Print "Build: " & osInfo.dwBuildNumberDebug.Print "Info: " & osInfo.szCSDVersion
End Sub
Listing 11.13 Die installierte Windows-Version erkennen
Die Windows-Versionen werden über dwPlatformId mit dem Wert 2 interpretiert.
Darunter werten Sie die Argumente dwMinorVersion und dwMajorVersion aus, um das
Betriebssystem zu bestimmen.
11.13 Windows-Verzeichnis ermitteln
Den exakten Namen des Windows-Verzeichnisses können Sie über eine API-Funk-
tion abfragen. Für diese Aufgabe können Sie die API-Funktion aus Listing 11.14 ein-
setzen:
Declare Function api_GetWindowsDirectory Lib _"kernel32" Alias "GetWindowsDirectoryA" _(ByVal lpBuffer As String, ByVal nSize As Long) _As Long
Function GetWinDir() As StringDim lpBuffer As String * 255Dim lngLength As Long
lngLength = _api_GetWindowsDirectory(lpBuffer, Len(lpBuffer))
GetWinDir = Left(lpBuffer, lngLength)
4286-8.book Seite 636 Dienstag, 6. Dezember 2016 9:52 09
11.15 Das temporäre Verzeichnis ermitteln
637
11
End Function
Sub WindowsVerzeichnis()Dim str As Stringstr = GetWinDirMsgBox "Ihr Windows-Verzeichnis heißt: " & str
End Sub
Listing 11.14 Windows-Verzeichnis ermitteln
11.14 Windows-Systemverzeichnis ermitteln
Um das Windows-Systemverzeichnis zu ermitteln, setzen Sie die API-Funktion Get-
SystemDirectory aus Listing 11.15 ein:
Declare Function GetSystemDirectory Lib _"kernel32" Alias "GetSystemDirectoryA" _(ByVal lpBuffer As String, ByVal nSize As Long) _As Long
Function GetSystemDir() As StringDim lpBuffer As String * 255Dim lngLength As Long
lngLength = _GetSystemDirectory(lpBuffer, Len(lpBuffer))GetSystemDir = Left(lpBuffer, lngLength)
End Function
Sub WindowsSystemVerzeichnis()Dim str As Stringstr = GetSystemDirMsgBox "Ihr Windows-Systemverzeichnis heißt: " & str
End Sub
Listing 11.15 Windows-Systemverzeichnis ermitteln
11.15 Das temporäre Verzeichnis ermitteln
Windows benötigt ein Verzeichnis, in dem es temporäre Dateien ablegt, die bei Be-
darf geladen und wieder geschlossen werden. Um dieses temporäre Verzeichnis auf-
zuspüren, setzen Sie wie in Listing 11.16 die API-Funktion GetTempPath ein:
4286-8.book Seite 637 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
638
Declare Function GetTempPath Lib _"kernel32" Alias "GetTempPathA" _(ByVal nSize As Long, ByVal lpBuffer As String) _As Long
Function GetTempDir() As StringDim lpBuffer As String * 255Dim lngLength As Long
lngLength = _GetTempPath(Len(lpBuffer), lpBuffer)GetTempDir = Left(lpBuffer, lngLength)
End Function
Sub TemporäresVerzeichnis()Dim str As Stringstr = GetTempDirMsgBox "Ihr temporäres Verzeichnis heißt: " & str
End Sub
Listing 11.16 Das temporäre Verzeichnis ermitteln
11.16 Das aktuelle Verzeichnis ermitteln
Neben der API-Funktion GetWindowsDirectory gibt es weitere API-Funktionen, um be-
stimmte Verzeichnisse zu ermitteln. Mit der Funktion GetCurrentDirectory ermitteln
Sie, welches Verzeichnis gerade aktiv ist.
Declare Function GetCurrentDirectory Lib _"kernel32" Alias "GetCurrentDirectoryA" _(ByVal nSize As Long, ByVal lpBuffer As String) _As Long
Function GetAktDir() As StringDim lpBuffer As String * 255Dim lngLength As Long
lngLength = _GetCurrentDirectory(Len(lpBuffer), lpBuffer)
GetAktDir = Left(lpBuffer, lngLength)End Function
Sub AktuellesVerzeichnis()
4286-8.book Seite 638 Dienstag, 6. Dezember 2016 9:52 09
11.18 Access-Verzeichnis ermitteln
639
11
Dim str As String
str = GetAktDirMsgBox "Ihr aktuelles Verzeichnis heißt: " & str
End Sub
Listing 11.17 Das aktuelle Verzeichnis ermitteln
11.17 Windows-Infobildschirm anzeigen
Möchten Sie einen Infobildschirm in Excel anzeigen, dann können Sie dazu die API-
Funktion ShellAbout einsetzen. Das spart Ihnen das Entwerfen und Programmieren
eines eigenen Dialogs.
Private Declare Function ShellAbout Lib "shell32.dll" _Alias "ShellAboutA" (ByVal hwnd As Long, _ByVal szApp As String, ByVal szOtherStuff As String, _ByVal hIcon As Long) As Long
Sub BildschirmAnzeigen()Dim lngHwnd As LongDim lngSymbol As Long
ShellAbout lngHwnd, "Held-Office", _"Bernd Held, MVP für Microsoft Excel" & vbCrLf & _"http://held-office.de", lngSymbol
End Sub
Listing 11.18 API-Funktion zum Anzeigen eines Infobildschirms
11.18 Access-Verzeichnis ermitteln
Sie können Access auch starten, indem Sie auf Ihrem Windows-Desktop die Schaltflä-
che Start klicken und dann den Befehl Ausführen wählen. Im Dialogfeld Ausfüh-
ren klicken Sie auf die Schaltfläche Durchsuchen, stellen Ihr Office-Verzeichnis ein
und markieren die Datei MSACCESS.exe.
Um genau diesen Pfad zu ermitteln, können Sie die API-Funktion GetCommandLine aus
Listing 11.19 verwenden:
Declare Function GetCommandLine Lib "Kernel32" _Alias "GetCommandLineA" () As String
4286-8.book Seite 639 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
640
Sub VerzeichnisAccessAnsteuern()MsgBox "Access befindet sich unter: " & _GetCommandLine()
End Sub
Listing 11.19 Das Access-Startverzeichnis ermitteln
Die API-Funktion besteht lediglich aus einem Kommando, das Sie durch eine Proze-
dur aufrufen und über die Funktion MsgBox auf dem Bildschirm ausgeben.
11.19 Standardverzeichnis festlegen
In der Regel ist das Verzeichnis Eigene Dateien Ihr Standardverzeichnis in Access. Hier
werden Access-Datenbanken standardmäßig gespeichert, bzw. beim Dialog Öffnen
wird immer dieses Verzeichnis eingestellt. Diese Einstellung können Sie ändern,
indem Sie die API-Funktion SetCurrentDirectoryA aus Listing 11.20 einsetzen.
Private Declare Function SetCurrentDirectoryA _Lib "kernel32" (ByVal lpPathName As String) As Long
Sub VerzeichnisFestlegenÜberAPI()SetCurrentDirectoryA ("c:\temp")
End Sub
Listing 11.20 Standardverzeichnis festlegen
11.20 Dateityp und Anwendung ermitteln
Im nächsten Beispiel soll ausgehend von einer bestimmten Datei die dazugehörige
Anwendung ermittelt werden.
Private Declare Function FindExecutable _Lib "shell32.dll" _Alias "FindExecutableA" (ByVal lpFile As String, _ByVal lpDirectory As String, _ByVal lpResult As String) As Long
Public Function AppFile(Datei As String) As StringDim str As String
str = Space(256)FindExecutable Datei, vbNullString, strAppFile = Left$(str, InStr(str, vbNullChar) - 1)
4286-8.book Seite 640 Dienstag, 6. Dezember 2016 9:52 09
11.21 Kurze Pfadnamen ermitteln
641
11
End Function
Sub Datei()Dim str As String
str = AppFile("C:\Eigene Dateien\Umsatz.xls")If str <> "" ThenMsgBox "Die dazugehörige Anwendung lautet: " _& vbLf & str
ElseMsgBox "Anwendung konnte nicht ermittelt werden!", _vbCritical
End IfEnd Sub
Listing 11.21 Die zur Datei gehörende Anwendung ermitteln
Wenn Sie eine Datei mitsamt dem Pfad angeben, liefert FindExecutable den komplet-
ten Pfad zur verknüpften Anwendung zurück, der in einem String über den Para-
meter lpResult übergeben wird. Existiert die angegebene Datei nicht, so wird ein
Leerstring zurückgegeben.
11.21 Kurze Pfadnamen ermitteln
Bei sehr ausgeprägten Verzeichnisstrukturen wird der Pfad in Windows oft umbro-
chen. Die API-Funktion, die dafür verantwortlich ist, heißt GetShortPathName.
Declare Function GetShortPathName Lib "kernel32" _Alias "GetShortPathNameA" _(ByVal lpszLongPath As String, _ByVal lpszShortPath As String, _ByVal cchBuffer As Long) As Long
Sub KurzerDateiname()Dim lngLangerName As StringDim lngKurzerName As StringDim lng As Long
lngLangerName = Application.CurrentDb.NamelngKurzerName = Space$(250)
lng = GetShortPathName(lngLangerName, lngKurzerName, _Len(lngKurzerName))
4286-8.book Seite 641 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
642
lngKurzerName = Left$(lngKurzerName, lng)MsgBox " Kurz: " & lngKurzerName & vbLf & _"Lang: " & Application.CurrentDb.Name, vbInformation
End Sub
Listing 11.22 Die gekürzte Pfadangabe ausgeben
Über die Anweisung Application.CurrentDb.Name ermitteln Sie den Dateinamen in-
klusive des Pfades der aktuell geöffneten Datenbank. Die Variable KurzerName wird
mit 250 Leerzeichen zunächst initialisiert. Danach wird die API-Funktion GetShort-
PathName aufgerufen. Dieser Funktion wird sowohl die Variable LangerName als auch
die noch leere Variable KurzerName sowie deren Länge übergeben. Die API-Funktion
kürzt den Pfadnamen, den Sie danach über die Funktion MsgBox auf dem Bildschirm
ausgeben.
11.22 Den Computernamen ermitteln
Den Computernamen finden Sie in der Systemsteuerung von Windows unter Netz-
werk heraus. Schneller geht es aber mit der API-Funktion GetComputerName aus Lis-
ting 11.23:
Private Declare Function GetComputerName Lib _"kernel32" Alias "GetComputerNameA" _(ByVal lpBuffer As String, nSize As Long) As Long
Sub ComputerNameAnzeigen()Dim strName As String
strName = String(255, Chr$(0))GetComputerName strName, 255MsgBox "Der Computer heißt: " & strName
End Sub
Listing 11.23 Den Computernamen ausgeben
11.23 Texte mit API-Funktionen konvertieren
Es ist möglich, mithilfe von API-Funktionen auch Texte zu konvertieren. So wandelt
die API-Funktion CharUpper einen Text in Großschreibweise um und entspricht dabei
der VBA-Funktion UCase. Die API-Funktion CharLower konvertiert einen vorgegebe-
nen Text in Kleinschreibweise und findet ihre Entsprechung in der VBA-Funktion
LCase.
4286-8.book Seite 642 Dienstag, 6. Dezember 2016 9:52 09
11.24 Die Zwischenablage löschen
643
11
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 str As String
str = "API-Funktionen sind ok!"Debug.Print "Originalzustand: " + strCharUpper strDebug.Print "GROß: " + strCharLower strDebug.Print "klein: " + str
End Sub
Listing 11.24 Texte konvertieren
Das Ergebnis der Konvertierungsfunktionen wird im Direktbereich ausgegeben.
11.24 Die Zwischenablage löschen
Möchten Sie die Zwischenablage durch eine API-Funktion löschen, verwenden Sie
den Code aus Listing 11.25:
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 ThenCall EmptyClipboardCall CloseClipboard
End IfEnd Sub
Listing 11.25 Zwischenablage löschen
4286-8.book Seite 643 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
644
Befindet sich etwas in der Zwischenablage, dann meldet die API-Funktion OpenClip-
board einen Wert <> 0. Die OpenClipboard-Funktion wird dazu verwendet, die Zwi-
schenablage zu öffnen, zu prüfen und zu verhindern, dass ihr Inhalt durch andere
Anwendungen geändert wird. Mit der GetClipboardData-Funktion werden die in der
Zwischenablage gespeicherten Daten zurückgegeben, während die CloseClipboard-
Funktion dazu dient, die Zwischenablage zu schließen und sie für andere Anwendun-
gen wieder verfügbar zu machen.
11.25 Soundkarte checken
Bevor Sie Klangdateien auf Ihrem Computer abspielen können, müssen Sie zunächst
einen Test durchführen, der Ihnen zeigt, ob überhaupt eine Soundkarte auf Ihrem
System verfügbar ist. Für diese Aufgabe können Sie die API-Funktion waveOutGetNum-
Devs einsetzen:
Private Declare Function waveOutGetNumDevs _Lib "winmm.dll" () As Long
Function PrüfenSound() As BooleanPrüfenSound = waveOutGetNumDevs()
End Function
Sub SoundMöglich()If PrüfenSound = True ThenMsgBox "Soundkarte verfügbar!", vbInformation
ElseMsgBox "Soundkarte verfügbar!", vbInformation
End IfEnd Sub
Listing 11.26 Überprüfen, ob die Soundkarte einsatzbereit ist
11.26 Sounds per API-Funktion ausgeben
Mithilfe von API-Funktionen können Sie auch Ihre Soundkarte ansprechen. Spielen
Sie zum Beispiel mit der API-Funktion sndPlaySound32 aus Listing 11.27 eine WAV-
Datei ab:
Declare Function sndPlaySound32 Lib "winmm.dll" Alias _"sndPlaySoundA" (ByVal lpszSoundName As String, _ByVal uFlags As Long) As Long
4286-8.book Seite 644 Dienstag, 6. Dezember 2016 9:52 09
11.28 Tasten abfangen
645
11
Sub SoundAusgeben()Call sndPlaySound32("c:\APPLAUSE.WAV", 0)
End Sub
Listing 11.27 Sounddatei abspielen
11.27 PC piepsen lassen
Soll Ihr PC dagegen nur einen Piepton abgeben, dann setzen Sie die API-Funktion
Beep ein:
Declare Function Beep Lib "kernel32.dll" _(ByVal dwFreq As Long, ByVal dwDuration As Long) _As Long
Sub ComputerPiepst()Dim lng As Long
lng = Beep(250, 1000)If lng = 0 ThenMsgBox "PC kann nicht piepsen!"
End IfEnd Sub
Listing 11.28 PC piepsen lassen
Die API-Funktion benötigt zwei Parameter. Im ersten Argument legen Sie fest, mit
wie viel Hertz der Piepton erzeugt werden soll. Mögliche noch hörbare Werte liegen
im Bereich zwischen 37 und 5500. Im zweiten Argument legen Sie die Dauer des Piep-
tons in Millisekunden fest.
11.28 Tasten abfangen
Durch den Einsatz von API-Funktionen können Sie bestimmte Tasten abfangen. Im
folgenden Beispiel wird die Taste (Esc) überwacht:
Type KeyboardByteskbb(0 To 255) As Byte
End Type
Declare Function GetKeyboardState Lib "User32.dll" _(kbArray As KeyboardBytes) As Long
4286-8.book Seite 645 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
646
Sub TasteESCAbfangen()Dim kbArray As KeyboardBytesDoDoEventsGetKeyboardState kbArrayIf kbArray.kbb(27) And 128 ThenESCgedrückt
End If' Makro beenden mit STRGLoop Until kbArray.kbb(17) And 128
End Sub
Sub ESCgedrückt()MsgBox "Sie haben die Taste ESC gedrückt"
End Sub
Listing 11.29 API-Funktion zum Abfangen von Tastenklicks
Starten Sie die Prozedur TasteESCAbfangen. Dieses Programm läuft im Hintergrund ab
und gibt jedes Mal eine Bildschirmmeldung aus, wenn Sie die Taste (Esc) drücken.
Drücken Sie die Taste (Strg), um diese Prozedur zu beenden und die Überwachung
der Taste (Esc) abzuschließen.
11.29 Dateien suchen
Mit der API-Funktion SearchTreeForFile können Sie auch Dateien suchen und deren
Speicherpfad ermitteln:
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 str As StringDim lng As Long
str = String(Verzeichnisse, 0)lng = SearchTreeForFile("C:\", "Umsatz2010.xls", str)If lng <> 0 ThenMsgBox "Datei wurde gefunden: " & vbLf & _str, vbInformation
4286-8.book Seite 646 Dienstag, 6. Dezember 2016 9:52 09
11.30 Dateiinformationen auslesen
647
11
ElseMsgBox "Datei konnte nicht gefunden werden!", _vbCritical
End IfEnd Sub
Listing 11.30 Datei über eine API-Funktion suchen
11.30 Dateiinformationen auslesen
Mithilfe von API-Funktionen lassen sich Datumsinformationen zu Dateien ermit-
teln. So werden im folgenden Beispiel das Erstellungsdatum, das letzte Zugriffsda-
tum sowie das letzte Speicherdatum einer Datenbank ermittelt:
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 FILETIMEdwLowDateTime As LongdwHighDateTime As Long
End Type
Public Type SYSTEMTIMEwYear As IntegerwMonth As IntegerwDayOfWeek As IntegerwDay As IntegerwHour As IntegerwMinute As IntegerwSecond As IntegerwMilliseconds As Long
End Type
4286-8.book Seite 647 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
648
Public Type WIN32_FIND_DATAdwFileAttributes As LongftCreationTime As FILETIMEftLastAccessTime As FILETIMEftLastWriteTime As FILETIMEftName As String * 150
End Type
Private Function DatPrüf(FT As FILETIME) As StringDim ST As SYSTEMTIMEDim LT As FILETIMEDim lngt As LongDim lngDatum As DoubleDim lngZeit As Double
lngt = FileTimeToLocalFileTime(FT, LT)lngt = FileTimeToSystemTime(LT, ST)If lngt ThenlngDatum = DateSerial(ST.wYear, ST.wMonth, ST.wDay)lngZeit = TimeSerial(ST.wHour, ST.wMinute, _ST.wSecond)lngDatum = lngDatum + lngZeit
If lngDatum > 0 ThenDatPrüf = Format$(lngDatum, "dd.mm.yy hh:mm:ss")
ElseDatPrüf = "kein gültiges Datum"
End IfEnd If
End Function
Sub DateiInfoDialog()Dim hFile As LongDim WFD As WIN32_FIND_DATADim strDatei As StringDim strErstellt As StringDim strGespeichert As StringDim strZugriff As String
strDatei = Application.CurrentDb.NamehFile = FindFirstFile(strDatei, WFD)
If hFile > 0 ThenstrErstellt = DatPrüf(WFD.ftCreationTime)
4286-8.book Seite 648 Dienstag, 6. Dezember 2016 9:52 09
11.31 Ist die Internetverbindung aktiv?
649
11
strGespeichert = DatPrüf(WFD.ftLastWriteTime)strZugriff = DatPrüf(WFD.ftLastAccessTime)MsgBox "Datei angelegt: " & strErstellt & vbLf _& "Letzte Änderung: " & strGespeichert & vbLf _& "Letzter Zugriff: " & strZugriff, _vbInformation, strDatei
ElseMsgBox "Datei wurde nicht gefunden!", vbCritical, _strDatei
End IfEnd Sub
Listing 11.31 Dateiinformationen auslesen
Mit der Anweisung Application.CurrentDb.Name ermitteln Sie den Namen der aktuell
geöffneten Datenbank. Diesen Namen übergeben Sie an die API-Funktion FindFirst-
File. Danach übergeben Sie die Dateiinformationen an die Funktion DatPrüf. Dort
werden die gewünschten Informationen ermittelt, in das richtige Format gebracht
und an die aufrufende Prozedur zurückgegeben. Hier werden alle Informationen
zusammengefasst und in einer Bildschirmmeldung ausgegeben.
11.31 Ist die Internetverbindung aktiv?
Wenn Sie mit einer VBA-Prozedur auf das Internet zugreifen möchten, dann sollten
Sie vorher prüfen, ob Sie überhaupt mit dem Internet verbunden sind.
Public Declare Function InternetGetConnectedState _Lib "wininet.dll" _(ByRef lpdwFlags As Long, _ByVal dwReserved As Long) As Long
Sub InternetAktiv()Dim bool As Boolean
bool = InternetGetConnectedState(0&, 0&)If bool = True ThenMsgBox "Internetverbindung steht!"
ElseMsgBox "Internetverbindung fehlt!!"
End IfEnd Sub
Listing 11.32 Internetverbindung überprüfen
4286-8.book Seite 649 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
650
Über die API-Funktion InternetGetConnectedState lässt sich ermitteln, ob eine Ver-
bindung mit dem Internet besteht. Wenn ja, dann meldet diese Funktion den Wert
True zurück, den Sie auswerten können.
11.31.1 Eine E-Mail erstellen
Sie können eine API-Funktion nutzen, wenn Sie unabhängig vom E-Mail-Programm
eine E-Mail versenden möchten.
Private Declare Function ShellExecute Lib "Shell32.dll" _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", "mailto:" + eMail + "?Subject=
" + Subject + "&Body=" + Body, "", "", 1)End Sub
Sub Mail_versenden()Call Mail("[email protected]", "Hilfe", "es brennt...")
End Sub
Listing 11.33 API-Funktion zum Erstellen einer E-Mail
Über die API-Funktion ShellExecute können Sie unter anderem eine E-Mail zusam-
menstellen. Dabei können Sie den Adressaten, den Titel und den E-Mail-Text angeben.
Abbildung 11.1 Eine Standard-E-Mail per API-Funktion erstellen
4286-8.book Seite 650 Dienstag, 6. Dezember 2016 9:52 09
11.32 Cursorposition in Pixel angeben
651
11
11.32 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 An-
gabe in der A1-Schreibweise sagt aber nicht aus, wo der Mauszeiger genau steht. Die
genaue Position des Mauszeigers können Sie nur über die API-Funktion GetCursorPos
bestimmen. Je nach Breite der Spalten bzw. Höhe der Zeilen ändern sich dann die
Koordinaten.
Declare Function GetCursorPos Lib "user32" _(lpPoint As POINTAPI) As Long
Type POINTAPIx As Longy As Long
End Type
Sub KoordinatenErmitteln()Dim pnt As POINTAPIDim i As Integer
i = GetCursorPos(pnt)If i <> 0 ThenMsgBox "X-Position: " & pnt.x & vbLf & _"Y-Position: " & pnt.y, vbInformation
ElseMsgBox "Es konnte keine Position ermittelt werden"
End IfEnd Sub
Listing 11.34 Punktgenaue Koordinaten ermitteln
Definieren Sie zuerst die Struktur POINTAPI, in der Sie die Position des Mauszeigers in
Form der Pixel-Koordinaten speichern. Wenden Sie im Anschluss daran die API-
Funktion GetCursorPos an, die Ihnen die aktuelle Position des Mauszeigers liefert.
Geben Sie die Koordinaten danach in einer Meldung auf dem Bildschirm aus.
11.32.1 Den Standarddrucker per API abfragen
Mit der API-Funktion GetProfileString können Sie unter anderem Ihren Standard-
drucker abfragen.
Private Declare Function GetProfileString Lib "kernel32" _Alias "GetProfileStringA" (ByVal lpAppName As String, _
4286-8.book Seite 651 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
652
ByVal lpKeyName As String, ByVal lpDefault As String, _ByVal lpReturnedString As String, ByVal nSize As Long) _As Long
Sub StandardDruckerErmitteln()Dim strDruckername As String
Call AbfrageDrucker(strDruckername)MsgBox "Der Standarddrucker heißt: " & strDruckername
End Sub
Private Sub AbfrageDrucker(strDruckername As String)Dim Buffer As StringDim r As LongDim x As Long
Buffer = Space(8192)r = GetProfileString("windows", "Device", "", Buffer, Len(Buffer))If r > 0 ThenBuffer = Mid(Buffer, 1, r)x = InStr(Buffer, ",")strDruckername = Mid(Buffer, 1, x - 1)
End If
End Sub
Listing 11.35 API-Funktion zum Ermitteln des Standarddruckers
11.32.2 Texte über MD5 verschlüsseln
Um Dateien auf Integrität zu prüfen oder Passwörter in einer Datenbank zu spei-
chern, wird häufig auf den MD5-Algorithmus zurückgegriffen. VBA selbst stellt keine
Funktionalitäten dafür zur Verfügung, aber die API advapi32.dll (standardmäßig be-
reits unter Windows vorhanden) bietet einige der benötigten Hash-Funktionen.
Der Rückgabewert der Funktion ist für den gleichen Text immer derselbe. So müssen
Sie beispielsweise ein Passwort nicht als Klartext in einer Datenbank oder Tabelle
speichern, sondern nur seinen MD5-Wert, und dann beim Vergleich immer das ein-
gegebene Passwort mit dem gespeicherten MD5-Wert vergleichen.
Private Declare Function CryptAcquireContext Lib "advapi32.dll" _Alias "CryptAcquireContextA" ( _ByRef phProv As Long, _ByVal pszContainer As String, _
4286-8.book Seite 652 Dienstag, 6. Dezember 2016 9:52 09
11.32 Cursorposition in Pixel angeben
653
11
ByVal pszProvider As String, _ByVal dwProvType As Long, _ByVal dwFlags As Long) As Long
Private Declare Function CryptReleaseContext Lib "advapi32.dll" ( _ByVal hProv As Long, _ByVal dwFlags As Long) As Long
Private Declare Function CryptCreateHash Lib "advapi32.dll" ( _ByVal hProv As Long, _ByVal Algid As Long, _ByVal hKey As Long, _ByVal dwFlags As Long, _ByRef phHash As Long) As Long
Private Declare Function CryptDestroyHash Lib "advapi32.dll" ( _ByVal hHash As Long) As Long
Private Declare Function CryptHashData Lib "advapi32.dll" ( _ByVal hHash As Long, _pbData As Byte, _ByVal dwDataLen As Long, _ByVal dwFlags As Long) As Long
Private Declare Function CryptGetHashParam Lib "advapi32.dll" ( _ByVal hHash As Long, _ByVal dwParam As Long, _pbData As Any, _pdwDataLen As Long, _ByVal dwFlags As Long) As Long
Sub MD5Test()
Debug.Print "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern."Debug.Print _InMD5("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern.")
End Sub
Function InMD5(Text As String) As StringDim AcquireContext As LongDim HashHandle As LongDim result As Long
4286-8.book Seite 653 Dienstag, 6. Dezember 2016 9:52 09
11 API-Funktionen einsetzen
654
Dim ByteText() As ByteDim LenResult As LongDim ByteResult() As ByteDim i As IntegerByteText() = StrConv(Text, vbFromUnicode)
'Ermittle Context Handleresult = CryptAcquireContext _(AcquireContext, vbNullString, vbNullString, 1, 0)If result = 0 And Err.LastDllError = &H80090016 Then
result = CryptAcquireContext(AcquireContext, _vbNullString, vbNullString, 1, &H8)
End Ifresult = CryptCreateHash(AcquireContext, 32771, 0, 0, HashHandle)result = CryptHashData(HashHandle, ByteText(0), Len(Text), 0)result = CryptGetHashParam(HashHandle, 4, LenResult, 4, 0)ReDim ByteResult(0 To LenResult - 1) As Byteresult = CryptGetHashParam(HashHandle, 2, ByteResult(0), LenResult, 0)
For i = 0 To UBound(ByteResult)InMD5 = InMD5 & Right$("0" & Hex$(ByteResult(i)), 2)
NextCryptDestroyHash HashHandleCryptReleaseContext AcquireContext, 0
End Function
Listing 11.36 API-Funktion zum Verschlüsseln von Passwörtern
Abbildung 11.2 Der Text wurde verschlüsselt.
4286-8.book Seite 654 Dienstag, 6. Dezember 2016 9:52 09
Auf einen Blick
Auf einen Blick
1 Grundsätzliches zur Programmierung ..................................................... 25
2 Variablen, Konstanten und Datentypen .................................................. 53
3 Die wichtigsten Sprachelemente in Access ............................................. 85
4 Ein Streifzug in die Welt der Objekte ........................................................ 195
5 Tabellen programmieren ............................................................................ 237
6 Abfragen programmieren ........................................................................... 297
7 Programmierung von Dialogen, Steuerelementen und Formularen .... 335
8 Berichte erstellen und programmieren .................................................... 439
9 Ereignisse in Access programmieren ........................................................ 481
10 Access im Zusammenspiel mit Office ....................................................... 547
11 API-Funktionen einsetzen .......................................................................... 623
12 Datenbanken und Quellcode schützen und pflegen .............................. 655
13 VBE-Programmierung in Access ................................................................ 669
14 Anwendungen optimieren ......................................................................... 701
15 Access und das Internet .............................................................................. 711
16 Ribbons programmieren ............................................................................. 737
17 FAQ für Access-Entwickler .......................................................................... 747
4286-8.book Seite 3 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
5
Inhalt
Vorwort .................................................................................................................................................. 21
1 Grundsätzliches zur Programmierung 25
1.1 Wie gehe ich von Anfang an richtig vor? .................................................................. 26
1.2 Die Entwicklungsumgebung von Access .................................................................. 28
1.2.1 Das Eigenschaften-Fenster ............................................................................... 29
1.2.2 Prozeduren ausführen ........................................................................................ 32
1.2.3 Wie erfahre ich mehr über die einzelnen Befehle? .................................. 32
1.3 Hilfsmittel für die Programmierung ........................................................................... 33
1.3.1 Die Symbolleiste »Bearbeiten« ........................................................................ 33
1.3.2 Automatische Syntaxprüfung ......................................................................... 40
1.3.3 Mit Tastenkombinationen arbeiten .............................................................. 41
1.4 Die Fenster und die Testumgebung ............................................................................ 42
1.4.1 Das Code-Fenster ................................................................................................. 43
1.4.2 Hilfe im Direktfenster ......................................................................................... 44
1.4.3 Den Code Schritt für Schritt durchlaufen lassen ....................................... 45
1.4.4 Überwachung hinzufügen ................................................................................ 46
1.4.5 Das Lokal-Fenster ................................................................................................. 48
1.5 Weitere Einstellungen ...................................................................................................... 49
1.5.1 Editor-Einstellungen ........................................................................................... 49
1.5.2 Allgemeine Einstellungen vornehmen ......................................................... 50
1.5.3 Fenster verankern ................................................................................................ 52
2 Variablen, Konstanten und Datentypen 53
2.1 Regeln für die Syntax von Variablen .......................................................................... 54
2.2 Variablen am Beginn der Prozedur deklarieren .................................................... 54
2.3 Die verschiedenen Variablentypen ............................................................................. 55
2.3.1 Statische Variablen .............................................................................................. 55
2.3.2 Private Variablen .................................................................................................. 56
2.3.3 Öffentliche Variablen ......................................................................................... 56
2.4 Variablendeklarationen erzwingen ............................................................................ 57
4286-8.book Seite 5 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
6
2.5 Die wichtigsten Variablentypen ................................................................................... 58
2.6 Noch kürzere Deklaration von Variablen ................................................................. 60
2.7 Die Reddick-Namenskonvention ................................................................................. 61
2.8 Variablendeklaration mit »DefType« ........................................................................ 62
2.9 Aufzählungstypen (»Enum«-Anweisung) ................................................................ 63
2.10 Konstanten verwenden .................................................................................................... 64
2.11 Systemkonstanten einsetzen ........................................................................................ 65
2.11.1 Datumsformat-Konstanten .............................................................................. 65
2.11.2 »Dir«-Konstanten ................................................................................................. 70
2.11.3 File-Input/Output-Konstanten ........................................................................ 72
2.11.4 Die Shell-Konstanten .......................................................................................... 76
2.11.5 »StrConv«-Konstanten ....................................................................................... 78
2.11.6 »VarType«-Konstanten ...................................................................................... 79
2.11.7 Die »DoCmd.RunCommand«-Konstanten .................................................. 82
3 Die wichtigsten Sprachelemente in Access 85
3.1 Prozeduren ............................................................................................................................. 85
3.1.1 Sub-Prozeduren .................................................................................................... 86
3.1.2 Function-Prozeduren .......................................................................................... 90
3.1.3 Übergabe von Argumenten .............................................................................. 92
3.1.4 Optionale Argumente ......................................................................................... 95
3.2 Verzweigungen/Bedingungen ...................................................................................... 95
3.2.1 Eingaben auswerten ........................................................................................... 96
3.2.2 Eingaben prüfen und umwandeln ................................................................. 98
3.2.3 Eine Besonderheit ................................................................................................ 101
3.3 Die Anweisung »Select Case« für mehr Übersicht ............................................... 102
3.3.1 Zahlenwerte mit »Select Case« prüfen ......................................................... 102
3.3.2 Textwerte mit »Select Case« prüfen ............................................................. 104
3.4 Schleifen in Access einsetzen ......................................................................................... 105
3.4.1 »For ... Next«-Schleifen ....................................................................................... 105
3.4.2 »For Each ... Next«-Schleifen ............................................................................ 108
3.4.3 Die Schleife »Do Until … Loop« ........................................................................ 113
3.4.4 Die Schleife »Do While ... Loop« ...................................................................... 115
3.5 »With«-Anweisungen ....................................................................................................... 117
4286-8.book Seite 6 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
7
3.6 VBA-Funktionen einsetzen ............................................................................................. 118
3.6.1 Textdateien einlesen .......................................................................................... 118
3.6.2 Eingegebene E-Mail-Adressen prüfen ........................................................... 120
3.6.3 Textteile extrahieren .......................................................................................... 121
3.6.4 Dateiendungen prüfen ....................................................................................... 123
3.6.5 Texte kürzen und extrahieren ......................................................................... 125
3.6.6 Texte splitten ......................................................................................................... 128
3.6.7 Texte zerlegen, konvertieren und wieder zusammensetzen ................ 129
3.6.8 Texte bereinigen ................................................................................................... 131
3.6.9 Zahlenwerte runden ........................................................................................... 131
3.6.10 Dateien löschen .................................................................................................... 132
3.6.11 Verzeichnis(se) erstellen .................................................................................... 133
3.6.12 Verzeichnisse löschen ......................................................................................... 135
3.6.13 Wochentag ermitteln ......................................................................................... 136
3.6.14 Monat ermitteln ................................................................................................... 137
3.6.15 Datumsteile extrahieren ................................................................................... 138
3.6.16 Datumsberechnungen durchführen ............................................................. 139
3.6.17 Zukünftige Termine berechnen ...................................................................... 139
3.6.18 Datumsangaben formatieren .......................................................................... 141
3.6.19 Zeitfunktionen einsetzen .................................................................................. 143
3.6.20 Farbfunktionen verwenden .............................................................................. 145
3.6.21 Werte aus einer Liste auswählen .................................................................... 148
3.6.22 Ganzzahligen Wert extrahieren ...................................................................... 149
3.7 Umwandlungsfunktionen ............................................................................................... 150
3.7.1 Die Typumwandlungsfunktion »CBool« ...................................................... 151
3.7.2 Die Typumwandlungsfunktion »CDbl« ........................................................ 154
3.7.3 Die Typumwandlungsfunktion »CDate« ..................................................... 154
3.7.4 Die Funktion »Val« ............................................................................................... 155
3.8 Die »Is«-Funktionen in VBA ............................................................................................ 157
3.8.1 Die Funktion »IsArray« ....................................................................................... 157
3.8.2 Die Funktion »IsDate« ........................................................................................ 159
3.8.3 Die Funktionen »IsEmpty« und »IsNull« ...................................................... 159
3.8.4 Die Funktion »IsObject« ..................................................................................... 161
3.8.5 Arbeiten mit Arrays ............................................................................................. 162
3.8.6 Einfache Arrays ..................................................................................................... 162
3.8.7 Mehrdimensionale Arrays ................................................................................. 163
3.8.8 Das Praxisbeispiel »Straßentausch« .............................................................. 166
3.8.9 Das Praxisbeispiel »Top 3 Max« und »Top 3 Min« .................................... 169
3.9 Operatoren ............................................................................................................................. 174
3.9.1 Arithmetische Operatoren ................................................................................ 174
4286-8.book Seite 7 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
8
3.9.2 Vergleichsoperatoren ......................................................................................... 175
3.9.3 Verkettungsoperatoren ..................................................................................... 176
3.9.4 Logische Operatoren ........................................................................................... 177
3.10 Eigene Funktionen schreiben ........................................................................................ 178
3.10.1 Dateien in einem Verzeichnis zählen ............................................................ 178
3.10.2 Prüfen, ob eine bestimmte Datei existiert .................................................. 179
3.10.3 Prüfen, ob eine Datei gerade bearbeitet wird ............................................ 180
3.10.4 Dokumenteigenschaften einer Datenbank ermitteln ............................. 181
3.10.5 Den letzten Tag im Monat ermitteln ............................................................ 183
3.10.6 Sonderzeichen aus Strings entfernen ........................................................... 184
3.10.7 Eine eigene Runden-Funktion erstellen ....................................................... 185
3.10.8 Die Position der ersten Zahl eines Strings ermitteln ............................... 187
3.10.9 Buchstaben eliminieren ..................................................................................... 188
3.10.10 Römische Ziffern in arabische Ziffern umwandeln .................................. 189
3.10.11 Arabische Zahlen in die römische Syntax umwandeln ........................... 191
3.10.12 Die Anzahl der Zahlen in einem String ermitteln ..................................... 192
3.10.13 Die Anzahl der Buchstaben in einem String zählen ................................. 192
4 Ein Streifzug in die Welt der Objekte 195
4.1 Das »Application«-Objekt ............................................................................................... 195
4.1.1 Datenbankinformationen erhalten ............................................................... 196
4.1.2 Aktuellen Anwendernamen ermitteln .......................................................... 197
4.1.3 Installierte Drucker ermitteln .......................................................................... 197
4.1.4 Datenbank schließen .......................................................................................... 198
4.1.5 Access beenden .................................................................................................... 198
4.1.6 Aktuelle Access-Version ausgeben ................................................................. 199
4.1.7 Formular anlegen ................................................................................................. 199
4.1.8 Durchschnitt errechnen ..................................................................................... 201
4.1.9 Summen ermitteln .............................................................................................. 201
4.1.10 Datensätze zählen ............................................................................................... 202
4.1.11 Minimal- und Maximalwerte ermitteln ....................................................... 202
4.2 Das Objekt »AccessObject« ............................................................................................ 203
4.3 Das Objekt »CodeData« ................................................................................................... 207
4.4 Das Objekt »DoCmd« ........................................................................................................ 208
4.4.1 Berichte aufrufen ................................................................................................. 208
4.4.2 Tabellen nach Excel exportieren ..................................................................... 211
4.4.3 Formular aufrufen und Vorauswahl treffen ............................................... 212
4286-8.book Seite 8 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
9
4.5 Integrierte Dialoge einsetzen ........................................................................................ 215
4.5.1 Das Dialogfeld »Öffnen« anzeigen ................................................................ 216
4.5.2 Verzeichnis einstellen ......................................................................................... 218
4.5.3 Dateien per Filtereinstellung suchen ............................................................ 219
4.5.4 Weitere Dialogfelder verwenden ................................................................... 221
4.6 Das Objekt »FileSystemObject« ................................................................................... 221
4.6.1 Computerinformationen anzeigen ................................................................ 223
4.6.2 Verzeichnisse ermitteln ..................................................................................... 223
4.6.3 Tastenkombinationen programmieren ........................................................ 225
4.6.4 Website-Zugang ganz fix .................................................................................. 226
4.6.5 Laufwerke mappen .............................................................................................. 227
4.6.6 Gemappte Laufwerke anzeigen ...................................................................... 229
4.6.7 Laufwerk auswerten ........................................................................................... 229
4.6.8 Aktuelle Datenbank sichern ............................................................................. 231
4.6.9 Datenbank-Datumsangaben auswerten ..................................................... 232
4.6.10 Verzeichnisstruktur auslesen ........................................................................... 234
5 Tabellen programmieren 237
5.1 Tabellen bearbeiten mit »DoCmd« ............................................................................. 237
5.1.1 Tabelle öffnen ....................................................................................................... 238
5.1.2 Tabellen filtern ...................................................................................................... 243
5.1.3 Tabellen kopieren ................................................................................................. 246
5.1.4 Tabellen umbenennen ....................................................................................... 246
5.2 Tabellen mit ADO programmieren .............................................................................. 247
5.2.1 Tabelleninhalte auslesen .................................................................................. 248
5.3 SQL-Anweisungen ............................................................................................................... 251
5.3.1 Die SELECT-Anweisung ...................................................................................... 251
5.3.2 UNION-Anweisung .............................................................................................. 253
5.3.3 Die TOP-Anweisung ............................................................................................ 255
5.3.4 Eine externe Datenbank öffnen ...................................................................... 256
5.3.5 Tabelleninhalte suchen und ausgeben ........................................................ 258
5.3.6 Lagerbestände manipulieren ........................................................................... 266
5.3.7 Preiserhöhung durchführen ............................................................................. 267
5.3.8 Tabellen updaten ................................................................................................. 270
5.3.9 Artikel bewerten ................................................................................................... 271
5.3.10 Datensätze filtern ................................................................................................ 272
5.3.11 Datensätze sortieren .......................................................................................... 273
5.3.12 Datensätze zählen ............................................................................................... 276
4286-8.book Seite 9 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
10
5.3.13 Lesezeichen einsetzen ........................................................................................ 278
5.3.14 Datensätze löschen ............................................................................................. 279
5.3.15 Datensätze hinzufügen ..................................................................................... 281
5.4 Tabellenstrukturen mit ADOX ermitteln .................................................................. 283
5.4.1 Tabellen auslesen ................................................................................................ 283
5.4.2 Tabellenstruktur auslesen ................................................................................ 286
5.4.3 Eine neue Tabelle anlegen ................................................................................ 289
5.4.4 Tabellen löschen ................................................................................................... 292
5.5 Datenbanken suchen und dokumentieren .............................................................. 293
6 Abfragen programmieren 297
6.1 Abfragetypen ........................................................................................................................ 297
6.2 Abfragen durchführen ...................................................................................................... 299
6.3 Abfragen mit SQL generieren ........................................................................................ 301
6.4 Aktualisierungsabfrage – Artikelnamen ändern .................................................. 301
6.4.1 Aktualisierungsabfrage – Felder initialisieren ........................................... 302
6.5 Anfügeabfrage – Mitarbeiter hinzufügen ............................................................... 304
6.6 Löschabfrage ausführen ................................................................................................... 307
6.7 Tabellenerstellungsabfrage durchführen ................................................................ 310
6.7.1 Öffnen oder neu anlegen .................................................................................. 311
6.8 Datendefinitionsabfragen durchführen ................................................................... 312
6.8.1 Neue Tabelle anlegen ......................................................................................... 313
6.8.2 Tabellen ändern .................................................................................................... 317
6.8.3 Einen Tabellenindex bestimmen .................................................................... 318
6.8.4 Tabellenindex entfernen ................................................................................... 320
6.8.5 Tabelle entfernen ................................................................................................. 321
6.9 Daten zusammenführen .................................................................................................. 321
6.10 Abfragen mit ADO programmieren ............................................................................ 324
6.10.1 Tabellen durch eine Abfrage erstellen .......................................................... 324
6.10.2 Daten aus Tabelle entfernen ............................................................................ 326
6.10.3 Eine Abfrage erstellen ........................................................................................ 326
6.10.4 Komplexere Abfragen generieren .................................................................. 328
6.10.5 Parameterabfragen erstellen ........................................................................... 332
4286-8.book Seite 10 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
11
7 Programmierung von Dialogen, Steuerelementen und Formularen 335
7.1 Das Meldungsfeld »MsgBox« ........................................................................................ 336
7.1.1 Welche Schaltfläche wurde angeklickt? ....................................................... 337
7.1.2 Löschrückfrage einholen ................................................................................... 338
7.1.3 Informationen anzeigen .................................................................................... 339
7.1.4 Ist eine bestimmte Datenbank vorhanden? ............................................... 340
7.2 Die Eingabemaske »InputBox« ..................................................................................... 340
7.2.1 Mehrwertsteuer errechnen .............................................................................. 341
7.2.2 Mehrere Eingaben erfassen .............................................................................. 342
7.3 Formulare erstellen ............................................................................................................ 343
7.3.1 Formulare selbst zusammenstellen .............................................................. 345
7.3.2 Die Steuerelemente aus der Toolbox ............................................................ 346
7.3.3 Steuerelemente einfügen ................................................................................. 349
7.3.4 Formularfelder bearbeiten ................................................................................ 350
7.3.5 Aktivierreihenfolge anpassen .......................................................................... 351
7.3.6 Formularfelder formatieren ............................................................................. 352
7.3.7 Formulareigenschaften einstellen ................................................................. 353
7.3.8 Steuerelementeigenschaften einstellen ...................................................... 358
7.3.9 Bedingte Formatierung ...................................................................................... 362
7.3.10 Schaltflächen einfügen ...................................................................................... 365
7.3.11 Weitere wichtige Schaltflächen integrieren ............................................... 368
7.3.12 Steuerelemente identifizieren ......................................................................... 373
7.3.13 Formular aufrufen ............................................................................................... 378
7.3.14 Formular schließen .............................................................................................. 380
7.3.15 Textfelder programmieren ............................................................................... 381
7.3.16 Textfeldinhalte retten ........................................................................................ 385
7.3.17 Quickinfos hinzufügen ....................................................................................... 386
7.3.18 Textfelder aktivieren und sperren .................................................................. 387
7.3.19 Eingaben in Textfelder zaubern ...................................................................... 389
7.3.20 Textfelder dynamisch ein- und ausblenden ............................................... 393
7.3.21 Textfelder begrenzen .......................................................................................... 395
7.3.22 Datentyp bei Eingabe überwachen ................................................................ 396
7.3.23 Bezeichnungsfelder einsetzen ......................................................................... 396
7.3.24 Kombinationsfeldlisten erstellen und programmieren .......................... 398
7.3.25 Listenfelder programmieren ............................................................................ 404
7.3.26 Kontrollkästchen programmieren .................................................................. 411
4286-8.book Seite 11 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
12
7.3.27 Optionsschaltflächen programmieren ......................................................... 414
7.3.28 Registerelemente programmieren ................................................................. 418
7.3.29 Die Uhr im Formular ........................................................................................... 422
7.3.30 Das »TreeView«-Steuerelement ..................................................................... 425
7.3.31 Das Media-Player-Steuerelement .................................................................. 426
7.3.32 Einen Hyperlink in ein Formular integrieren .............................................. 428
7.3.33 »ImageList« und »ListView« programmieren ............................................. 430
7.3.34 Diagramme in Formulare integrieren ........................................................... 433
8 Berichte erstellen und programmieren 439
8.1 Berichtsarten in Access ..................................................................................................... 439
8.2 Der Berichtsaufbau ............................................................................................................. 440
8.3 Berichte entwerfen ............................................................................................................ 441
8.4 Berichte bearbeiten mit »DoCmd« ............................................................................. 442
8.4.1 Berichte öffnen ..................................................................................................... 442
8.4.2 Bericht aus einer anderen Datenbank öffnen ............................................ 443
8.4.3 Bericht mit Vorauswahl öffnen ....................................................................... 444
8.4.4 Berichte drucken .................................................................................................. 446
8.4.5 Berichte kopieren und umbenennen ............................................................ 447
8.4.6 Berichte ausgeben ............................................................................................... 449
8.5 Berichte formatieren ......................................................................................................... 449
8.5.1 Rot und Weiß im Wechsel ................................................................................. 449
8.5.2 Schriftformatierungen anwenden ................................................................. 450
8.6 Berichte identifizieren ...................................................................................................... 454
8.6.1 Berichte zählen ..................................................................................................... 455
8.6.2 Berichtselemente ansprechen ......................................................................... 455
8.6.3 Berichtselemente auflisten .............................................................................. 456
8.6.4 Die verschiedenen Sektionen eines Berichts .............................................. 460
8.7 Berichte erstellen ................................................................................................................ 461
8.7.1 Steuerelemente einfügen ................................................................................. 462
8.7.2 Vollautomatische Berichtserstellung ............................................................ 465
8.7.3 Bereiche vergrößern ............................................................................................ 467
8.7.4 Bereiche ein- und ausblenden ......................................................................... 469
8.7.5 Seitenzahlen, Datum und Namen .................................................................. 471
8.7.6 Überschriften, Trennlinien und Summen .................................................... 474
4286-8.book Seite 12 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
13
9 Ereignisse in Access programmieren 481
9.1 Das Ereignis »Form_Open« ............................................................................................. 482
9.1.1 Zugang zu einem Formular einrichten ......................................................... 482
9.1.2 Den Fokus auf ein bestimmtes Formularfeld setzen ............................... 483
9.1.3 Verknüpfte Tabelle eines Formulars prüfen ............................................... 484
9.2 Das Ereignis »Form_Close« ............................................................................................. 485
9.2.1 Weitere Formulare und Tabellen schließen ................................................ 485
9.2.2 Countdown programmieren ............................................................................ 487
9.2.3 Öffnen nach dem Schließen ............................................................................. 487
9.3 Das Ereignis »Form_Load« .............................................................................................. 488
9.3.1 Beim Laden des Formulars ein Listenfeld füllen ........................................ 488
9.4 Das Ereignis »Form_Current« ........................................................................................ 490
9.4.1 Letzter Datensatz erreicht? .............................................................................. 490
9.4.2 Felder ein- und ausblenden .............................................................................. 491
9.4.3 Titelleiste dynamisch verändern ..................................................................... 493
9.5 Das Ereignis »Form_AfterInsert« ................................................................................. 494
9.5.1 Reaktion auf die Anlage eines neuen Satzes .............................................. 494
9.6 Das Ereignis »Form_BeforeInsert« .............................................................................. 496
9.6.1 Felder automatisch vorbelegen ...................................................................... 496
9.6.2 Eingabemöglichkeit beschränken .................................................................. 498
9.7 Das Ereignis »Form_BeforeUpdate« .......................................................................... 499
9.7.1 Rückfrage einholen .............................................................................................. 499
9.7.2 Eingaben prüfen ................................................................................................... 500
9.7.3 Eingabe in Formularfeld erzwingen .............................................................. 502
9.7.4 Letztes Änderungsdatum anzeigen ............................................................... 502
9.7.5 Alle Änderungen am Datenbestand dokumentieren .............................. 503
9.7.6 Neuanlage verhindern ........................................................................................ 504
9.7.7 Keine Änderungen zulassen ............................................................................. 505
9.8 Das Ereignis »Form_AfterUpdate« .............................................................................. 505
9.9 Das Ereignis »Form_Delete« .......................................................................................... 505
9.9.1 Löschung verhindern bei Kriterium ............................................................... 505
9.9.2 Löschung mehrerer Datensätze verhindern ............................................... 506
9.10 Das Ereignis »Form_Dirty« ............................................................................................. 509
9.10.1 Änderungen sofort speichern .......................................................................... 509
9.11 Das Ereignis »BeforeDelConfirm« ............................................................................... 509
9.11.1 Die Standardlöschabfrage ersetzen ............................................................... 509
4286-8.book Seite 13 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
14
9.12 Das Ereignis »Form_AfterDelConfirm« ..................................................................... 511
9.12.1 Löschung bestätigen ........................................................................................... 511
9.13 Das Ereignis »Form_Activate« ...................................................................................... 511
9.13.1 Formular maximieren ......................................................................................... 511
9.13.2 Fokus setzen .......................................................................................................... 512
9.13.3 Einen bestimmten Datensatz im Formular einstellen ............................ 512
9.13.4 Formular aktualisieren ....................................................................................... 513
9.14 Das Ereignis »Form_Deactivate« ................................................................................. 514
9.15 Das Ereignis »Form_Resize« ........................................................................................... 515
9.15.1 Steuerelemente automatisch anpassen ...................................................... 515
9.16 Das Ereignis »Form_DblClick« ....................................................................................... 517
9.16.1 Ein schneller Sprung zwischen den Ansichten ........................................... 517
9.16.2 Verkaufsraum-Formular erstellen .................................................................. 518
9.17 Das Ereignis »Click« ........................................................................................................... 520
9.17.1 Datum und Uhrzeit ausgeben ......................................................................... 520
9.18 Die Ereignisse »MouseDown« und »MouseUp« ................................................... 521
9.18.1 Welche Maustaste wurde gedrückt? ............................................................. 522
9.18.2 Auf Textfeld-Mausklick reagieren .................................................................. 523
9.18.3 Schaltflächenfarbe verändern ......................................................................... 524
9.18.4 Kontextmenü deaktivieren ............................................................................... 526
9.19 Das Ereignis »MouseMove« ........................................................................................... 526
9.19.1 Spezialeffekte für Textfelder einsetzen ....................................................... 526
9.20 Das Ereignis »Schaltfläche_Click« ............................................................................... 529
9.21 Die Ereignisse »GotFocus« und »LostFocus« .......................................................... 529
9.21.1 Formularfelder bei Eintritt färben .................................................................. 529
9.22 Die »Key«-Ereignisse ......................................................................................................... 530
9.22.1 Welche Tastaturtaste wurde gedrückt? ....................................................... 530
9.22.2 Datumsfelder automatisch erhöhen ............................................................. 532
9.22.3 Datum und Zeit einfügen .................................................................................. 533
9.23 Das Ereignis »Steuerelement_BeforeUpdate« ...................................................... 534
9.23.1 Ist Artikel x schon angelegt? ............................................................................ 535
9.23.2 Eingaben vervollständigen ............................................................................... 536
9.23.3 Postleitzahl prüfen .............................................................................................. 538
9.23.4 Löschen von Eingaben rückgängig machen ................................................ 539
9.24 Das Ereignis »Steuerelement_Enter« ........................................................................ 540
9.24.1 Vorabinformationen geben .............................................................................. 540
4286-8.book Seite 14 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
15
9.25 Das Ereignis »Steuerelement_Exit« ........................................................................... 542
9.25.1 Nachfrage starten ................................................................................................ 542
9.26 Die Reihenfolge der Ereignisse ...................................................................................... 543
9.26.1 Die Reihenfolge beim Öffnen und Schließen eines Formulars ............. 543
9.26.2 Die Aktivierreihenfolge bei Steuerelementen ............................................ 544
9.26.3 Die Reihenfolge der Aktualisierungsereignisse ......................................... 545
9.26.4 Eine komplette Kette von Ereignissen .......................................................... 545
10 Access im Zusammenspiel mit Office 547
10.1 Textdateien im Zugriff von Access .............................................................................. 548
10.1.1 Textdateien speichern ........................................................................................ 548
10.1.2 Textdateien exportieren .................................................................................... 552
10.1.3 Code sichern .......................................................................................................... 554
10.1.4 Textdateien einlesen .......................................................................................... 556
10.2 Access im Zusammenspiel mit Word ......................................................................... 562
10.2.1 Die Adressendatenbank anlegen .................................................................... 567
10.2.2 Das Word-Dokument anlegen ......................................................................... 568
10.2.3 Den VBA-Code erfassen ..................................................................................... 569
10.3 Outlook und Access ............................................................................................................ 572
10.3.1 Adresstabelle in den Outlook-Kontaktordner übertragen ..................... 572
10.3.2 Den Kontaktorder in einer Access-Tabelle sichern ................................... 579
10.3.3 Termine in den Terminkalender übertragen .............................................. 582
10.3.4 Aufgaben in die Aufgabenliste von Outlook übertragen ....................... 586
10.3.5 E-Mails in einer Access-Datenbank speichern ........................................... 590
10.3.6 Sammel-E-Mails versenden .............................................................................. 592
10.4 Access im Duett mit Excel ............................................................................................... 594
10.4.1 Access-Tabelle in eine Excel-Tabelle umwandeln ..................................... 594
10.4.2 Excel-Daten in eine Access-Tabelle transferieren ..................................... 597
10.4.3 Automatisches Anlegen einer Access-Tabelle mit
anschließendem Import .................................................................................... 598
10.4.4 Aus Excel auf Access zugreifen ........................................................................ 603
10.4.5 Suchen, Anlegen, Ändern und Löschen ........................................................ 605
10.4.6 Benutzerverwaltung für Access-Anwendungen ....................................... 611
4286-8.book Seite 15 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
16
11 API-Funktionen einsetzen 623
11.1 Das CD-ROM-Laufwerk ermitteln ................................................................................ 624
11.2 Den Namen des Anwenders ermitteln ...................................................................... 626
11.3 Das CD-ROM-Laufwerk bedienen ................................................................................ 627
11.4 Die Bildschirmauflösung ermitteln ............................................................................. 628
11.5 Ist ein externes Programm gestartet? ....................................................................... 629
11.6 Ein externes Programm aufrufen ................................................................................ 629
11.7 Wie lange läuft ein externes Programm? ................................................................ 630
11.8 Access schlafen schicken .................................................................................................. 632
11.9 Verzeichnisse erstellen ..................................................................................................... 632
11.10 Verzeichnis löschen ............................................................................................................ 633
11.11 Verzeichnisbaum anzeigen und auswerten ............................................................ 633
11.12 Die Windows-Version ermitteln ................................................................................... 635
11.13 Windows-Verzeichnis ermitteln ................................................................................... 636
11.14 Windows-Systemverzeichnis ermitteln .................................................................... 637
11.15 Das temporäre Verzeichnis ermitteln ........................................................................ 637
11.16 Das aktuelle Verzeichnis ermitteln ............................................................................. 638
11.17 Windows-Infobildschirm anzeigen ............................................................................. 639
11.18 Access-Verzeichnis ermitteln ......................................................................................... 639
11.19 Standardverzeichnis festlegen ...................................................................................... 640
11.20 Dateityp und Anwendung ermitteln .......................................................................... 640
11.21 Kurze Pfadnamen ermitteln ........................................................................................... 641
11.22 Den Computernamen ermitteln ................................................................................... 642
11.23 Texte mit API-Funktionen konvertieren ................................................................... 642
11.24 Die Zwischenablage löschen .......................................................................................... 643
11.25 Soundkarte checken .......................................................................................................... 644
11.26 Sounds per API-Funktion ausgeben ............................................................................ 644
11.27 PC piepsen lassen ................................................................................................................ 645
11.28 Tasten abfangen .................................................................................................................. 645
11.29 Dateien suchen ..................................................................................................................... 646
4286-8.book Seite 16 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
17
11.30 Dateiinformationen auslesen ........................................................................................ 647
11.31 Ist die Internetverbindung aktiv? ................................................................................ 649
11.31.1 Eine E-Mail erstellen ........................................................................................... 650
11.32 Cursorposition in Pixel angeben .................................................................................. 651
11.32.1 Den Standarddrucker per API abfragen ........................................................ 651
11.32.2 Texte über MD5 verschlüsseln ........................................................................ 652
12 Datenbanken und Quellcode schützen und pflegen 655
12.1 Ihre Access-Lösung mithilfe von Startparametern absichern ......................... 655
12.2 Eine ACCDE erstellen .......................................................................................................... 657
12.3 Eine Datenbank über ein Kennwort schützen ....................................................... 657
12.3.1 Geschützte Datenbank per VBA öffnen (DAO) .......................................... 659
12.3.2 Geschützte Datenbank per VBA öffnen (ADO) .......................................... 660
12.3.3 Das Datenbankkennwort ändern ................................................................... 663
12.4 Quellcode schützen ............................................................................................................ 664
12.4.1 Ein Kennwort für die Anzeige des Quellcodes anlegen ........................... 665
12.5 Eine Datenbank komprimieren und reparieren .................................................... 665
12.5.1 Automatisches Komprimieren beim Schließen ......................................... 666
12.5.2 Automatisches Komprimieren einer externen Datenbank ................... 667
13 VBE-Programmierung in Access 669
13.1 Die VBE-Bibliothek einbinden ....................................................................................... 670
13.2 Weitere Bibliotheken einbinden oder entfernen ................................................. 672
13.3 Fehlerhafte Verweise ermitteln ................................................................................... 674
13.4 In den VBE springen ........................................................................................................... 675
13.5 Objektbibliotheken auslesen ......................................................................................... 675
13.6 Neue Module einfügen ..................................................................................................... 676
13.7 Modul(e) löschen ................................................................................................................. 677
13.8 Prozedur(en) löschen ......................................................................................................... 678
13.9 Einzelne Texte oder Befehle im Quellcode finden ............................................... 680
4286-8.book Seite 17 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
18
13.10 Module mit Quellcode versorgen (Import) .............................................................. 683
13.11 Prozeduren sichern (Export) ........................................................................................... 686
13.12 Module drucken ................................................................................................................... 687
13.13 »Lines Of Code« ermitteln .............................................................................................. 689
13.14 Identifikation von VB-Komponenten ........................................................................ 690
13.15 Prozeduren auflisten ......................................................................................................... 691
13.16 Eine eigene VBA-Datenbank anlegen ........................................................................ 694
13.16.1 Der Zugriff auf einzelne Prozeduren ............................................................. 697
14 Anwendungen optimieren 701
14.1 Die automatische Leistungsanalyse ........................................................................... 701
14.1.1 Den richtigen Datentyp einsetzen ................................................................. 702
14.1.2 Programmleichen entfernen ............................................................................ 703
14.1.3 Variablen deklarieren ......................................................................................... 703
14.2 Datenbanken und Quellcode dokumentieren ....................................................... 703
14.3 Tabellen optimal anlegen ............................................................................................... 705
14.3.1 Primärschlüssel ..................................................................................................... 706
14.3.2 Indizes einsetzen .................................................................................................. 707
14.4 Die richtigen Befehle ......................................................................................................... 707
14.4.1 Objekte exakt deklarieren ................................................................................. 708
14.4.2 Variablen und Konstanten einsetzen ............................................................ 709
14.4.3 Berechnung und Bildschirmaktualisierung ausschalten ........................ 710
14.4.4 Warnmeldungen ausschalten ......................................................................... 710
15 Access und das Internet 711
15.1 E-Mail verschicken .............................................................................................................. 711
15.1.1 E-Mail über API-Funktion versenden ............................................................. 714
15.1.2 E-Mail mit Anhang versenden ......................................................................... 715
15.1.3 Dynamische Auswahl von E-Mail-Adressen ............................................... 716
15.1.4 E-Mail-Verteiler zusammenstellen ................................................................ 722
15.1.5 Posteingang auslesen ......................................................................................... 725
15.1.6 Alle gesendeten Mails dokumentieren ......................................................... 728
15.1.7 Dateianhänge speichern ................................................................................... 730
4286-8.book Seite 18 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
19
15.2 Mini-Browser erstellen ..................................................................................................... 732
15.3 Tabellen in Internetformate transferieren .............................................................. 733
15.3.1 Tabelle als HTML-Datei abspeichern ............................................................. 734
15.3.2 Tabelle in ein XML-Dokument umwandeln ................................................ 735
16 Ribbons programmieren 737
16.1 Programmierung über ein XML-Markup .................................................................. 737
16.1.1 Die Tabelle »USysRibbons« anlegen .............................................................. 739
16.1.2 Ereignisprozedur erstellen ................................................................................ 741
16.1.3 Neue Menüleiste auswählen ........................................................................... 741
16.1.4 Dynamisches Laden ohne »USysRibbons« .................................................. 742
16.2 Weitere wichtige Quellen und Hilfen ........................................................................ 744
17 FAQ für Access-Entwickler 747
17.1 Wie hänge ich ein Feld an eine Tabelle an? ............................................................. 748
17.2 Wie verhindere ich, dass ein Formular geschlossen wird? ............................... 749
17.3 Wie frage ich alle Tabellen einer geschlossenen Datenbank ab? ................. 750
17.4 Wie lege ich in einem bestimmten Verzeichnis eine neue
Datenbank automatisch an? .......................................................................................... 752
17.5 Wie verlinke ich eine Tabelle aus einer anderen Datenbank? ........................ 754
17.6 Wie normiere ich Telefonnummern in Tabellen? ................................................. 755
17.7 Wie dokumentiere ich eine komplette Datenbank? ........................................... 757
17.8 Wie prüfe ich, ob eine bestimmte Tabelle existiert? .......................................... 759
17.9 Wie prüfe ich, ob ein bestimmtes Feld in einer Tabelle angelegt ist? ......... 760
17.10 Wie führe ich eine SQL-Abfrage auf eine andere Datenbank aus? ............... 761
17.11 Wie ermittele ich alle verfügbaren Drucker? ......................................................... 763
17.12 Wie schreibe ich bestimmte Feldinhalte einer Tabelle in eine Textdatei? 764
17.13 Wie transferiere ich eine Access-Tabelle nach Word? ........................................ 766
17.14 Wie lege ich eine Parameterabfrage automatisch an? ...................................... 768
17.15 Wie greife ich auf Tabelleneigenschaften einer Datenbank zu? ................... 770
4286-8.book Seite 19 Dienstag, 6. Dezember 2016 9:52 09
Inhalt
20
17.16 Wie frage ich die beiden Extremwerte einer Spalte in einer
Tabelle ab? ............................................................................................................................. 771
17.17 Wie führe ich eine Durchschnittsberechnung durch? ........................................ 772
17.18 Wie erstelle ich eine Unikatsliste? .............................................................................. 773
17.19 Wie ermittele ich die Gesamtsumme für ein Tabellenfeld? ............................ 775
17.20 Wie führe ich eine bedingte Summierung durch? ............................................... 776
17.21 Wie lese ich über eine ID den dazugehörigen Lieferanten aus? .................... 776
Index ........................................................................................................................................................ 779
4286-8.book Seite 20 Dienstag, 6. Dezember 2016 9:52 09
Index
779
Index
A
Abfrage
auflisten .................................................... 206, 285
durchführen ....................................................... 413
erstellen ............................................................... 326
exportieren ........................................................ 552
komplexere ........................................................ 328
programmieren ................................................ 324
Typ definieren ................................................... 297
versenden ........................................................... 712
Abfragetyp definieren ........................................ 297
Ablauf automatisieren .......................................... 25
acActiveDataObject ................................... 215, 241
acAdd .............................................................. 238, 299
acAll ........................................................................... 240
acAnywhere ............................................................ 240
acBoundObjectFrame ...................... 375, 457, 463
ACCDE-Datei .......................................................... 657
Access
beenden ........................................................ 83, 198
Benutzerverwaltung ...................................... 611
schlafen schicken ............................................. 632
Access-Datenbanken ermitteln ...................... 111
AccessObject ....................................... 203, 206, 208
Access-Tabelle
in Excel-Tabelle umwandeln ....................... 594
transferieren ...................................................... 766
Access-Version ausgeben ................................. 199
acCheckBox ......................................... 375, 457, 463
acCmdAboutMicrosoftAccess ........................... 83
acCmdAnswerWizard ............................................ 83
acCmdCloseWindow .............................................. 83
acCmdDatabaseProperties .................................. 83
acCmdDatasheetView ........................................ 518
acCmdDocMaximize ............................................. 83
acCmdDocMinimize .............................................. 83
acCmdExit .................................................................. 83
acCmdFind ................................................................. 83
acCmdNewDatabase .............................................. 83
acCmdOpenDatabase ............................................ 83
acCmdOpenTable .................................................... 83
acCmdOptions ......................................................... 83
acCmdPrint ................................................................ 83
acCmdQuickPrint .................................................... 83
acCmdRedo ................................................................ 83
acCmdRelationships .............................................. 83
acCmdReportHdrFtr .................................. 470, 477
acCmdSaveRecord ............................................... 368
acCmdSend ............................................................... 83
acCmdUndo .............................................................. 83
acComboBox ...................................... 375, 457, 463
acCommand .......................................................... 211
acCommandButton ......................... 375, 457, 463
acCopy ...................................................................... 367
Account .................................................................... 576
acCtrlMask .............................................................. 534
acCurrent ................................................................ 240
acCustomControl ............................. 376, 457, 463
acCut ......................................................................... 367
acDataAccessPage ............................................... 153
acDataForm ................................................... 215, 241
acDataFunction ........................................... 215, 241
acDataQuery ................................................. 215, 241
acDataReport ......................................................... 215
acDataServerView ...................................... 215, 241
acDataStoredProcedure ........................... 215, 241
acDataTable ................................................... 215, 241
acDelete ................................................................... 367
acDesign ............................................... 213, 378, 421
acDetail ................................................. 460, 464, 468
acDiagram ............................................................... 153
acDialog ................................................ 213, 379, 443
acDown .................................................................... 240
acDraft ............................................................. 209, 447
acEdit ............................................................... 238, 299
acEditMenu ............................................................ 367
acEntire .................................................................... 240
acExport ......................................................... 211, 596
acFile ......................................................................... 367
acFirst .................................................... 215, 242, 513
acFooter ................................................ 460, 464, 468
acForm .................................................. 152, 380, 486
acFormAdd .................................................... 213, 378
acFormatDAP ........................................................ 712
acFormatHTML .................................. 553, 712, 734
acFormatRTF ................................................. 553, 712
acFormatTXT ................... 553, 554, 712, 713, 722
acFormatXLS ................................................. 553, 712
acFormBar .............................................................. 367
acFormDS ................................................................ 213
acFormEdit .................................................... 213, 378
acFormPivotChart ............................................... 213
acFormPivotTable ............................................... 213
4286-8.book Seite 779 Dienstag, 6. Dezember 2016 9:52 09
Index
780
acFormPropertySettings ......................... 213, 379
acFormReadOnly ........................................ 213, 379
acGoTo ............................................................ 242, 513
acGroupLevel1Footer ...................... 460, 464, 468
acGroupLevel1Header .................... 460, 464, 468
acGroupLevel2Footer ...................... 460, 464, 468
acGroupLevel2Header .................... 460, 464, 468
acHeader ..................................... 460, 464, 468, 478
acHidden .............................................. 213, 379, 443
acHigh ............................................................. 209, 447
acIcon ..................................................... 213, 379, 443
acImage ................................................. 376, 457, 463
acImport ............................................... 211, 596, 597
acLabel ................................................... 376, 457, 463
acLast ...................................................... 242, 512, 513
acLeftButton .......................................................... 522
acLine ........................................... 376, 458, 463, 477
acLink .............................................................. 211, 596
acListBox .............................................. 376, 458, 463
acLow .............................................................. 209, 447
acMacro .................................................................... 153
acMedium ..................................................... 209, 447
acMenuVer20 ........................................................ 368
acMenuVer70 ........................................................ 368
acMiddleButton .................................................... 522
acModule .............................................. 153, 246, 448
acNew ........................................................................ 367
acNewRec ...................................................... 242, 513
acNext ............................................................. 242, 513
acNormal ....................................................... 213, 378
acObject ................................................................... 367
acObjectFrame ................................... 376, 458, 463
acObjectUpdate .................................................... 367
acObjectVerb .......................................................... 367
acOptionButton ................................. 376, 458, 463
acOptionGroup .................................. 376, 458, 463
acOutputForm ....................................................... 552
acOutputFunction ............................................... 552
acOutputModule ........................................ 552, 554
acOutputQuery ..................................................... 552
acOutputReport .................................................... 552
acOutputServerView .......................................... 552
acOutputStoredProcedure ............................... 552
acOutputTable ............................................. 552, 553
acPage .................................................... 376, 458, 463
acPageBreak ........................................ 376, 458, 464
acPageFooter .................... 460, 464, 468, 474, 477
acPageHeader .................. 460, 464, 468, 473, 477
acPages ........................................................... 209, 446
acPaste ...................................................................... 367
acPreview ................................................................ 213
acPrevious ..................................................... 242, 513
acPrintAll ....................................................... 209, 446
acQuery ........................................ 152, 246, 448, 449
acQuit ....................................................................... 199
acQuitPrompt ....................................................... 199
acQuitSaveAll ........................................................ 199
acQuitSaveNone ................................................... 199
acReadOnly ................................................... 238, 299
acRecordsMenu .................................................... 367
acRectangle ......................................... 376, 458, 464
acRefresh ................................................................. 367
acReport ...................................... 153, 448, 449, 462
acRightButton .............................................. 522, 526
acSaveForm ............................................................ 367
acSaveFormAs ....................................................... 367
acSaveNo ................................................................. 380
acSavePrompt ....................................................... 380
acSaveRecord ......................................................... 367
acSaveYes ............................................. 380, 422, 462
acSearchAll ............................................................. 240
acSelectAllRecords .............................................. 367
acSelection .................................................... 209, 446
acSelectRecord ...................................................... 367
acSendDataAccessPage ..................................... 712
acSendForm ........................................................... 712
acSendModule ............................................. 712, 713
acSendNoObject ................................................... 712
acSendQuery ......................................................... 712
acSendReport ........................................................ 712
acSendTable ........................................................... 712
acSpreadsheetTypeExcel10 ............................. 597
acSpreadsheetTypeExcel11 ............................. 597
acSpreadsheetTypeExcel12 ............................. 597
acSpreadsheetTypeExcel8 ................................ 597
acSpreadsheetTypeExcel9 ................................ 597
acStart ....................................................................... 240
acSubform ........................................... 376, 458, 464
acSysCmdAccessDir ............................................ 152
acSysCmdAccessVer ........................................... 152
acSysCmdClearStatus ........................................ 152
acSysCmdGetObjectState ........................ 152, 153
acSysCmdGetWorkgroupFile .......................... 152
acSysCmdIniFile ................................................... 152
acSysCmdInitMeter ................................... 152, 153
acSysCmdProfile .................................................. 152
acSysCmdRemoveMeter .................................. 152
acSysCmdRuntime .............................................. 152
acSysCmdSetStatus ............................................. 152
acSysCmdUpdateMeter .................................... 152
4286-8.book Seite 780 Dienstag, 6. Dezember 2016 9:52 09
Index
781
acTabCtl ................................................. 376, 458, 464
acTable ...................... 152, 246, 411, 448, 449, 486
acTextBox .................................. 376, 458, 464, 709
Activate .................................................................... 511
ActiveConnection ......... 260, 284, 291, 325, 326,
328, 600, 751, 770
ActiveExplorer ...................................................... 732
ActiveX Data Objects .......................................... 571
acToggleButton .................................. 376, 458, 464
ActualWork ............................................................. 589
acUndo ..................................................................... 367
acUp ........................................................................... 240
acViewDesign .................. 209, 238, 299, 301, 442
acViewNormal .......................... 209, 238, 299, 442
acViewPivotChart ...................................... 238, 299
acViewPivotTable ....................................... 238, 299
acViewPreview ......................... 209, 238, 299, 442
acWindowNormal ............................. 213, 379, 443
adBoolean ............................................................... 291
adChar ....................................................................... 291
adCmdTable ........................................................... 663
adCurrency ............................................................. 291
Add .................. 220, 372, 373, 421, 426, 432, 564,
565, 676, 677, 732, 762, 767
Add (Methode)
Konstanten ........................................................ 677
ADD COLUMN ............................................. 317, 318
ADD CONSTRAINT ............................................... 317
adDecimal ............................................................... 291
AddFromFile ................................................ 673, 685
AddFromGuid .............................................. 671, 672
AddIns ....................................................................... 672
AddItem ............................. 404, 428, 699, 700, 717
AddNew ............................. 281, 296, 496, 581, 592,
602, 609, 727, 730
adDouble ................................................................. 291
Address ..................................................................... 621
adLockBatchOptimistic ........................... 261, 663
adLockOptimistic ....................................... 261, 662
adLockPessimistic ..................................... 260, 662
adLockReadOnly ......................................... 260, 662
adLongVarChar ..................................................... 292
adModeRead .......................................................... 661
adModeReadWrite ............................................... 661
adModeShareDenyNone ................................... 661
adModeShareDenyRead .................................... 661
adModeShareDenyWrite .................................. 661
adModeShareExclusive ..................................... 661
adModeUnknown ................................................ 661
adModeWrite ......................................................... 661
adNumeric .............................................................. 291
ADODB.Connection ............................................ 258
adOpenDynamic ............................... 260, 617, 662
adOpenForwardOnly ...................... 260, 617, 661
adOpenKeyset .............................................. 260, 662
adOpenStatic ................................................ 260, 662
ADOX.Catalog ........................................................ 770
ADOX.Table ............................................................ 770
Adressendatenbank anlegen .......................... 567
Adresstabelle
nach Outlook transportieren ..................... 572
adSearchBackward .............................................. 261
adSearchForward ................................................. 261
adSeekAfter ............................................................ 266
adSeekAfterEQ ...................................................... 265
adSeekBefore ......................................................... 266
adSeekBeforeEQ ................................................... 266
adSeekFirstEQ ....................................................... 266
adSeekLastEQ ........................................................ 266
adSingle ................................................................... 291
adUseClient ............................................................ 274
advapi32.dll ............................................................ 626
adVarChar ............................................................... 291
adVarWChar ........................................................... 292
AfterUpdate .................................................... 79, 505
Aktion
widerrufen ......................................... 83, 535, 540
wiederholen .......................................................... 83
Aktionsabfrage ..................................................... 298
Aktivierreihenfolge
Steuerelemente ................................................ 544
Aktualisierungsabfrage ..................................... 298
Aktuelles Verzeichnis ermitteln .................... 638
AllDataAccessPages ................................... 109, 203
AllDatabaseDiagrams ........................................ 203
AllForms ...................................... 109, 203, 207, 486
AllFunctions ........................................................... 203
Allgemeine Einstellungen ................................... 50
AllMacros ....................................................... 109, 203
AllModules ................................. 109, 203, 204, 555
AllowBypassKey ................................................... 657
AllowValueListEdits ............................................ 411
AllQueries ...................................................... 203, 206
AllReports ............................................ 109, 203, 455
AllTables ......... 204, 205, 208, 312, 321, 735, 759
AllViews ................................................................... 204
ALTER TABLE ....................................... 312, 317, 318
An ............................................................................... 712
AND ........................................................................... 330
And ................................................................... 177, 273
Änderung
letzte abfragen ................................................. 232
4286-8.book Seite 781 Dienstag, 6. Dezember 2016 9:52 09
Index
782
Änderungendokumentieren ................................................. 503nicht zulassen ................................................... 505speichern ............................................................. 509
Änderungsdatumanzeigen .............................................................. 502ermitteln ............................................................. 283
Anfügeabfrage ....................................................... 298Ansicht
aktualisieren ..................................................... 313wechseln .............................................................. 517
Anwender abfragen ................................................ 40Anwendername ermitteln ..................... 197, 626Anzeige
mehrzeilige ........................................................ 339Append ............................... 291, 292, 328, 550, 749Application .................................. 40, 195, 196, 197,
199, 201, 474, 763Applikationsverzeichnis ermitteln .............. 152ApplyFilter .............................................................. 243Arabische Ziffern umwandeln ........................ 191Arbeitsgruppendateipfad ermitteln ............ 152Arbeitsmappe anlegen ....................................... 732Argument ................................................................... 92
benanntes .............................................................. 95Arithmetischer Operator .................................. 174Array .......................................................................... 163
abarbeiten ................................................ 158, 163auslesen ............................................................... 158definieren ............................................................ 165durchlaufen ....................................................... 163füllen ..................................................................... 163mehrdimensionales ........................................ 163programmieren ................................................ 162
Artikel bewerten ................................................... 271Artikelanlage kontrollieren ............................. 535Artikelname ändern ............................................ 301AS ...................................................................... 323, 332As ................................................................................... 91ASC ....................................... 170, 172, 274, 276, 534Asc .............................................................................. 188AtEndOfStream ........................................................ 74Attachments ................................................ 727, 730Attributes ................................................................ 286Aufgabenliste importieren .............................. 586Aufgaben-Objekt (Outlook)
erstellen ............................................................... 576Auflistungsobjekt ................................................ 108Aufzählungstypen .................................................. 63Ausgabeformat festlegen ................................. 552Auskommentierung .............................................. 35
aufheben ................................................................ 36
Auslaufartikel löschen ....................................... 280
Auswahlabfrage .................................................... 298
AutoAnpassen ....................................................... 565
AutoFitBehavior ................................................... 565
AutoStart ................................................................. 553
AVG ............................................................................ 773
Avg ............................................................................. 478
B
BackColor .......................... 146, 382, 450, 452, 530
Bcc .............................................................................. 712
Bedingte Formatierung durchführen ......... 362
Beep ........................................................................... 645
Befehl ausführen ..................................................... 82
BeforeUpdate ............................................... 499, 534
Bei Deaktivierung ................................................ 544
Bei Entladen ........................................................... 544
Bei Fokuserhalt ............................................ 544, 545
Bei Fokusverlust .......................................... 544, 545
Bei Geändert .......................................................... 545
Bei Laden ................................................................. 545
Bei Maustaste Ab ................................................. 545
Bei Maustaste ab .................................................. 414
Bei Taste ................................................................... 545
Bei Taste Auf .......................................................... 545
Bei Zeitgeber .......................................................... 423
Beim Hingehen ............................................ 544, 545
Beim Klicken .......................................................... 424
Beim Öffnen ........................................................... 545
Beim Schließen ..................................................... 544
Beim Verlassen ............................................ 544, 545
Benanntes Argument ............................................ 95
Benutzer abfragen .................................................. 40
Benutzerverwaltung
für Access ........................................................... 611
Berechnung ausschalten .................................. 710
Bereich
ausblenden ........................................................ 469
einblenden ......................................................... 469
vergrößern ......................................................... 467
Bereichsgröße festlegen ................................... 468
Bericht
Aufbau festlegen ............................................. 440
aufrufen .............................................................. 208
ausgeben ............................................................ 449
bearbeiten .......................................................... 442
drucken ...................................................... 209, 446
Elemente auflisten .......................................... 456
entwerfen ........................................................... 441
erstellen ............................................................... 461
4286-8.book Seite 782 Dienstag, 6. Dezember 2016 9:52 09
Index
783
Bericht (Forts.)
exportieren ........................................................ 552
formatieren ........................................................ 449
Formatierungsmöglichkeiten .................... 452
identifizieren ..................................................... 454
kopieren .............................................................. 447
maximiert anzeigen ....................................... 443
mit Diagramm .................................................. 440
mit Vorauswahl ............................................... 444
mit Zusammenfassung ................................. 440
öffnen ......................................................... 442, 443
schließen ................................................... 455, 462
umbenennen ..................................................... 447
versenden ........................................................... 712
vollautomatisch erstellen ............................ 465
zählen ................................................................... 455
Berichtsart
definieren ............................................................ 439
ermitteln ............................................................. 456
Berichtsaufbau festlegen .................................. 440
Berichtselemente auflisten .............................. 456
Berichtserstellung
vollautomatische ............................................ 465
Berichtssektion ansprechen ............................ 460
Berichtstyp
definieren ............................................................ 439
ermitteln ............................................................. 456
Beschriftung festlegen ....................................... 478
Bestände zusammenführen ............................ 330
Bezeichnungsfeld einsetzen ............................ 396
Bibliothek
einbinden ............................................................ 672
entfernen ............................................................ 672
Bildlaufleiste setzen ............................................ 354
Bildschirmaktualisierung
ausschalten .............................................. 209, 710
einschalten ......................................................... 209
Bildschirmauflösung ermitteln ..................... 628
Binary ........................................................................ 550
Birthday ................................................................... 576
BIT .............................................................................. 314
Block
auskommentieren .............................................. 35
Blocksyntax ............................................................... 96
Body ........................................................ 584, 589, 594
BOF ............................................................................. 269
Bookmark ............................................. 278, 513, 571
Boolean ................................................... 58, 536, 537
BusinessAddressCity .......................................... 576
BusinessAddressPostalCode ............................ 576
BusinessAddressState ........................................ 576
BusinessAddressStreet ...................................... 576
BusinessFaxNumber .......................................... 576
BusinessTelephoneNumber ............................ 576
Button ...................................................................... 522
ByRef ............................................................................ 93
Byte ............................................................................... 58
ByVal ..................................................................... 72, 93
C
Cancel .............. 506, 507, 536, 539, 540, 543, 750
Caption ............................... 394, 422, 429, 493, 534
festlegen ............................................................. 478
Case ........................................................................... 102
Case Else ......................................................... 103, 620
Catalog ............................... 284, 290, 326, 600, 751
Categories ...................................................... 584, 589
CBool ................................................................ 150, 151
Cbool ......................................................................... 151
CByte ......................................................................... 150
Cc ................................................................................ 712
CCar ........................................................................... 151
CCur ........................................................................... 150
CDate ............................................................... 150, 154
CDbl .................................................................. 150, 154
CDec .......................................................................... 150
CD-ROM-Laufwerk
bedienen ............................................................. 627
ermitteln ............................................................. 624
Cell .................................................................... 565, 767
Cells ........................................................................... 602
CHARACTER ........................................................... 314
CharLower ............................................................... 642
CharUpper .............................................................. 642
CHDIR .......................................................................... 26
ChDir ......................................................................... 219
CHDRIVE .................................................................... 26
Choose ...................................................................... 148
Chr .......................................................... 339, 541, 684
Chr(13) ...................................................................... 125
CInt ............................................................................ 150
Clear ....................................................... 220, 431, 605
Click .................. 426, 428, 518, 520, 521, 522, 529
CLng .......................................................................... 150
Close ......... 74, 119, 165, 170, 173, 266, 267, 269,
296, 321, 380, 455, 462, 483, 485, 486,
487, 488, 496, 503, 552, 571, 603, 663,
688, 728, 730, 759, 767
CloseClipboard ...................................................... 644
CloseCurrentDatabase .............................. 198, 214
4286-8.book Seite 783 Dienstag, 6. Dezember 2016 9:52 09
Index
784
Code ........................................................................... 555schrittweise durchlaufen ................................. 45sichern .................................................................. 554
CodeData ....................................................... 207, 208Code-Fenster
anpassen ................................................................ 49anzeigen ................................................................. 43teilen ................................................................. 39, 43
CodeModule ........................................................... 700CodePanes ............................................................... 672Codezeilen
zählen in Modul ............................................... 689zählen in Prozedur .......................................... 680
Column ........................................................... 286, 291Columns ......................................................... 288, 291Command ............................................................... 328CommandBars ...................................................... 672CommandText ......................... 325, 326, 328, 763CompactDatabase ................................................ 668Complete ................................................................. 589Computerinformationen anzeigen .............. 223Computername ermitteln ................................ 642Connection ... 170, 260, 267, 549, 606, 660, 661ConnectionString ................................................. 260context ..................................................................... 337Control ..................................................................... 111ControlTipText ...................................................... 387ControlType ..................... 374, 382, 385, 387, 413CopyFile ................................................................... 232CopyFromRecordset ................................. 605, 622CopyObject ................................ 246, 447, 448, 449Count ..... 115, 229, 288, 381, 421, 455, 727, 730Countdown programmieren ........................... 487CountOfDeclarationLines ................................. 691CountOfLines ................... 684, 689, 690, 691, 700Create ........................................................................ 753CREATE INDEX ................................... 313, 318, 319CREATE TABLE ....... 312, 313, 319, 325, 727, 729CreateField .............................................................. 749CreateForm ................................................... 199, 200CreateItem ................................. 576, 578, 584, 589CreateObject .......... 183, 223, 225, 226, 231, 234,
372, 562, 564, 575, 594, 601,
659, 732, 762, 767CreateReport ....................................... 461, 463, 466CreateReportControl .... 462, 463, 473, 474, 477CreateShortcut ...................................................... 226criteria ...................................................................... 261CSng ........................................................................... 151CStr ............................................................................. 151CSV-Datei ................................................................. 548Currency ..................................................................... 59
CurrentDb ...... 127, 162, 196, 485, 749, 758, 775
CurrentProject ..... 109, 134, 165, 167, 170, 196,
267, 325, 486, 549, 564, 727, 730
CurrentUser ........................................... 40, 197, 474
CurrentX .................................................................. 452
CursorLoaction ..................................................... 274
Cursorposition ermitteln ................................. 651
CursorType .................................................... 617, 661
festlegen ............................................................. 260
D
Date ........................................ 59, 473, 502, 521, 532
DateAdd ................................................................... 139
DateCreated ........... 205, 233, 283, 291, 294, 770
DateDiff ................................................................... 139
Datei
Existenz prüfen ................................................ 179
löschen ................................................................ 132
suchen ........................................................ 219, 646
Verfügbarkeit prüfen ..................................... 180
zählen (Verzeichnis) ....................................... 178
Dateianhang speichern ..................................... 730
Dateiendung
suchen ................................................................. 116
Dateiendung prüfen ........................................... 123
Dateiexistenz
prüfen .................................................................. 179
Dateiinformationen auslesen ........................ 647
Dateiname
ausgeben ............................................................ 113
sammeln ............................................................. 113
Dateinummer ....................................................... 550
Dateityp
ermitteln ............................................................. 640
Dateiverfügbarkeit
prüfen .................................................................. 180
Dateizugriff
festlegen ................................................................ 72
DateLastAccessed ................................................ 233
DateLastModified ....................................... 233, 294
DateModified ..................................... 205, 291, 770
Daten
drucken .................................................................. 83
entfernen ............................................................ 326
prüfen .................................................................. 100
zusammenführen ........................................... 321
Datenbank
anlegen ................................................................... 83
automatisch anlegen .................................... 752
dokumentieren ............................. 293, 703, 757
4286-8.book Seite 784 Dienstag, 6. Dezember 2016 9:52 09
Index
785
Datenbank (Forts.)
ermitteln ............................................................. 127
geschützte, öffnen (ADO) ............................. 660
geschützte, öffnen (DAO) ............................. 659
öffnen ................................................................... 256
schließen ............................................................. 198
sichern .................................................................. 231
suchen .................................................................. 293
Vorhandensein prüfen .................................. 340
zählen ................................................................... 115
Datenbankeigenschaften anzeigen ................. 83
Datenbank-Fenster
maximieren .......................................................... 83
minimieren ........................................................... 83
Datenbankinformationen erhalten ............. 196
Datenbankkennwort ändern (DAO) ............. 663
Datenbankname ermitteln ................................. 39
Datenbankobjektstatus abfragen .................. 152
Datenblattansicht aktivieren .......................... 518
Datendefinitionsabfrage durchführen ....... 312
Datenfeld
anlegen ................................................................... 48
löschen ................................................................. 318
Datenformat festlegen ....................................... 553
Datenpuffer auslesen ............................................ 74
Datensatz
aktivieren .................................................. 279, 513
aktualisieren ..................................................... 491
anlegen ................................................................ 581
ansteuern .................................................. 240, 512
duplizieren ......................................................... 369
ersten aktivieren .................................... 242, 513
ersten ermitteln ............................................... 498
filtern .................................................................... 272
hinzufügen ............................................... 281, 296
klonen .................................................................. 490
kopieren .............................................................. 490
letzten aktivieren ......................... 242, 270, 513
letzten ermitteln .............................................. 497
löschen ....................................................... 279, 370
nächsten aktivieren ........................................ 242
neuer ..................................................................... 542
positionieren ..................................................... 242
sortieren .............................................................. 273
suchen ..................................... 239, 261, 369, 498
vorherigen aktivieren .................................... 242
zählen ............................. 165, 202, 276, 485, 498
Datensatzmarkierer anzeigen ........................ 354
Daten-Tips
automatische ....................................................... 50
Datentyp
überwachen ....................................................... 396
umwandeln .............................................. 150, 154
Datenzugriffsseite versenden ........................ 712
DatePart ............................................................ 67, 138
DateSerial ................................................................ 184
DATETIME ............................................................... 314
Datum
einfügen ........................................... 471, 520, 533
zerlegen ............................................................... 184
Datumsangabe
formatieren ....................................................... 141
umwandeln ....................................................... 154
Datumsberechnung ........................................... 139
Datumsfeld erhöhen .......................................... 532
Datumsformat-Konstanten einsetzen .......... 65
Datumsteil extrahieren .................................... 138
Datumswert überprüfen .................................. 159
DAvg ................................................................. 201, 498
DBEngine ................................................................ 659
DblClick ........................................................... 428, 432
DCount ............................... 202, 498, 499, 767, 777
Debug.Print ....... 74, 76, 106, 111, 113, 119, 129,
158, 165, 173, 250, 252, 456, 578,
752, 757, 772, 773, 775
DECIMAL ................................................................. 314
Decimal ....................................................................... 59
Declare ..................................................................... 625
DefaultTableBehavior ........................................ 565
DefBool ....................................................................... 62
DefByte ....................................................................... 62
DefCur ......................................................................... 62
DefDate ....................................................................... 62
DefDbl ......................................................................... 62
DefinedSize ................................................... 286, 292
Definition
automatisch Einzug vergrößern .................. 50
automatische Daten-Tips ............................... 50
automatische Quickinfo ................................. 50
automatische Syntaxüberprüfung ............. 49
Dropdown-Feld Objekt ..................................... 43
Dropdown-Feld Prozedur ............................... 43
Eigenschaften ...................................................... 27
Elemente automatisch auflisten ................. 50
Ereignisse .............................................................. 27
Methoden .............................................................. 27
Objekte ................................................................... 27
DefInt ........................................................................... 62
DefLng ......................................................................... 62
DefObj ......................................................................... 62
DefSng ......................................................................... 62
4286-8.book Seite 785 Dienstag, 6. Dezember 2016 9:52 09
Index
786
DefStr ........................................................................... 62DefType ................................................................ 62, 63DefVar .......................................................................... 62DELETE ............................................................ 307, 308Delete .............. 279, 281, 292, 293, 586, 611, 679DELETE * ................................................................... 326DeleteLines ............................................................. 680DeleteObject ................................................. 339, 411DESC .................................... 170, 256, 274, 276, 323Detailbereich .......................................................... 440Detailbericht ausführen .................................... 440DeviceName ................................................. 197, 763DFirst ......................................................................... 498Diagramm einfügen ........................................... 433Diagramm-Assistent ........................................... 433Dialog \»Drucken\« anzeigen ............................ 83Dialog \»Öffnen\« anzeigen ............................... 83Dialog \»Optionen\« anzeigen .......................... 83Dialog anzeigen ....................................................... 97Dim ............................................................................... 55Dir ...................................... 70, 71, 72, 116, 133, 135,
180, 296, 340, 428, 753Direktfenster
abfragen ................................................................. 44editieren .............................................................. 129einblenden ............................................................. 44füllen ..................................................................... 129testen ....................................................................... 44
Direkthilfe .................................................................. 83Dir-Konstante ........................................................... 70Dirty ................................................................. 505, 509DisplayAsHyperlink ............................................ 395DLast .......................................................................... 497DLookup .................. 391, 392, 498, 536, 537, 777DMax ............................................................... 202, 498DMin ............................................................... 202, 498Do Until ...................................... 114, 173, 594, 757,
765, 767, 773, 775Do Until ... Loop .................................................... 113Do While ... Loop ......................................... 115, 116DoCmd .................... 207, 208, 209, 211, 214, 237,
243, 247, 442, 552, 754DoEvents ................................................................. 631Dokumenteigenschaft
auslesen ............................................................... 183ermitteln ............................................................. 181
DoMenuItem ............................................... 366, 368Double ......................................................................... 59Drag & Drop ausschalten ..................................... 50DriveLetter .............................................................. 231Drives ........................................................................ 231DriveType ................................................................ 231
DROP COLUMN ........................................... 317, 318
DROP CONSTRAINT ............................................ 317
DROP INDEX ................................................. 313, 320
DROP TABLE .................................................. 313, 321
Druckdialog anzeigen ........................................... 83
Drucker
installierte Drucker ermitteln .................... 197
verfügbare ermitteln ..................................... 763
Druckkopien festlegen ...................................... 209
Druckqualität
festlegen ............................................................. 209
DStDEv ..................................................................... 498
DSum ..................................................... 201, 498, 775
DueDate ................................................................... 589
Duration .................................................................. 584
Durchschnitt errechnen ................................... 201
Durchschnittsberechnung erstellen ............ 772
DVar .......................................................................... 498
dwMajorVersion .................................................. 636
dwMinorVersion .................................................. 636
dwPlatformId ........................................................ 636
DZ ............................................................................... 179
E
Echo .................................................................. 209, 735
Edit .................................................................... 581, 757
Eigene Funktion programmieren ................. 178
Eigenschaften anzeigen ....................................... 36
Eigenschaften-Fenster einblenden ................. 29
Einfügeposition festlegen ................................ 565
Eingabe
automatisch durchführen ........................... 389
erfassen ............................................................... 342
erzwingen .................................................. 316, 502
prüfen ........................................................... 98, 500
umwandeln .......................................................... 98
vervollständigen ............................................. 536
widerrufen ......................................................... 499
Eingabelänge überprüfen ................................. 396
Eingabemaske programmieren ..................... 340
Eingabemöglichkeit beschränken ................ 498
Einzug
automatisch vergrößern ................................. 50
vergrößern ............................................................ 34
verkleinern ............................................................ 34
Element automatisch auflisten ........................ 50
ElseIf ............................................................................. 97
dokumentieren ................................................ 728
erstellen ............................................................... 650
4286-8.book Seite 786 Dienstag, 6. Dezember 2016 9:52 09
Index
787
E-Mail (Forts.)
mit Anhang versenden .................................. 715
verschicken ........................................................ 711
versenden (API) ................................................ 714
Email1Address ...................................................... 576
E-Mail-Adresse
austauschen ...................................................... 683
dynamisch auswählen .................................. 716
prüfen ................................................................... 120
E-Mail-Aktion starten ......................................... 494
E-Mail-Dialog öffnen ............................................. 83
E-Mail-Objekt (Outlook) erstellen ................. 576
E-Mail-Verteiler zusammenstellen ............... 722
Enabled ..................................................................... 387
End ............................................................................. 584
End Function ............................................................. 91
End Sub ................................................................ 30, 86
End With .................................................................. 115
Entwicklungsumgebung aufrufen .. 26, 28, 672
Entwurfsqualität drucken ................................ 209
Enum-Anweisung ................................................... 63
EnumNetworkDrives .......................................... 229
Environ .................................... 45, 48, 483, 753, 754
EOF ............................ 119, 249, 261, 266, 269, 551,
571, 663, 724, 757, 765
Ereignis
Activate ............................................................... 543
AfterInsert .......................................................... 494
AfterUpdate ....................................................... 545
BeforeDelConfirm ........................................... 509
BeforeUpdate ....................... 536, 538, 539, 545
Change ................................................................. 545
Click ...................................................................... 520
Close ........................................................... 486, 544
Current ................................................................. 543
Deactivate .......................................................... 544
Enter ........................................ 540, 541, 544, 545
Exit ........................................... 529, 542, 544, 545
Form_Activate ........................................ 511, 513
Form_AfterDelConfirm ................................. 511
Form_AfterInsert ............................................. 494
Form_AfterUpdate ......................................... 505
Form_BeforeInsert .......................................... 496
Form_BeforeUpdate ................... 499, 500, 502,
504, 505
Form_Close .............................................. 485, 486
Form_Current ................................................... 490
Form_DblClick .................................................. 517
Form_Deactivate ............................................. 514
Form_Delete ............................................ 505, 506
Form_Dirty ........................................................ 509
Ereignis (Forts.)
Form_Load ........................................................ 488
Form_Resize ...................................................... 515
GotFocus .......................................... 529, 544, 545
KeyDown ......................................... 530, 532, 545
KeyPress .............................................................. 545
KeyUp ......................................................... 530, 545
Load ............................................................. 543, 545
LostFocus ......................................... 529, 544, 545
MouseDown ................................... 521, 524, 526
MouseMove .............................................. 526, 527
MouseUp ................................................... 521, 524
Open ............................................................ 543, 545
OpenForm .......................................................... 488
Resize ................................................................... 543
Schaltfläche_Click .......................................... 529
Steuerelement_BeforeUpdate ................... 534
Steuerelement_Enter ..................................... 540
Steuerelement_Exit ........................................ 542
Unload ................................................................. 544
Ereignisreihenfolge abstimmen .................... 543
Erstellungsdatum
abfragen ............................................................. 232
ermitteln ............................................................. 283
Erster Datensatz
aktivieren ........................................................... 513
ermitteln ............................................................. 498
Etiketten erstellen ............................................... 445
Etikettenbericht
starten ................................................................. 440
Euro-Konvertierung durchführen ................ 414
Excel-Daten
in Access-Tabelle transferieren ................. 597
Excel-Session starten ......................................... 372
Excel-Verzeichnis ermitteln ............................ 639
Execute .............................. 270, 271, 325, 326, 773
Exemplare sortieren ........................................... 209
Exit .......................................................... 527, 540, 542
Exit Do ............................................................. 113, 115
Exit For ..................................................................... 106
Exit Function ......................................................... 188
Exit Sub ............................................. 88, 97, 341, 485
Exklusivmodus ..................................................... 658
Export .............................................................. 687, 688
Abfrage ................................................................ 552
Bericht ................................................................. 552
Formular ............................................................. 552
Funktion ............................................................. 552
Modul ................................................................... 552
Prozedur ............................................................. 552
Tabelle ................................................................. 552
4286-8.book Seite 787 Dienstag, 6. Dezember 2016 9:52 09
Index
788
Exportdatei öffnen .............................................. 553
ExportXML .............................................................. 735
Externes Programm starten ............................ 629
Extremwerte abfragen ....................................... 771
F
False .............................................................................. 96
Farbfunktionen einsetzen ................................ 145
FastLaserPrinting ................................................. 447
Fehler abfangen .................................................... 100
Fehlerhafter Verweis ermitteln ...................... 674
Fehlermeldung formatieren ............................... 41
Feld
ausblenden ......................................................... 491
einblenden .......................................................... 491
initialisieren ...................................................... 302
vorbelegen .......................................................... 496
Felddatentyp ermitteln ..................................... 288
Felddefinition auslesen ..................................... 287
Feldinhalt
auslesen ............................................................... 261
in Textdatei schreiben ................................... 764
Fenster
maximieren ....................................................... 210
schließen ................................................................ 83
verankern .............................................................. 52
Fields ............................................ 761, 765, 767, 775
FileDialog .................................... 217, 219, 220, 221
FileName .................................................................. 428
FileObject ................................................................. 220
FileSystemObject ............ 74, 113, 183, 221, 229,
231, 232, 234, 765
FillColor .................................................................... 452
FillStyle ..................................................................... 452
Filter .......................................................................... 273
einstellen ............................................................. 220
Filterkriterium
angeben ............................................................... 243
einstellen ............................................................. 243
FilterName .............................................................. 443
Filters ........................................................................ 220
Find ......... 261, 262, 267, 571, 680, 681, 682, 696
FindExecutable ........................................... 640, 641
FindFirst ................................................................... 581
FindFirstFile ........................................................... 649
FindRecord .............................................................. 239
FindWindow ........................................................... 629
firstdayofweek .......................................................... 68
FirstName ................................................................ 576
Fix ............................................................................... 149
Fokus setzen ................................................. 483, 512
FontBold ......................................................... 452, 525
FontItalic ................................................................. 452
FontName ............................................ 451, 452, 478
FontSize .......................................................... 452, 478
FontUnderline ...................................................... 452
For ... Next ........................ 173, 193, 343, 578, 586,
592, 602, 605, 754, 758
For Append ............................................................. 503
For Each .......................................................... 217, 220
For Each ... Next .... 108, 109, 111, 234, 751, 763
For Each ... Next-Schleife anwenden ............ 108
For Each...Next ...................................................... 111
For Output .............................................................. 759
For...Next ................................................................. 105
ForAppending .......................................................... 73
ForeColor .............................................. 146, 452, 525
Form .......................................................................... 421
Form_Load .................................................... 425, 431
Form_Unload ........................................................ 750
Format ... 141, 142, 170, 201, 423, 449, 727, 730
FormatDateTime .................................................... 65
Formatierung
bedingte .............................................................. 362
FormatNumber .................................................... 230
Forms ........................................................................ 108
Formular
aktualisieren ............................................ 491, 513
anlegen ................................................................ 199
aufrufen ..................................................... 212, 378
Breite ermitteln ................................................ 515
Daten verknüpfen ........................................... 200
einrichten ........................................................... 482
Ende aktivieren ................................................ 513
erstellen ............................................................... 343
Existenz prüfen ................................................ 207
exportieren ........................................................ 552
maximieren ....................................................... 511
nächsten Datensatz aktivieren ................. 513
öffnen .......................................................... 153, 207
schließen .................................................... 485, 486
Schließen verhindern ..................................... 749
vergrößern ......................................................... 512
Formularbericht ausführen ............................ 440
Formularbeschriftung bestimmen .............. 353
Formularbreite ermitteln ................................. 515
Formulardarstellung bearbeiten ...................... 51
Formulardaten verknüpfen ............................ 200
Formularende aktivieren ................................. 513
Formularexistenz prüfen ................................. 207
4286-8.book Seite 788 Dienstag, 6. Dezember 2016 9:52 09
Index
789
Formularfeld
bearbeiten .......................................................... 350
färben ................................................................... 529
markieren ........................................................... 351
Formularinhalt drucken ................................... 371
Formularnamen
ausgeben ............................................................. 108
ermitteln ............................................................. 109
ForReading .......................................................... 73, 74
ForWriting .................................................................. 73
Frachtkosten
Mittelwertsberechnung ................................ 201
Summe ermitteln ............................................. 201
Wert ermitteln .................................................. 202
Frachtkostensumme ermitteln ...................... 201
Frachtkostenwert ermitteln ............................ 202
FreeSpace ................................................................. 229
FROM ............................................................... 306, 311
Füllfarbe festlegen ............................................... 452
Füllmuster festlegen ........................................... 452
FullName ................................................................. 183
FullPath .................................................................... 675
Function-Prozeduren ............................................ 90
Funktion
beenden ............................................................... 188
einsetzen ............................................................. 118
exportieren ........................................................ 552
selbst schreiben ................................................ 178
G
Ganzzahliger Wert extrahieren ...................... 149
GDI32.dll .................................................................. 625
Gesamtsumme ermitteln ................................. 775
Gesamttext teilen ................................................ 130
Geschützte Datenbank
öffnen (ADO) ..................................................... 660
öffnen (DAO) ..................................................... 659
GetAttr .................................................................. 71, 72
GetClipboardData ................................................ 644
GetCommandLine ............................................... 639
GetComputerName ............................................. 642
GetCurrentDirectory .......................................... 638
GetCursorPos ......................................................... 651
GetDefaultFolder ..................... 586, 592, 727, 730
GetDrive ................................................................... 230
GetDriveName ...................................................... 230
GetDriveType ......................................................... 626
Laufwerksindizes ............................................. 626
GetExitCodeProcess .................................. 630, 631
GetFolder ....................................................... 113, 234
GetLogicalDriveStrings ..................................... 625
GetObject .......................... 562, 571, 601, 727, 730
GetProfileString ................................................... 651
GetShortPathName .................................... 641, 642
GetString .............................................. 250, 252, 619
GetSystemDirectory ........................................... 637
GetTempPath ........................................................ 637
GetUserName ........................................................ 626
GetVersionEx ........................................................ 635
GetWindowsDirectory ....................................... 638
GotFocus ........................................................ 529, 530
GoTo .......................................................................... 100
GoToRecord ........................................ 240, 241, 512
Großbuchstabe umwandeln .............................. 98
GUID .......................................................................... 671
Gültigkeitsprüfung
Verweise .............................................................. 674
H
Haltepunkt
ausschalten .......................................................... 34
einfügen ................................................................. 34
setzen ...................................................................... 34
Hauptversionsnummer festlegen ................ 671
Height ....................................................................... 468
helpfile ..................................................................... 337
Hilfsmittel nutzen .................................................. 33
Hintergrundfarbe festlegen ............................ 452
Höchstwert festlegen ......................................... 107
Hotkey ...................................................................... 226
Hour .......................................................................... 144
HTML-Datei speichern ...................................... 734
Hyperlink integrieren ........................................ 428
I
Icons .......................................................................... 431
IDENTITY ................................................................. 325
If .................................................................................. 539
IIF ............................................................. 101, 102, 618
IIF-Verzweigung einsetzen .............................. 101
IMAGE ...................................................................... 314
ImageList ................................................................. 431
imageMso ............................................................... 745
Importdatei festlegen ........................................ 561
Index ................................................................ 265, 291
einfügen .............................................................. 313
einsetzen ............................................................. 707
löschen ................................................................ 313
Infodialog aufrufen ................................................ 83
4286-8.book Seite 789 Dienstag, 6. Dezember 2016 9:52 09
Index
790
Informationen anzeigen ................................... 339Input .......................................................................... 550InputBox ............. 97, 98, 260, 340, 341, 343, 571
verwenden .......................................................... 340INSERT INTO ................................................. 304, 306InsertLines .............................................................. 680Installierte Drucker ermitteln ........................ 197InStr ........................... 113, 120, 121, 124, 168, 185InStrRev ...................................... 121, 123, 124, 127Int ............................................................................... 149INTEGER ................................................................... 314Integer ............................................ 58, 59, 60, 72, 80Integrierte Dialoge einsetzen .......................... 215InternetGetConnectedState ............................ 650Internetseite prüfen ........................................... 124Internetverbindung überprüfen ................... 649Intervall ....................................................................... 67INTO ........................................................................... 311IsArray ................................................... 101, 157, 158IsBroken ................................................................... 674IsDate ..................................................... 100, 101, 159IsEmpty .......................................................... 101, 159IsError ....................................................................... 101IsLoaded ...................................... 109, 205, 321, 486IsNull .................................. 101, 156, 160, 502, 532,
536, 537, 539, 542, 724IsNumeric ...................................... 98, 100, 101, 396IsObject .......................................................... 101, 161ItemData ........................................................ 410, 722ItemProperties ...................................................... 578Items ......................................................................... 586ItemsSelected ........................................................ 409
J
JOIN ............................................................................ 621Join ............................................................................. 130Journaleintrag (Outlook) erstellen ................ 576
K
Kennwortschutz festlegen ............................... 657Kernel32.dll ............................................................ 625KeyCode ................................................................... 534KeyDown ....................................................... 530, 533Key-Ereignis ........................................................... 530KeyPress ......................................................... 395, 396Keys ........................................................................... 291Kill ........................................................... 132, 668, 688Klassen-ID festlegen ........................................... 671Kombinationsfeldliste programmieren ..... 398Kommentar erstellen ............................................ 35
Komplexere Abfrage programmieren ........ 328
Konstante
anzeigen ......................................................... 37, 83
definieren .............................................................. 65
einsetzen ............................................................. 709
verwenden ............................................................ 64
Zugriffsart festlegen ......................................... 72
Konstantenzugriffsart festlegen ...................... 72
Kontaktobjekt (Outlook) erstellen ................ 576
Kontextmenü
abschalten ......................................................... 526
deaktivieren ...................................................... 526
Kontrollkästchen
aktivieren ........................................................... 411
initialisieren ...................................................... 413
Konvertierung
HTML ................................................................... 553
RTF ........................................................................ 553
TXT ........................................................................ 553
XLS ........................................................................ 553
Kostenstelle prüfen ............................................ 537
Kreuztabellenabfrage ......................................... 298
Kurzer Pfadname ermitteln ............................ 641
L
Lagerbestand
kontrollieren ..................................................... 329
manipulieren .................................................... 266
LastName ................................................................ 576
Laufwerk
anzeigen ............................................................. 229
auswerten .......................................................... 229
Buchstabe ermitteln ...................................... 231
mappen ............................................................... 227
Typ ermitteln .................................................... 231
wechseln ................................................................ 26
Laufwerksbuchstabe ermitteln ...................... 231
Laufwerkstyp ermitteln .................................... 231
LBound ..................................................................... 158
LCase .................................................................. 99, 642
Leerzeichen entfernen ...................................... 131
Left ....................................... 125, 126, 396, 627, 724
LEFT JOIN ................................................................. 621
Leistungsanalyse durchführen ...................... 701
Len .................... 123, 126, 156, 180, 188, 396, 724
Lesezeichen
aufheben ................................................................ 39
einsetzen ............................................................. 278
setzen ...................................................................... 39
zum nächsten springen ................................... 39
4286-8.book Seite 790 Dienstag, 6. Dezember 2016 9:52 09
Index
791
Letzte Änderung abfragen ................................ 232
Letzter Datensatz
aktivieren ............................................................ 513
ermitteln ............................................................. 497
Letzter Zugriff abfragen ..................................... 232
Lib ............................................................................... 625
Liefertermin errechnen ..................................... 100
LIKE ............................................................................ 245
Line Input ................................................................ 119
Lines Of Code ermitteln .................................... 689
ListCount ....................................................... 406, 489
Listeneintrag
demarkieren ...................................................... 408
löschen ................................................................. 406
mit Aktionen ausstatten .............................. 409
Listenfeld
bestücken ............................................................ 428
einfügen .............................................................. 404
füllen .................................................. 404, 488, 699
programmieren ................................................ 404
Listenfeldeintrag
auslesen ............................................................... 406
löschen ................................................................. 406
zählen ................................................................... 406
ListIndex ............................ 406, 409, 410, 696, 722
ListView .................................................................... 431
Load ................................................................. 488, 698
LoadCustomUI ...................................................... 743
LoadRibbons .......................................................... 743
Location ................................................................... 584
Lock ............................................................................ 550
Lock Read Write .................................................... 550
Lock Write ............................................................... 550
Locked ....................................................................... 388
LockNavigationPane ........................................... 214
LockType ........................................................ 260, 662
Logischer Operator .............................................. 177
Lokal-Fenster einblenden .................................... 48
Long ....................................................................... 59, 80
Löschabfrage .......................................................... 298
ausführen ........................................................... 307
ersetzen ............................................................... 509
Löschrückfrage einholen .................................. 338
Löschung
bestätigen ........................................................... 511
rückgängig machen ....................................... 539
verhindern .......................................................... 505
Löschweitergabe ................................................... 308
LostFocus ....................................................... 529, 530
lpResult .................................................................... 641
LTrim ......................................................................... 131
M
Mail dokumentieren .......................................... 728Mail-Anhang speichern ..................................... 730MailItem .................................................................. 592MainWindow ......................................................... 675MapNetworkDrive ............................................... 228Markierung drucken .......................................... 209Maßeinheit festlegen ......................................... 451Maustastenklick
abfangen ............................................................ 522auf Textfeld ....................................................... 523
MAX ........................................................................... 771Max ............................................................................ 478Maximalwert ermitteln ........................... 255, 498Maximize ............................................. 210, 443, 512mciSendString ...................................................... 627Me ........................................................... 385, 405, 484Media-Player-Steuerelement .......................... 426Mehrdimensionales Array ............................... 163Mehrfachauswahl einstellen ........................... 407Mehrfach-Index
hinzufügen ......................................................... 317löschen ................................................................ 317
Mehrwertsteuer errechnen ............................. 341Mehrzeilige Meldung erzeugen ..................... 541Mehrzeiliges Textfeld füllen ........................... 541Meldung
anzeigen ................................................................ 31mehrzeilige ........................................................ 541
Menübefehl ausführen .................. 210, 366, 518Methode anzeigen .................................................. 36Mid ....................................... 123, 125, 127, 188, 626MIN ............................................................................ 771Min ............................................................................ 478Mini-Browser basteln ......................................... 732Minimalwert ermitteln ..................................... 498MinMaxSchaltflächen anzeigen .................... 354Minute ...................................................................... 144Mitarbeiter hinzufügen .................................... 304MkDir ..................................................... 133, 134, 632Mod .................................................................. 174, 450Mode ......................................................................... 661Modul
drucken ............................................................... 687einfügen ....................................................... 28, 676exportieren ........................................................ 552löschen ................................................................ 677versenden ........................................................... 712
Modus ....................................................................... 550Monat ermitteln .................................................. 137MONEY ..................................................................... 314
4286-8.book Seite 791 Dienstag, 6. Dezember 2016 9:52 09
Index
792
MONTH .................................................................... 622Month ............................................................. 137, 184MonthName ................................................. 134, 137MouseDown ................................................. 417, 521MouseMove ............................................................ 526MouseUp ................................................................. 521MoveFirst ................................................................ 279MoveLast ....................................................... 270, 279MoveNext .... 165, 168, 173, 249, 269, 272, 280,
281, 551, 566, 576, 663, 757, 765, 773MovePrevious ....................................................... 270MsgBox ..... 30, 31, 33, 37, 40, 97, 108, 129, 170,
184, 190, 336, 341, 499, 617, 640, 642, 690msoFileDialogFilePicker ................................... 217msoFileDialogFolderPicker .................... 217, 219msoFileDialogOpen ............................................ 217msoFileDialogSaveAs ......................................... 217Multifunktionsleiste programmieren ........ 739
N
Nach Aktualisierung ........................................... 545Nachfrage starten ................................................ 542Name .............. 127, 196, 200, 204, 205, 234, 283,
455, 456, 462, 473, 564, 578, 605, 668, 675, 699, 752, 758, 759, 763, 770
ändern ..................................................................... 29einfügen .............................................................. 471festlegen ................................................................. 29
Navigate ................................................................... 732Navigationsschaltflächen einblenden ........ 354Nebenversionsnummer festlegen ................ 671network .................................................................... 223Netzwerkressource abfragen ........................... 231Neuanlage verhindern ....................................... 504New .................................................................. 170, 586NewName ................................................................ 246NewPassword ........................................................ 664NewRecord ................................. 493, 496, 504, 542NoMatch .................................................................. 581Not ................................................................................. 98NOT NULL ................................................................ 316Nothing ...................... 75, 165, 217, 219, 221, 267,
285, 288, 552, 581, 603, 732Notiz-Objekt (Outlook) erstellen ................... 576Now ........................................ 91, 144, 631, 632, 684Number .................................................................... 181NumColumns ........................................................ 565NumericScale ......................................................... 286Numerische Zeichen extrahieren ................. 155Numerischer Wert extrahieren ...................... 155NumRows ................................................................ 565
O
Object ........................................................ 59, 688, 762
ObjectName ........................................................... 553
ObjectType .................................................... 449, 552
Objekt
abfragen ............................................................. 161
erstellen ............................................................... 225
hinzufügen ......................................................... 328
Objektbibliothek auslesen ............................... 675
Objektkatalog aufrufen ........................................ 26
Objektverknüpfung aufheben ....................... 285
Objektverweis aufheben .......................... 165, 552
Öffnen-Dialog anzeigen ....................................... 83
olAppointmentItem .................................. 576, 584
olContactItem ....................................................... 576
olDistributionListItem ...................................... 576
OldValue ......................................................... 386, 503
olFolderCalendar ................................................. 586
olFolderInbox .............................................. 592, 727
olFolderSentMail ................................................. 730
olJournalItem ........................................................ 576
olMailItem ..................................................... 576, 594
olNoteItem ............................................................. 576
olPostItem .............................................................. 576
olTaskItem ..................................................... 576, 589
Open ...... 119, 165, 170, 181, 249, 256, 260, 267,
482, 483, 488, 503, 549, 550, 564, 575,
594, 601, 604, 607, 661, 663, 727, 730,
759, 765, 767, 772, 773
open .......................................................................... 429
Open (Methode)
Aktualisierungskonstanten ........................ 601
OpenArgs ................................................................ 443
OpenClipboard ..................................................... 644
OpenDatabase .............................................. 659, 664
OpenForm .............. 153, 207, 213, 378, 421, 422
OpenProcess ................................................. 630, 631
OpenQuery .......................................... 299, 301, 413
OpenRecordset .................................. 724, 757, 775
OpenReport ................................ 209, 442, 445, 446
OpenTable ................................... 162, 238, 312, 410
OpenText ................................................................ 688
OpenTextFile .................................................. 74, 765
Operation ausführen ......................................... 208
Operator
arithmetischer .................................................. 174
einsetzen ............................................................. 174
logischer ............................................................. 177
Option Explicit ........................................... 57, 60, 63
4286-8.book Seite 792 Dienstag, 6. Dezember 2016 9:52 09
Index
793
Optional ...................................................................... 95
Optionen-Dialog
anzeigen ................................................................. 83
aufrufen .............................................................. 221
Options ..................................................................... 261
Optionsschaltfläche programmieren .......... 414
OR ..................................................................... 329, 332
Or ................................................................................ 273
ORDER BY ...... 253, 254, 256, 279, 323, 330, 332
Outlook-Mail-Eigenschaften ........................... 576
Outlook-Objekt erstellen .................................. 576
Output ...................................................................... 550
OutputFile ............................................................... 553
OutputFormat ....................................................... 553
OutputTo 449, 552, 554, 555, 566, 594, 687, 734
P
Pages ................................................................ 421, 474
Parameter ................................................................... 92
Parameterabfrage ................................................ 298
automatisch anlegen ..................................... 768
durchführen ....................................................... 333
erstellen ............................................................... 332
PARAMETERS ......................................................... 333
Parameterübergabe
als Referenz ........................................................... 93
als Wert ................................................................... 93
ParentCatalog .............................................. 286, 291
Path .................................................................. 134, 196
PC-Piepton erzeugen .......................................... 645
Pfadname ................................................................ 550
kurzer, ermitteln .............................................. 641
Port ............................................................................ 197
Posteingang auslesen ......................................... 725
Postleitzahl
ermitteln ............................................................. 104
prüfen ................................................................... 538
Präzision festlegen .............................................. 286
Precision .................................................................. 286
Preiserhöhung durchführen ........................... 267
Print ........................................................ 503, 551, 759
Printers ........................................................... 197, 763
PrintOut ...................................... 209, 371, 446, 688
Private ................................................................... 56, 88
Procedures .............................................................. 328
ProcOfLine .............................................................. 691
ProcOfLines ............................................................ 680
ProcStartLine ......................................................... 680
Programm
externes, starten .............................................. 629
Programmausführung abbrechen .................. 46
Programmierleistung messen ....................... 689
Programmlaufdauer messen .......................... 630
Programmstatus abfragen ............................... 629
Projekt-Fenster anpassen .................................... 49
Properties ............................................. 286, 291, 660
Provider ................................................................... 660
Prozedur ..................................................................... 85
anlegen ................................................................ 328
auflisten .............................................................. 691
aufspüren ........................................................... 680
ausführen .............................................................. 32
entfernen ............................................................ 678
exportieren ........................................................ 552
finden ................................................................... 680
löschen ................................................................ 678
sichern ................................................................. 686
starten .................................................................... 32
verlassen ............................................................. 341
Zeilen löschen ................................................... 680
Prozedur-Text anzeigen .................................... 696
Prozedurtext anzeigen ...................................... 696
Prozedurzeilen löschen ..................................... 680
Public ............................................................. 56, 57, 88
Q
QBColor ........................................................... 145, 453
Quellcode
Anzeige verhindern ........................................ 665
einfügen .............................................................. 683
importieren ....................................................... 683
schützen .............................................................. 664
Quellcodeanzeige verhindern ........................ 665
QueryTables ........................................................... 763
Quickinfo
automatische ...................................................... 50
hinzufügen ......................................................... 386
QuickInfo anzeigen ................................................ 36
Quit ................................................................... 198, 444
R
Rahmenart bestimmen ..................................... 354
Random ................................................................... 550
Range ............................................................... 565, 602
Read ........................................................................... 550
Read Write .............................................................. 550
ReadAll ........................................................................ 76
ReadLine ..................................................................... 74
ReceivedTime ........................................................ 727
4286-8.book Seite 793 Dienstag, 6. Dezember 2016 9:52 09
Index
794
Rechenfunktionen ............................................... 478Record ....................................................................... 215RecordCount ......... 165, 168, 173, 276, 277, 485,
490, 607, 609, 611, 617RecordsAffected .................................................... 271Recordset ...... 170, 249, 260, 265, 267, 549, 564,
571, 581, 592, 594, 606, 607, 661, 662, 765RecordsetClone ..................................................... 490RecordSource ...................................... 200, 462, 466Reddick-Namenskonvention ............................. 61ReDim .................................................... 165, 168, 173Reference ................................................................. 674Referenzielle Integrität ...................................... 308Refresh ................................................... 491, 514, 763RefreshDataBaseWindow ....................... 313, 727Registerelement
anlegen ................................................................ 418programmieren ................................................ 418
Registerkarteaktivieren ............................................................ 420einfügen .............................................................. 420löschen ................................................................. 422suchen .................................................................. 422umbenennen ..................................................... 420
ReihenfolgeAktualisierungsereignisse ............................ 545
RelatedColumn ..................................................... 286ReminderMinutesBeforeStart .............. 585, 589ReminderPlaySound ................................. 585, 589ReminderSet ................................................ 585, 589ReminderSoundFile ............................................ 589Remove ....................................... 422, 671, 674, 678RemoveDirectory ................................................. 633RemoveItem ........................................ 406, 407, 700RemoveNetworkDrive ....................................... 228Rename .......................................................... 246, 448Replace ..................................................................... 683ReplaceLine ............................................................. 683Report .......................................... 451, 456, 461, 473Report_Open .......................................................... 461ReportItem ............................................................. 592ReportName ........................................................... 442Reprint ...................................................................... 491Requery .......................................................... 491, 513RequiredAttendees .............................................. 584Resize ........................................................................ 515Restore ...................................................................... 200RGB ...................................... 381, 450, 452, 525, 530RGB (Funktion)
Farben .................................................................. 452Right ....................................................... 125, 126, 127
RmDir ....................................................................... 135Roman ...................................................................... 191Römische Ziffern umwandeln ....................... 189Round .................................................... 131, 132, 185RTrim ........................................................................ 131Rückfrage einholen ............................................. 499Rückschrittzeichen einfügen .......................... 125Rückwärtssuche ................................................... 261Run ............................................................................ 684RunCommand .......... 82, 83, 210, 211, 221, 368,
445, 446, 470, 477, 509, 518RunSQL ....................................... 301, 303, 312, 313,
318, 319, 727, 729
S
Satzlänge vorgeben ............................................. 551Save .................................................................. 226, 577SaveAs ...................................................................... 767SaveAsFile ............................................................... 732ScaleMode ............................................................... 451Schaltflächenfarbe verändern ........................ 524Schaltflächenklick ermitteln ........................... 337Schleife
aufbauen ............................................................... 74einsetzen ............................................................. 105
Schließen-Schaltfläche einblenden .............. 354Schriftart
einstellen ............................................................ 452festlegen ............................................................. 478
Schriftfarbe festlegen ................................ 452, 525Schriftformatierung anwenden .................... 450Schriftgröße
festlegen ............................................................. 452Schriftgröße festlegen ....................................... 452Schriftschnitt festlegen ............................ 452, 525SearchDirection .................................................... 261SearchForRecord ......................................... 214, 215SearchTreeForFile ................................................ 646Second ...................................................................... 144Section ............................................................. 460, 467Seek ........................................................ 262, 263, 265Seitenfuß ................................................................. 440Seitenkopf ............................................................... 440Seitenzahlen einfügen ....................................... 471Sektion
anzeigen ............................................................. 461ausblenden ........................................................ 461
SELECT ... 250, 252, 254, 271, 272, 279, 306, 311Select Case ............. 102, 103, 163, 188, 189, 289,
377, 418, 459, 511, 619
4286-8.book Seite 794 Dienstag, 6. Dezember 2016 9:52 09
Index
795
SELECT DISTINCT ................................................. 773
Selected ................................................. 409, 410, 490
SelectedItem ................................................ 426, 432
SelectedItems ..................................... 217, 219, 220
Selection .................................................................. 564
SelHeight ....................................................... 507, 508
SelLength ................................................................. 383
SelStart ..................................................................... 383
Send ........................................................................... 594
SenderName ........................................................... 727
SendObject .... 711, 712, 713, 715, 722, 724, 725
SentOn ...................................................................... 730
Serveransicht exportieren ............................... 552
SET .............................................................................. 302
Set ....................... 75, 109, 114, 165, 170, 223, 266,
267, 287, 374, 421, 451, 607, 682
SetAttr .......................................................................... 72
SetCurrentDirectoryA ........................................ 640
SetFocus ................................................ 484, 491, 512
SetSelection ............................................................ 681
Shared ....................................................................... 550
ShareName ............................................................. 231
Sheets ........................................................................ 602
Shell ............................................................. 76, 77, 631
ShellAbout .............................................................. 639
ShellExecute .............................. 428, 629, 650, 714
Shell-Konstante verwenden ............................... 76
Shift ................................................................. 522, 534
ShortcutMenu ....................................................... 526
Show ....................................................... 217, 219, 220
Single ............................................................................ 59
Size ............................................................................. 730
SizeToFit .................................................................. 467
SkipRows ................................................................. 261
SMALLINT ................................................................ 314
sndPlaySound32 ................................................... 644
Sonderzeichen
eliminieren ......................................................... 184
entfernen ............................................................ 184
Sort ............................. 170, 172, 273, 274, 728, 730
Sortierreihenfolge
bestimmen ......................................................... 286
festlegen .............................................................. 274
SortOrder ................................................................. 286
Sound ausgeben ................................................... 644
Soundkarte prüfen .............................................. 644
Source ............................................................. 260, 663
Spaltenlänge festlegen ....................................... 286
SpecialEffect ................................................. 418, 527
SpecialFolders .............................................. 225, 226
Speicher freigeben ............................................... 552
Speicherort festlegen ......................................... 553
Sperre ........................................................................ 550
Sperrverfahren einstellen ................................ 260
Spezialeffect ........................................................... 418
Spezialeffekt
einfügen (Textfeld) ......................................... 526
hinzufügen ......................................................... 413
Spezifikation angeben ....................................... 561
Split .................................................................. 128, 130
SQL-Abfrage ........................................................... 298
auf andere Datenbank .................................. 761
erstellen ............................................................... 301
SQL-Anweisung
absetzen ..................................................... 270, 325
ausführen .................................................. 271, 325
durchführen ...................................................... 325
festlegen ............................................................. 326
Standardabweichung ermitteln .................... 498
Standardansicht festlegen ............................... 353
Standarddrucker abfragen ............................... 651
Standardverzeichnis festlegen ....................... 640
Start ........................................................................... 584
StartDate ................................................................. 589
startFromScratch ................................................. 738
Statusanzeige
aktualisieren ..................................................... 152
entfernen ............................................................ 152
Statusleiste editieren ......................................... 152
Steuerelement
aktualisieren ..................................................... 491
ansprechen ........................................................ 111
ausblenden ........................................................ 520
automatisch anpassen ........................ 467, 515
einblenden ......................................................... 520
einfügen .............................................................. 349
einfügen (Bericht) ........................................... 462
identifizieren ............................................ 114, 373
zählen .................................................................. 115
Steuerelementkonstanten ............................... 457
Stop ............................................................................... 48
StrConv ................................................................ 78, 79
String .................................................................... 58, 59
Sub ......................................................................... 30, 86
ausführen .............................................................. 32
SubFolders .............................................................. 234
Subject ...................... 584, 586, 589, 594, 727, 730
Sub-Prozedur ............................................................ 86
Suchen-Fenster anzeigen .................................... 83
Suchkriterien festlegen ..................................... 261
Suchrichtung angeben ...................................... 261
Sum ........................................................................... 478
4286-8.book Seite 795 Dienstag, 6. Dezember 2016 9:52 09
Index
796
Summe
einfügen .............................................................. 474
ermitteln ............................................................. 201
Summierung
bedingte .............................................................. 776
Symbolleiste bearbeiten ...................................... 33
Syntaxprüfung
automatische ....................................................... 40
Syntaxüberprüfung
automatische ....................................................... 49
SysCmd ........................................................... 151, 153
Systemeinstellungen auslesen ....................... 753
Systemfeldmenü einblenden ......................... 354
Systemzeit ausgeben .......................................... 521
T
TabControl .............................................................. 421
TabelDefs ................................................................. 162
Tabelle
AccessObjects .................................................... 203
aktualisieren ..................................................... 267
ändern ........................................................ 312, 317
Anfang ermitteln ............................................. 269
anlegen ............................................. 289, 312, 313
Ansichtskonstanten ....................................... 221
arithmetische Operatoren ........................... 175
auflisten .............................................................. 285
Auflistungsobjekte .......................................... 109
aus anderer Datenbank verlinken ............ 754
auslesen ............................................................... 283
bearbeiten .......................................................... 237
Befehlskonstanten der Methode
DoMenuItem ................................................ 367
CursorType-Konstanten ............................... 661
Datentypen (SQL) ............................................ 314
DatePart .............................................................. 138
Datumskürzel ................................................... 142
drucken ................................................................ 371
Eigenschaftsnummern .................................. 182
Ende feststellen ................................................ 249
entfernen ............................................................ 321
Existenz prüfen ................................................. 759
exportieren ........................................................ 552
Farbindizes ......................................................... 145
Farbwerte ............................................................ 381
Feld auslesen ..................................................... 251
filtern .................................................................... 243
gängigste Datentypen ................................... 291
GoToRecord-Konstanten ............................. 512
Inhalt auslesen ................................................. 248
Tabelle (Forts.)
Inhalt suchen .................................................... 258
Konstanten für Steuerzeichen ................... 125
kopieren .............................................................. 246
LockType-Konstanten ................................... 662
logische Operatoren ...................................... 177
löschen ............................................. 292, 313, 339
nach Word überführen ................................. 562
öffnen ................................ 83, 162, 165, 238, 260
prüfen, ob Feld angelegt .............................. 760
Prüffunktionen ................................................ 100
Schaltflächen für MsgBox ........................... 336
Schaltflächenkonstanten ............................. 337
schließen .......................................... 165, 269, 571
sortieren ..................................................... 170, 730
Spezialeffekte .................................................... 528
Standardfarben über RGB ........................... 381
Steuerelemente für Formulare .................. 346
Steuerelementkonstanten ........................... 375
Steuerzeichen ................................................... 276
Struktur auslesen ............................................ 286
Struktur ermitteln ........................................... 283
Suchmethoden in Access .............................. 498
transferieren ..................................................... 211
Typ abfragen ..................................................... 285
übertragen ......................................................... 566
umbenennen ..................................................... 246
updaten ............................................................... 270
VBA-Konstanten .............................................. 125
Vergleichsoperatoren ........................... 103, 176
versenden ........................................................... 712
Tabellenanfang ermitteln ................................ 269
Tabellenende feststellen ................................... 249
Tabellenerstellungsabfrage ............................. 298
durchführen ...................................................... 310
Tabellenfeld
anhängen ........................................................... 748
auslesen .............................................................. 251
hinzufügen ......................................................... 317
löschen ....................................................... 317, 318
Tabellenindex
bestimmen ......................................................... 318
entfernen ............................................................ 320
Tabelleninhalt
auslesen .............................................................. 248
suchen ................................................................. 258
Tabellenstruktur
auslesen .............................................................. 286
ermitteln ............................................................. 283
Tabellentyp abfragen ......................................... 285
Tabellenverknüpfung prüfen ......................... 484
4286-8.book Seite 796 Dienstag, 6. Dezember 2016 9:52 09
Index
797
Table .......................................................................... 601
TableDef ......................................................... 758, 760
Tables ..................................................... 565, 767, 770
Tab-Schrittweite ...................................................... 50
Tabulatorzeichen einfügen .............................. 125
Tag ermitteln ......................................................... 183
Tagesdatum ermitteln ....................................... 521
TargetPath ............................................................... 226
Tasten abfangen ................................................... 645
Tastendruck auswerten ..................................... 530
Tastenkombinationen
einsetzen ................................................................ 41
programmieren ................................................ 225
Telefonnummerntabelle normieren ........... 755
TemplateFile .......................................................... 553
Temporäres Verzeichnis ermitteln .............. 637
Termin berechnen ............................................... 139
Termine übertragen ............................................ 582
Terminkalender-Eigenschaften ..................... 584
Terminobjekt (Outlook) erstellen ................. 576
TEXT ........................................................................... 314
Text ............................................................................ 565
austauschen ...................................................... 683
bereinigen ........................................................... 131
extrahieren ........................................................ 125
finden ................................................................... 680
konvertieren ............................................ 129, 642
kürzen .................................................................. 125
spitten .................................................................. 128
verschlüsseln ..................................................... 652
zerlegen ............................................................... 129
zusammensetzen ............................................. 129
Textdatei
abarbeiten .......................................................... 551
einlesen ...................................................... 118, 556
exportieren .............................................. 548, 552
importieren .............................................. 548, 556
lesen ..................................................... 76, 119, 550
öffnen ......................................................... 119, 549
schließen ................................................... 119, 552
schreiben ............................................................. 550
speichern ............................................................. 548
Text-E-Mail versenden ....................................... 712
Textfarbe festlegen ............................................. 452
Textfeld
aktivieren ............................................................ 387
ausblenden ......................................................... 393
begrenzen ........................................................... 395
einblenden .......................................................... 393
formatieren ........................................................ 381
mehrzeiliges, füllen ......................................... 541
Textfeld (Forts.)
positionieren ..................................................... 382
programmieren ............................................... 381
prüfen .................................................................. 532
sperren ................................................................. 387
überwachen ....................................................... 384
Textfeldhintergrund färben ............................ 530
Textfeldinhalte retten ....................................... 385
Textlänge bestimmen ....................................... 383
Textmarkierung anpassen ............................... 382
Textstartposition festlegen ............................. 383
Textteil extrahieren ................................... 121, 123
Textwert prüfen ................................................... 104
Textzeichen entfernen ...................................... 156
Time ................................................ 30, 144, 521, 534
Timer ........................................................................ 487
TimerInterval ............................................... 424, 487
TINYINT ................................................................... 314
Titelleiste anpassen ............................................ 493
title ............................................................................. 337
To ............................................................. 103, 594, 730
TOP ................................................................... 255, 256
TransferDatabase ................................................. 754
TransferSpreadsheet .............. 211, 595, 596, 597
TransferText ................................................. 556, 561
Transfertyp ............................................................. 561
TreeView ......................................................... 425, 426
programmieren ............................................... 425
Trennlinie einfügen ............................................ 474
Trim ........................................................................... 131
True .............................................................................. 96
Twips ......................................................................... 465
Type ........ 285, 288, 289, 291, 679, 693, 699, 751
TypeName .............................................................. 592
TypeText .................................................................. 564
U
Überschrift einfügen .......................................... 474
Überwachung hinzufügen .................................. 46
Überwachungsfenster einblenden .................. 46
UBound ........................................ 129, 158, 163, 173
UCase ........................................................ 98, 130, 642
Uhr integrieren ..................................................... 422
Undo ......................... 499, 504, 505, 536, 539, 540
Unikatsliste erstellen ......................................... 773
UNION ................................................... 253, 321, 332
UNION ALL ............................................................. 332
UNIQUE .................................................................... 320
UnRead ..................................................................... 727
Unterbrechen bei Fehlern ................................... 51
4286-8.book Seite 797 Dienstag, 6. Dezember 2016 9:52 09
Index
798
UPDATE .................................................................... 302
Update ..................... 267, 269, 270, 496, 581, 592,
602, 609, 662, 728, 730, 757
UpdateLinks ........................................................... 601
User32.dll ................................................................ 625
Username ................................................................ 483
V
Val ............................................................................... 155
Value ............................................................... 261, 420
VALUES ..................................................................... 304
Variable
benennen ............................................................... 54
Deklaration erzwingen .................................... 57
deklarieren ...................... 48, 54, 56, 60, 62, 703
einsetzen ...................................................... 54, 709
prüfen ...................................................................... 79
übergeben .............................................................. 72
überprüfen ......................................................... 157
Variablen prüfen ..................................................... 46
Variablendeklaration
erforderliche ......................................................... 49
erzwingen .............................................................. 57
Variablentyp auswählen ...................................... 58
Variablentypen verwenden ................................ 55
Variant .................................................................. 59, 60
Varianz feststellen ............................................... 498
VarType ................................................................ 79, 80
vbAbortRetryIgnore ............................................... 38
VBA-Datenbank
anlegen ................................................................ 694
erstellen ............................................................... 694
vbArray ........................................................................ 80
vbBack ............................................................. 125, 276
vbBoolean .................................................................. 80
vbByte .......................................................................... 80
vbCancel .................................................................. 510
vbCR ........................................................................... 276
vbCr ............................................................................ 125
vbCritical .................................................................... 38
vbCrLf ..................................................... 125, 276, 713
vbCurrency ................................................................ 80
vbDataObject ............................................................ 80
vbDate ......................................................................... 80
vbDecimal .................................................................. 80
vbDirectory ............................................................... 71
vbDouble .................................................................... 80
VBE
aktivieren .................................................. 671, 675
deaktivieren ....................................................... 671
VBE-Bibliothek einbinden ................................ 670
vbEmpty ..................................................................... 79
vbError ........................................................................ 80
vbExclamation ......................................................... 38
vbext_ct_ClassModule ...................................... 677
vbext_ct_MSForm .............................................. 677
vbext_ct_StdModule ......................................... 677
vbext_pt_StandAlone ....................................... 677
vbFirstFourDays ...................................................... 69
vbFirstFullWeek ...................................................... 69
vbFirstJan1 ................................................................ 69
vbFriday ...................................................................... 68
vbGeneralDate ......................................................... 66
vbHidden ................................................................... 71
vbHide ......................................................................... 76
vbInformation ......................................................... 38
vbInteger .................................................................... 80
VB-Komponenten identifizieren .................. 690
vbLf ............................................................ 32, 125, 276
vbLong ........................................................................ 80
vbLongDate ............................................................... 66
vbLongTime .............................................................. 66
vbLowerCase ............................................................. 78
vbMaximizedFocus ............................................... 76
vbMinimizedFocus ................................................ 76
vbMinimizedNoFocus .......................................... 76
vbMonday .................................................................. 68
vbNewLine .............................................................. 125
vbNormal ................................................................... 71
vbNormalFocus ....................................................... 76
vbNormalNoFocus ................................................. 76
vbNull .......................................................................... 79
vbNullChar ............................................................. 125
VbNullString .......................................................... 125
vbNullString ................................................. 473, 625
vbObject ..................................................................... 80
vbOKCancel ............................................................... 38
vbOKOnly .................................................................. 38
VBProjects ............................................................... 672
vbProperCase ........................................................... 78
vbQuestion ................................................................ 38
vbReadOnly ............................................................... 71
vbRetryCancel .......................................................... 39
vbSaturday ................................................................ 68
VbShortDate ............................................................. 66
vbShortTime ............................................................. 66
vbSingle ...................................................................... 80
vbString ...................................................................... 80
vbSunday ................................................................... 68
vbSystem .................................................................... 71
vbTab ............................................................... 125, 276
4286-8.book Seite 798 Dienstag, 6. Dezember 2016 9:52 09
Index
799
vbThursday ................................................................ 68
vbTuesday .................................................................. 68
vbUpperCase ............................................................. 78
vbUseSystem ..................................................... 68, 69
vbVariant .................................................................... 80
vbVolume ................................................................... 71
vbWednesday ........................................................... 68
vbYesNo ............................................................ 38, 133
vbYesNoCancel ........................................................ 38
Vergleichsoperator einsetzen ......................... 103
Vergleichsoperatoren einsetzen .................... 175
Verkaufsraum-Formular erstellen ................ 518
Verkettungsoperator einsetzen ..................... 176
Version ..................................................................... 199
Versionsnummer ermitteln ............................ 152
Verteilerliste (Outlook) erstellen ................... 576
Verweis
fehlerhafte Verweise ermitteln .................. 674
Verzeichnis
einstellen ............................................................. 218
entfernen ............................................................ 135
ermitteln ............................................................. 223
erstellen ..................................................... 133, 632
löschen ....................................................... 135, 633
temporäres, ermitteln ................................... 637
Verzeichnisbaum
anzeigen .............................................................. 633
auswerten ........................................................... 633
Verzeichnisstruktur auslesen ......................... 234
Verzweigung
verschachteln .................................................... 102
verwenden ............................................................. 95
View ........................................................................... 442
Visible ...................... 372, 373, 394, 461, 491, 520,
564, 601, 675, 762, 767
Visual-Basic-Editor anpassen ............................. 49
VolumeName ........................................................ 230
Vor Aktualisierung .............................................. 545
Vorabinformationen geben ............................. 540
Vorauswahl treffen .............................................. 212
Vorlagendateipfad angeben ............................ 553
Vorwärtssuche durchführen ........................... 261
W
Wagenrücklaufzeichen einfügen .................. 125
Warnmeldungen ausschalten ......................... 710
waveOutGetNumDevs ....................................... 644
wdAutoFitContent ............................................... 565
wdAutoFitFixed .................................................... 565
wdAutoFitWindow .............................................. 565
Website-Zugang
Icon erstellen ..................................................... 226
Weekday ......................................................... 136, 163
WeekdayName ............................................... 69, 136
nutzen ..................................................................... 69
Wert
ganzzahligen extrahieren ........................... 149
numerischer, extrahieren ............................ 155
WHERE .................... 302, 307, 311, 323, 329, 330,
332, 604, 617, 619, 621
WhereCondition ............................... 215, 443, 445
WindowMode ........................................................ 443
Windows .................................................................. 672
Windows-Infobildschirm anzeigen .............. 639
Windows-Systemverzeichnis ermitteln ..... 637
Windows-Version ermitteln ........................... 635
Windows-Verzeichnis ermitteln ................... 636
WindowWidth ....................................................... 515
With ............................................... 114, 115, 117, 451
Wochentag
einlesen ............................................................... 162
ermitteln ............................................................. 136
Word-Dokument anlegen ....................... 564, 568
Word-Session starten ......................................... 373
WorksheetFunction ............................................ 191
Workspace .............................................................. 659
Write ......................................................................... 550
WriteLine ................................................................. 765
WScript.Network .................................................. 228
X
XML-Format erstellen ........................................ 735
Y
YEAR .......................................................................... 622
Year ............................................................................ 184
Z
Zahl runden ............................................................ 132
Zahlenwert
prüfen .................................................................. 102
runden ................................................................. 131
Zählerstand ausgeben ........................................ 106
Zahlungstermin errechnen ............................. 100
Zeichenfolge
aufspüren ........................................................... 121
suchen ................................................................. 121
Zeichenlänge ermitteln ..................................... 123
4286-8.book Seite 799 Dienstag, 6. Dezember 2016 9:52 09
Index
800
Zeichenposition ermitteln ............................... 187
Zeilenvorschub erzeugen ................................. 125
Zeit einfügen ................................................ 520, 533
Zellengröße anpassen ........................................ 565
Zieltabelle bestimmen ....................................... 561
Zoom einstellen .................................................... 210
Zoom-Darstellung ............................................... 436
Zugriff
letzten abfragen ............................................... 232
Zugriffsmodus festlegen .................................. 550
Zustand abfragen .................................................... 95
Zweig einfügen ..................................................... 426
Zwischenablage
löschen ................................................................ 643
öffnen ................................................................... 644
schließen ............................................................. 644
Zyklus festlegen ................................................... 357
4286-8.book Seite 800 Dienstag, 6. Dezember 2016 9:52 09
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Bitte beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre Darstel-lung von der E-Book-Fassung des vorgestellten Buches abweichen können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nut-zungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Teilen Sie Ihre Leseerfahrung mit uns!
Bernd Held ist von Haus aus gelernter Informatiker und schreibt Bücher und Fachartikel. Zu seinen Spezial- gebieten zählen Excel, VBA-Programmierung, Access und allgemeine Office- und Tool-Themen. Er wurde von Microsoft mehrfach als MVP (Most Valuable Pro-fessional) für den Bereich Excel ausgezeichnet.
Bernd Held
VBA mit Access – Das umfassende Handbuch800 Seiten, gebunden, 2. Auflage 2016 49,90 Euro, ISBN 978-3-8362-4286-8
www.rheinwerk-verlag.de/4209
Wissen, wie’s geht.