این قضیه فقط مربوط به زمانیست که شما از کدهای API ویندوز استفاده میکنید که در این مواقع در آفیسهای 64 بیتی باید کلیدواژه ی PtrSafe رو به دستورتون اضافه کنید. اگر از API استفاده نکنید تفاوتی در طراحی برنامه با آفیس 32 بیتی و 64 بیتی وجود نداره.
مثلا فراخوانی یک تابع نمونه در آفیس 32 بیتی دستور به صورت زیر نوشته میشه:
Public Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
ولی همون تابع در آفیس 64 بیتی باید بصورت زیر فراخوانی بشه:
Public Declare PtrSafe Sub MessageBeep Lib "User32" (ByVal N As Long)
شما 2 راه حل دارید:
1. فقط در مواقع خیلی ضروری از کدهای API استفاده کنید و اگر عملکرد خیلی حیاتی نداره ازش استفاده نکنید.
2. از کامپایل شرطی استفاده کنید. بصورت زیر: (علامت هشتگ باید اول خط باشه)
#If VBA7 Then
Public Declare PtrSafe Sub MessageBeep Lib "User32" (ByVal N As Long)
#Else
Public Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
#End If
توضیح: VBA7 یک const (ثابت) داخلی اکسس هست که بیانگر 64 بیتی بودن آفیس هست
برای چک کردن ویندوز 64 یا 32 بیتی هم میتونید از ثابت Win64 استفاده کنید:
#If Win64 Then
Declare PtrSafe Function ...
#Else
Declare Function ...
#End If