Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Ihren XING-Kontakten zeigen

Diesen Beitrag Ihrem XING-Kontakten vorstellen

Diesen Beitrag auf Facebook teilen

Bisherige Kommentare:

"Application.Version" nicht unter Access 2000

Alle Kommentare ansehen oder Kommentar abgeben

Über den Autor:

André Minhorst

Bitte nutzen Sie das XING-Profil nicht
für Fragen zum Artikel, sondern nur für
den Kontaktaustausch beziehungsweise
Projekt- oder Supportanfragen.

Zusammenfassung

Setzen Sie die bedingte Kompilierung ein, um Code versionsabhängig einzusetzen.

Techniken

Berichte, PDF, VBA

Voraussetzungen

Access 2000 oder höher

Beispieldateien

BedingteKompilierung.mdb

Shortlink

622

Bedingte Kompilierung am Beispiel des PDF-Exports

André Minhorst, Duisburg

Mit Access 2007 ist wieder mal eine neue Version erschienen. Damit stellt sich für Softwareentwickler und auch für Anwender die Frage, ob man zu dieser Version wechseln sollte oder vielleicht versucht, eine Anwendung so weit anzupassen, dass diese auch mit der neuen Version zusammenarbeitet und gleichzeitig die vorhandenen Versionen unterstützt. Wie sich das für einzelne Features umsetzen lässt, zeigen wir am Beispiel PDF-Export.

Eine Anwendung bauen, die unter Access 2003 und älter und auch unter Access 2007 läuft? Was soll das bringen und vor allem: Wie soll das funktionieren? Bei früheren Versionswechseln sah man sich in der Regel nicht solch gravierenden Neuerungen ausgesetzt wie es jetzt unter Access 2007 der Fall ist. Das gilt natürlich insbesondere für das Ribbon, das die bisher verwendeten Menüleisten ersetzt. Aber auch unter VBA und in anderen Bereichen sind einige Features hinzugekommen.

Wir haben uns den PDF-Export vorgenommen, der unter Access 2003 und älter und unter Access 2007 auf unterschiedliche (kostenlose) Weise erfolgen kann, um zu untersuchen, wie man eine Anwendung für mehrere Access-Versionen und deren Eigenarten vorbereitet.

Lebans vs. Microsoft

Bis Office 2007 erschien und mit ihm ein Add-In, das den Export von Access-Berichten und auch von Office-Dokumenten ins PDF-Format erlaubte, konnte man sich entweder bei einer der kostenpflichtigen Lösungen bedienen oder etwas Handgemachtes einsetzen. Für Access-Berichte haben viele Entwickler zu einer Lösung von Stephen Lebans gegriffen (http://www.lebans.com/reporttopdf.htm). Diese Lösung verwendet zwei DLLs, die man einfach im Systempfad speichert und vom Programmcode aus aufruft. Details dazu erfahren Sie im Beitrag Vom Bericht zum PDF-Dokument (Shortlink 430).

Ab Access 2007 bietet Microsoft unter folgendem Link ein Add-In an, mit dem man wahlweise über einen Eintrag des Office-Menüs oder über den Befehl DoCmd.OutputTo ein Objekt (in der Regel einen Bericht) im PDF-Format speichert: http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=f1fc413c-6d89-4f15-991b-63b07ba5f2e5

Alles in einem

Für beide Lösungen ist eine gewisse Menge Code notwendig. Wenn Sie die Anwendung unter Access 2003 kompilieren, möchten Sie normalerweise nur den dafür nötigen Code dort unterbringen, unter Access 2007 sieht das genauso aus.

VBA bietet für solche Fälle die bedingte Kompilierung an. Damit können Sie für ein Modul eine Konstante festlegen und in Abhängigkeit vom Wert dieser Konstanten in einer speziell markierten If...Then-Anweisung den jeweiligen Code unterbringen. Das sieht etwa so aus:

#Const AccessVersion = 2000

Public Sub BeispielBedingteKompilierung()

#If AccessVersion = 2000 Then

    MsgBox "2000"

#ElseIf AccessVersion = 2007 Then

    MsgBox "2007"

#End If

End Sub

Im aktuellen Fall, also mit dem Konstantenwert 2000, wird Access die erste MsgBox-Anweisung ausführen.

Der Unterschied zu einer herkömmlichen If...Then-Bedingung und der Clou an der Sache ist, dass VBA nur den Teil des Codes kompiliert, der beim aktuellen Wert der Konstanten AccessVersion angesprungen wird. Das bedeutet, dass die .mdb/.accdb-Datei zwar den kompletten Code im Rohformat enthält (also das, was Sie auch im VBA-Editor sehen, auch kanonischer Code genannt), aber nur den Teil in kompilierter Fassung (P-Code), den Sie durch die #If...#Then-Bedingung zur bedingten Kompilierung freigegeben haben. Wenn Sie schon die gleiche Funktion für zwei verschiedene Access-Versionen im Projekt haben, brauchen Sie ja nicht auch noch das Kompilat des jeweils nicht benötigten Teils mitzuschleppen.

Noch besser wird es, wenn Sie eine .mde/.accde-Datenbank aus der Originaldatenbank erzeugen: Hier wirft Access ja bekanntlich den kompletten kanonischen Code raus und behält nur den P-Code. Auf unser Beispiel bezogen fällt, wenn Sie beispielsweise eine Version für Access 2000 bis 2003 kompilieren, der Code weg, der für die Ausgabe von PDFs mit dem Microsoft'schen Add-In nötig war.

Pro Modul

Leider ist die Gültigkeit der Konstanten für die bedingte Kompilierung auf ein Modul beschränkt, und es gibt auch immer nur eine solche Konstante. Dabei spielt es allerdings keine Rolle, ob Sie die Konstante innerhalb einer Routine oder im Modulkopf festlegen. Es ist sogar egal, ob Sie die #If...#Then-Anweisung zur bedingten Kompilierung innerhalb oder außerhalb von Routinen unterbringen. Das kann zum Beispiel auch so aussehen:

Public Sub Test()

#Const AccessVersion = 2000

End Sub

#If AccessVersion = 2000 Then

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sie sind nicht angemeldet!
Für den kompletten Artikel plus Beispieldatenbanken müssen Sie sich einloggen!
Jetzt einloggen ...
 

Sie haben keine Benutzerdaten? Na, dann aber schnell:

Benutzerdaten erhalten Sie auf zwei Arten:

1. Testen Sie das Online-Archiv von 'Access im Unternehmen' für eine Woche. Sie müssen Sie lediglich für den 'Access im Unternehmen'-Newsletter anmelden.
Ja, ich will den einwöchigen Testzugang und den Newsletter!

2. Greifen Sie ein ganzes Jahr auf das Online-Archiv zu und erhalten Sie zusätzlich alle zwei Monate das brandneue "Access im Unternehmen"-Magazin - für nur EUR 108,-* im Jahr!
Ja, ich will Access im Unternehmen bestellen!

 

* inkl. MwSt., zzgl. Versandkostenpauschale, EUR 140,- inkl. MwSt., zzgl. Versandkostenpauschale ab dem zweiten Jahr

Kommentare und Ergänzungen

Wenn Sie Kommentare, Fragen oder Ergänzungen zu diesem Artikel haben, können Sie diese hier eintragen. Wir bemühen uns, kurzfristig auf Ihren Kommentar einzugehen.

Ihr Name:

Ihre E-Mail-Adresse (für
Rückfragen, wird nicht veröffentlicht:

Betreff:

Ihr Kommentar zu diesem Artikel:

Bisherige Kommentare

Frank Huppert schrieb am 2010-06-07 16:06:10:

"Application.Version" nicht unter Access 2000

Wie so oft ein sehr guter Artikel, es gibt nur ein kleinen Haken beim Definieren der bedingten Kompilierung abhängig von der Access Version im Code: zumindest unter Access 2000 gibt es kein "Application.Version", d.h. man muss sich um die Ermittlung der Version selbst kümmern. mit 2003 und 2007 funktioniert die beschriebene Funktion natürlich sehr gut, Viele Grüße!

© 2003-2010 André Minhorst Alle Rechte vorbehalten.