Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Excel

Lesen Sie hier einige der besten Beiträge aus SmartTools Excel Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Excel.

Beitrag aus SmartTools Excel Weekly

VBA-Makros an 64-Bit-Excel anpassen

Excel 365 2024 2021 2019 2016 2013

FRAGE Wir sind dabei, unsere Office-Umgebung von 32 Bit auf 64 Bit umzustellen. Dabei musste ich allerdings feststellen, dass gleich mehrere unserer VBA-Makros in der 64-Bit-Umgebung nicht mehr funktionieren. Kennen Sie eine Automatik, mit der ich meine Makros auf 64 Bit umstellen kann? Oder wissen Sie, welche manuellen Änderungen ich vornehmen muss? Oder ist eine Umstellung eventuell gar nicht möglich?

B. Ewald

ANTWORT Die meisten VBA-Makros, die Sie in einer 32-Bit-Excel-Version erstellt haben, laufen unverändert auch in einer 64-Bit-Umgebung. Wenn es doch zu Fehlern kommt, setzen Sie in Ihren Makros vermutlich Windows-API-Funktionen ein. In diesem Fall müssen Sie die entsprechenden Deklarationen und die Variablen, die sich auf API-Funktionen beziehen, an die 64-Bit-Umgebung anpassen. Am besten stellen Sie Ihren Makrocode dann so um, dass er sowohl unter einem 32-Bit- als auch einem 64-Bit-Excel läuft.

Ein Tool, das diese Umstellung automatisch erledigt, gibt es allerdings nicht. Sie müssen Ihren Code manuell anpassen. Wertvolle Hinweise dazu bietet Microsoft zum Beispiel auf diese Webseite an.

Eine bedingte Kompilierung ist in vielen Fällen aber gar nicht nötig. Insbesondere eine bedingte Kompilierung, die die Konstante "VBA7" überprüft, brauchen Sie nur dann, wenn Ihre Makros auch noch in Excel 2007 oder früher lauffähig sein sollen. Schon Excel 2010 arbeitet mit der neuen VBA-Umgebung.

Oft sind dann nur geringfügige Änderungen am bestehenden Makrocode notwendig, um diesen fit für einen alternativen Einsatz in 32-Bit- oder 64-Bit-Umgebungen zu machen. So bietet sich zum Beispiel der Datentyp "LongPtr" an, wenn ein Zeiger oder Handler deklariert werden muss. "LongPtr" wird automatisch in die passende Byte-Größe umgewandelt, je nachdem in welcher Bit-Umgebung der Code ausgeführt wird.

Und in der Deklaration einer API-Funktion müssen Sie nur "PtrSafe" hinzufügen, um eine Kompatibilität zu 64-Bit-Umgebungen zu gewährleisten.

Der folgende Code für die Deklaration der API-Funktion, die den Speichern unter-Dialog ausführt, ist beispielsweise sowohl im 32-Bit- als auch im 64-Bit-Excel lauffähig:

Private Type OPENFILENAME
  lStructSize As Long
  hwndOwner As LongPtr
  hInstance As LongPtr
  lpstrFilter As String
  lpstrCustomFilter As String
  nMaxCustrFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  Flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustData As Long
  lpfnHook As LongPtr
  lpTemplateName As String
End Type

Private Declare PtrSafe Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long