Clever-Excel-Forum

Normale Version: Excel M365 Dim as long
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo ins Forum,

einer unserer Kunden hat beim Vorabtest mit Excel M365 festgestellt dass Variablen als Long definiert seinen und es daher Kompatibilitätsprobleme gäbe.

Die Excelmappen laufen bei uns auf Excel 2016 sowohl in der 32Bit und in der 64Bit-Version.

Die declare-Anweisungen sind entsprechend mit bedingter Kompilierung #VBA7 bzw #Win64 deklariert z.B.:
Code:
#If VBA7 Then
  Private Type uPicDesc
      Size As Long
      Type As Long
          hPic As LongPtr
          hPal As LongPtr
      End Type
      Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hWnd As LongPtr) As Long
      Private Declare PtrSafe Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As LongPtr
#Else
  Private Type uPicDesc
      Size As Long
      Type As Long
          hPic As Long
          hPal As Long
      End Type
      Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
      Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long
#End if

1. Frage: Gibt es neuere Excelversionen wo die reinen "As Long" Anweisung Probleme haben?

2. Frage: Was würde passieren wenn alle "As Long" Anweisungen als "As LongPtr" deklariert würden (bei Einsatz von Excelversionen ab Excel2010)?
3. Frage: Gibt es z.B. in Verbindung mit Microsoft 365 neuere VBA-Versionen (VBA8 oder sowas)?

Gruß
rawa
Hallo,

1. Nein
2. LongPtr sollte da eingesetzt werden, wo es erforderlich ist (APIs) und nicht überall. Valide bei 32 und 64 Bit.
3. Nein

Deine Deklarationen beachten VBA7 Nein/Ja, also Excel < 2010 oder nicht. Wenn sowieso Excel ab 2010 verwendet
wird, dann bräuchtest Du das nicht und es würde nur die Abfrage zu Win64 reichen, wo notwendig. Ausserdem
liefert meine Win32-API Sammlung einen anderen API-Aufruf bei GetClipboardData.

PHP-Code:
Private Declare PtrSafe Function GetClipboardData Lib "user32" Alias "GetClipboardDataA" (ByVal wFormat As Long) As LongPtr 

Gruß
Hallo maninweb,
danke für die Antwort und Hinweise. Die Declaration der GetClipboardData hat bisher mal nicht gemeckert, schaue ich mir aber mal an.
Gruß
rawa