2010-11-22 3 views
3

Ich habe ein Problem mit unter Funktionsaufruf beobachtet, wenn wir auf Office 2010-64 Bit-Version migriert.Wie VBA-Code kompatibel für Office 2010 - 64-Bit-Version und ältere Office-Versionen

Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) 

Nach Informationen über http://msdn.microsoft.com/en-us/library/ee691831.aspx Link. Ich habe oben genannten Anruf wie unten geändert und es hat gut funktioniert auf Office 2010 64-Bit-Version.

Private Declare PtrSafe Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) 

Das Problem ist, ich brauche gleichen Anruf zu tätigen als auch zu arbeiten, auf ältere Office-Versionen und es wirft Fehler auf älteren Versionen kompiliert.

Hat jemand eine Idee, wie Sie diesen Anruf für Office 2010 und ältere Office-Versionen arbeiten.

+1

Zu Ihrer Information: Microsoft empfiehlt die Verwendung der 64-Bit-Version von Office aus Gründen der Kompatibilität. Sie sollten es nur verwenden, wenn Sie extrem große Dokumente (Excel-Tabellen) verarbeiten müssen. –

+1

@ 0xA3 Das scheint kein genaues Zitat zu sein: http://technet.microsoft.com/en-us/library/ee681792.aspx, yesno? – Fionnuala

+0

Vielleicht bedingte Compiler-Konstanten: http://stackoverflow.com/questions/3426693/tempvars-and-access-2003/3427119#3427119 '#If Version =" 14.0 "Dann Private Declare <...>' – Fionnuala

Antwort

7

Wie der MSDN-Artikel sagt, verwenden bedingte Kompilierung: es funktioniert gut für mich in Excel 97 bis Excel 2010 32-Bit & 64-Bit.

#If VBA7 Then 
Private Declare PtrSafe Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) 
#Else 
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) 
#End if 
+0

Dank Charles, ich habe das an meinem Ende versucht, aber auf 32-Bit-Büro wirft es Kompilierungsfehler für PtrSafe mit der Angabe "Funktion oder Unter ist nicht definiert". Können Sie mich bitte wissen lassen, wenn ich etwas vermisse? Vielen Dank im Voraus. – NewAutoUser

+0

Ich bearbeitet, um ein Dann zu #If VBA7 –

+0

Ich habe es gerade auf Excel 2003 getestet: kompiliert gut. –

Verwandte Themen