GUIDs per VBA erstellen (64-bit-kompatibel)

Fehlerhaft markierte API-Deklarationen

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

Fehlerhaft markierte API-Deklarationen

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

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.


Nur für Abonnenten

Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.

Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.

So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.

Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.

Bereits Abonnent? Hier einloggen


Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →

Schreibe einen Kommentar