VBA unter Access mit 64 Bit

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.

Hinweise auf Arbeitsspeicher und Betriebssystem in den Systemeinstellungen von Windows

Bild 1: Hinweise auf Arbeitsspeicher und Betriebssystem in den Systemeinstellungen von Windows

Office 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-Steuer­element verwenden möchten – mehr dazu weiter unten.

Einfache Lösung

Wenn Sie eine neue Office-Version in­stallieren, 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 kritisch­ste 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.

Der Verweis auf die Datei MSCOMCTL.ocx kann unter Access in der 64bit-Version nicht gefunden werden.

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.

Der Container mit dem TreeView-Steuerelement ist leer.

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.

Fehler beim Öffnen einer .mde- oder .accde-Datei, die mit Access in der 32bit-Version erstellt wurde

Bild 4: Fehler beim Öffnen einer .mde- oder .accde-Datei, die mit Access in der 32bit-Version erstellt wurde

Probleme 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.

Fehlerhafte API-Deklarationen

Bild 5: Fehlerhafte API-Deklarationen

Hinzufügen des Schlüsselworts PtrSafe

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.

Bitte geben Sie die Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]