Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.
VBA unter Access mit 64 Bit
Die 64bit-Version von Access sollten Sie schon deshalb nicht nutzen, weil diese ActiveX-Steuerelemente wie das TreeView-, das ListView- oder das ImageList-Steuerelement nicht unterstützt. Aber es gibt noch weitere Gründe: Zum Beispiel könnte es Probleme bei der Verwendung von API-Funktionen geben. Manchmal bleibt einem Entwickler allerdings keine anderen Möglichkeit, weil etwa am Arbeitsplatz nur die 64bit-Version vorliegt oder aber der Kunde mit dieser Version arbeiten muss. Der vorliegende Beitrag liefert Informationen, wie Sie nicht kompatible VBA-Anweisungen für die Zielversion anpassen müssen und wie Sie programmieren müssen, um die 32bit- und die 64bit-Version gleichermaßen zu bedienen.
Unterschiede zwischen 32bit- und 64bit-Version
Warum entsteht das in der Einleitung beschriebene Dilemma überhaupt und was ist mit 32bit-Version und 64bit-Version überhaupt gemeint?
Hierbei beziehen wir uns zunächst auf das Betriebssystem. Wenn Sie ein 32bit-Betriebssystem nutzen, kann dieses maximal 2 hoch 32 Bytes Arbeitsspeicher adressieren, also ca. 4.096 Megabyte. Bei einem 64bit-Betriebssystem kann ein Arbeitsspeicher von 2 hoch 64 Byte adressiert werden – dies wird noch eine Weile ausreichen.
Wer also mehr als vier Gigabyte Arbeitsspeicher in seinem Rechner verbaut hat und sich wundert, dass davon nur vier angezeigt werden, fährt also vermutlich noch ein 32bit-Betriebssystem.
Möchten Sie herausfinden, wie viel Arbeitsspeicher Sie nutzen und ob Sie ein 32bit- oder ein 64bit-Betriebssystem nutzen, können Sie dies über die Systemsteuerung ermitteln. Unter Windows 7 etwa klicken Sie dazu auf Start|Systemsteuerung und dann auf System. Es erscheint der Dialog aus Bild 1, dem Sie die notwendigen Informationen entnehmen können. In diesem Fall handelt es sich um ein 64bit-System mit acht Gigabyte Arbeitsspeicher.
Bild 1: Hinweise auf Arbeitsspeicher und Betriebssystem in den Systemeinstellungen von WindowsOffice mit 32bit und 64bit
Damit kommen wir zum Thema Office und somit auch zu Access. Access 2010 etwa wird standardmäßig in der 32bit-Variante installiert.
Wer die 64bit-Variante wünscht, muss dies explizit bei der Installation angeben. Warum das? Weil es sehr viele externe Tools und Steuerelemente für Access in der 32bit-Version gibt. Würden Sie Access in der 64bit-Version installieren und versuchen, ein mit der 32bit-Version etwa von VB6 entwickeltes Add-In zu starten, führt dies zu einem Fehler.
Das Gleiche gilt, wenn Sie etwa ein 32bit-ActiveX-Steuerelement wie das TreeView-Steuerelement verwenden möchten – mehr dazu weiter unten.
Einfache Lösung
Wenn Sie eine neue Office-Version installieren, können Sie diese und anderen Probleme auf einfache Art und Weise umschiffen: Installieren Sie einfach die 32bit-Variante. Windows in der 64bit-Variante bietet eine Kompatibilitätsumgebung namens WOW64, mit der Sie 32bit-Anwendungen wie in diesem Fall Office und Access ganz normal ausführen können.
In diesem Fall wird Office nicht in dem dafür vorgesehenen Verzeichnis C:Program FilesMicrosoft OfficeOffice15 installiert, sondern etwa unter C:Program Files (x86)Microsoft OfficeOffice15.
Probleme mit ActiveX-Steuerelementen
Das vermutlich kritischste Problem, das bei der Nutzung von Access in der 64bit-Version auftaucht, sind ActiveX-Steuerelemente, die nur in der 32bit-Version verfügbar sind.
Wir haben testweise eine frische Datenbank unter der 32bit-Version mit einem TreeView-Steuerelement versehen. Wenn Sie diese Datenbank unter Access in der 64bit-Version öffnen, löst dies zunächst die Meldung aus Bild 2 aus.
Bild 2: Der Verweis auf die Datei MSCOMCTL.ocx kann unter Access in der 64bit-Version nicht gefunden werden.Wenn Sie diese Meldung ignorieren und dann das Formular mit dem TreeView-Steuerelement öffnen, erhalten Sie die Meldung aus Bild 3.
Bild 3: Der Container mit dem TreeView-Steuerelement ist leer.Was tun? Nun: Es gibt keine 64bit-Version dieses Steuerelements, also können Sie nur zur 32bit-Version von Access wechseln oder eine Alternative für das TreeView-Steuerelement suchen.
Probleme mit mde/accde
Wenn Sie eine .mde- oder .accde-Datei unter Access in der 32bit-Version erzeugt haben, können Sie diese nur mit der entsprechenden Access-Version öffnen. Wenn Sie etwa eine 32bit-accde-Datei unter Access in der 64bit-Version öffnen, erhalten Sie die Fehlermeldung aus Bild 4. In diesem Fall besteht Hoffnung: Wenn Sie Zugriff auf die unkompilierte Version der Datenbankdatei haben, können Sie diese unter der 64bit-Version von Access kompilieren und die .mde/.accde-Datei dann unter Access in der 64bit-Version nutzen.
Bild 4: Fehler beim Öffnen einer .mde- oder .accde-Datei, die mit Access in der 32bit-Version erstellt wurdeProbleme mit API-Deklarationen
Ein weiteres Problem tritt auf, wenn Sie API-Funktionen, die mit der 32bit-Version von Access funktionieren, unter der 64bit-Version einsetzen möchten. Wir schauen uns dazu die GDI-/OGL-Bibliothek von Sascha Trowitzsch an, die eine Menge API-Funktionen verwendet, und wollen diese für die 64bit-Version lauffähig machen.
Wenn Sie das Modul mdlOGL0710 unter Access 2013 in der 64bit-Version öffnen, erhalten Sie einige rot markierte Zeilen wie in Bild 5. Der erste Schritt, um die API-Deklarationen für die 64bit-Version nutzbar zu machen, liegt im Hinzufügen eines einfachen Schlüsselworts, und zwar PtrSafe. Dieses Schlüsselwort fügen Sie unmittelbar hinter der Declare-Anweisung der API-Funktion ein, sodass etwa die erste in der Abbildung sichtbare Funktion wie in Bild 6 aussieht.
Bild 5: Fehlerhafte API-Deklarationen
Bild 6: Hinzufügen des Schlüsselworts PtrSafe
Auf diese Weise statten Sie nun alle API-Funktionen mit diesem Schlüsselwort aus. Die Suchen/Ersetzen-Funktion des VBA-Editors ist dabei eine willkommene Erleichterung: Ersetzen Sie zunächst Declare Function durch Declare PtrSafe Function und dann Declare Sub durch Declare PtrSafe Sub – klicken Sie dabei jeweils auf Alle ersetzen (siehe Bild 7).
Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.