Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Bild 1: Fehlerhaft markierte API-Deklarationen
Access kann ab Version 2010 auch als 64-Bit-Variante installiert werden. Ab Version 2019 ist 64-Bit die Voreinstellung bei der Installation. Wir stellen in dieser Beitragsreihe die Änderungen vor, die für die Verwendung verschiedener oft genutzter VBA-Prozeduren und Komponenten unter der 64-Bit-Version nötig sind. Dabei wollen wir auch dafür sorgen, dass diese unter der 32-Bit-Version von Access älter als 2010 ebenfalls noch laufen. Den Anfang machen wir mit der 64-Bit-Version der in vielen Beispiellösungen verwendeten Funktion zum Ermitteln von GUIDs.
Wenn Sie die alte Version unter Access in der 64-Bit-Version kompilieren wollen, stoßen Sie schnell auf einige der Inkompatibilitäten, und zwar noch vor dem Kompilieren. Die beiden API-Funktionen CoCreateGuid und StringFromGUID2 werden rot angezeigt (siehe Bild 1).
Bild 1: Fehlerhaft markierte API-Deklarationen
Damit sich das ändert, fügen Sie zwischen die beiden Schlüsselwörter Declare und Function das Schlüsselwort PtrSafe ein:
Private Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (tGUIDStructure As GUID) As Long Private Declare Function StringFromGUID2 Lib "ole32.dll" (rGUID As Any, ByVal lpstrClsId As Long, ByVal cbMax As Long) As Long
Damit entfällt bereits die rote Markierung dieser Funktionsdeklarationen und Sie können den Befehl Debuggen|Kompilieren von
Dieser liefert einen Kompilierfehler für den Aufruf der Funktion StringFromGUID2, wo für den zweiten Parameter eine Typunverträglichkeit angezeigt wird. Dies ändern wir, indem wir den Typ des zweiten Parameters in der Deklaration der API-Funktion StringFromGUID2 von Long in LongPtr ändern:
Private Declare Function StringFromGUID2 Lib "ole32.dll" (rGUID As Any, ByVal lpstrClsId As LongPtr, ByVal cbMax As Long) As Long
Danach lässt sich die Funktion kompilieren und wir können diese mit dem folgenden Befehl im Direktbereich des VBA-Editors aufrufen:
Debug.Print CreateGUID
{058FB0DE-A528-41B9-8AE0-F19DA8FD27F6}
Probleme gibt es nun nur noch, wenn Sie diese Funktion in Access-Versionen verwenden, die noch kein VBA 7 enthalten, sondern VBA 6. Dann müssen Sie noch eine Unterscheidung einfügen, die prüft, welche VBA-Version vorliegt und die entsprechende Deklaration der API-Funktionen einsetzt.
Dabei verwenden wir die sogenannten Compiler-Konstanten. Es gibt beispielsweise die Konstanten VBA6 und VBA7. VBA6 liefert den Wert True, wenn VBA 6 verwendet wird. VBA7 liefert den Wert True, wenn VBA 7 zum Einsatz kommt.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo