1 ضمیمه
پیام خطا در انتقال برنامه به سیستم دیگر
سلام دوستان
من برنامه ام رو روی لپ تاپ منزل با ویندوز 10 طراحی کردم و درهنگام اجرا مشکلی ندارم ولی وقتی فایل برنامه رو به سیستم اداره منتقل کردم هر فرم یا گزارش یا کوئری رو اجرا میکنم این پیام خطا رو از ماژولها میگیرد
لطفا بفرمائید چگونه رفع عیب کنم ؟ ممنون از همه
نقل قول: پیام خطا در انتقال برنامه به سیستم دیگر
این بر میگرده به اینکه شما برنامه تون رو در سیستم 64 بیت طراحی کرده و در سیستم 32بیت میخواهید اجراش کنید که نمیشه ...
نقل قول: پیام خطا در انتقال برنامه به سیستم دیگر
ممنون دوست عزیز ولی چک کردم هر دو سیستم 64 بیتی هستند
نقل قول: پیام خطا در انتقال برنامه به سیستم دیگر
نقل قول:
نوشته شده توسط
iransim
ممنون دوست عزیز ولی چک کردم هر دو سیستم 64 بیتی هستند
ببینید ما علاوه بر اینکه ویندوز 64 بیت و 32 بیت داریم، آفیس 64 بیت و 32 بیت هم داریم که جدا از بحث ویندوز هست. شما کدتون رو در سیستم اول با آفیس 32 بیتی نوشتید ولی آفیس شما در سیستم دوم نسخه ی 64 بیتی هست.
برای استفاده از دستورات API ویندوز در نسخه 64 بیتی باید کلیدواژه ی PtrSafe رو بعد از Declare اضافه کنید:
Private Declare PtrSafe Function...
نقل قول: پیام خطا در انتقال برنامه به سیستم دیگر
دوست عزیز ممنون از جوابتون
امکانش هست بیشتر توضیح بدهید ؟ یعنی کجای برنامه رو باید اصلاح کنیم ؟
باید دوباره برنامه رو یه سیستم و افیس 64 پیاده و طراحی کنم ؟ ( البته خدا نکنه )
اگه نسخه افیس سیستم اول رو به 64 تغییر بدم مشکل حل میشه ؟
نقل قول: پیام خطا در انتقال برنامه به سیستم دیگر
این قضیه فقط مربوط به زمانیست که شما از کدهای 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
نقل قول: پیام خطا در انتقال برنامه به سیستم دیگر
خیلی خیلی ممنونم دوست عزیز
اگه بازم سئوالی بود مزاحم میشم