ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
19 visibility
موضوع: آفیس توسط:

جف یک ورک بوک پیچیده اکسل دارد که از VBA برای تولید گزارش های متعدد در قالب PDF استفاده می کند. این برنامه در اکسل 2013 32 بیتی در چندین رایانه شخصی عالی اجرا می شود. برعکس، در چندین رایانه شخصی دیگر که Office 365 را اجرا می کنند، جف در نیمه راه خروجی، خطای «Out of Memory» را دریافت می کند. بنابراین، ماکروها روی نسخه قدیمی اکسل کاملاً کار می کنند، اما روی جدیدترین نسخه نه. (دوباره، جف این را روی چندین رایانه شخصی آزمایش کرد تا نتایج قابل تکرار باشند.) جف تعجب می کند که نشت حافظه شناخته شده یا تفاوت های ماکرو در Office 365 وجود دارد که می تواند باعث این مشکل شود.

به طور کلی، استفاده از حافظه با یک مسئله اصلی مرتبط است - متغیرها و نحوه استفاده از آنها در ماکرو شما. به طور خاص با آرایه های متغیر وارد بازی می شود. همیشه ایده خوبی است که مطمئن شوید همه متغیرهای خود را اعلام کرده اید (از دستورالعمل Option Explicit برای کمک به این موضوع استفاده کنید) و ابعاد آرایه خود را بررسی کنید تا مطمئن شوید که در تلاش برای اعلام یک آرایه بسیار بزرگ نیستید.

متغیرهای شی نیز می توانند از حافظه زیادی استفاده کنند. اگر از کلمه کلیدی Set برای اختصاص یک شی به یک متغیر استفاده می کنید، مطمئن شوید که متغیر شی را روی Nothing تنظیم کرده اید. این به ویژه در داخل حلقه ها مهم است - اگر هر عبور از حلقه منجر به اعلان متغیر شی دیگری شود، اگر در طی هر بار تکرار حلقه موفق به پاک کردن آن متغیر نشدید، می توانید خیلی سریع از حافظه استفاده کنید.

همچنین باید نکته ای را برای خاموش کردن به روز رسانی صفحه در زمانی که ماکرو شما در حال گذراندن چرخش خود است در نظر گرفت. اگر ماکرو شما سعی می کند به طور مداوم صفحه را به روز کند، از منابع استفاده می کند و ماکرو شما را کند می کند.

با این حال، می توان فکر کرد که در موقعیت جف، استفاده از حافظه مشکل بزرگی نخواهد بود. از این گذشته، او از یک نسخه 32 بیتی اکسل به (بیش از احتمال زیاد) نسخه 64 بیتی در حال حرکت است. این به اکسل اجازه می دهد تا از فضای حافظه بزرگتری نسبت به قبل استفاده کند. بنابراین، ممکن است تصور شود که خطاهای "خارج از حافظه" کمتر احتمال دارد تا احتمال بیشتری داشته باشد.

متأسفانه، آچاری برای پرتاب کردن در اینجا وجود دارد. وقتی با خطای «Out of Memory» مواجه می شوید، ممکن است حافظه مقصر نباشد. مایکروسافت طی سال ها مستند کرده است که این حافظه خاص ماهیت عمومی دارد و تقریباً می تواند ناشی از هر چیزی باشد. (در کتاب من، این پیام خطا را بی فایده می کند، اما من کی هستم که مایکروسافت را زیر سوال ببرم. خسته کننده!)

کار دیگری که می خواهم انجام دهم (عدم مشاهده کد جفز) این است که مطمئن شوم به صورت خطی برنامه نویسی نمی کنید. به عبارت دیگر، کد خود را به زیر روال های جداگانه تقسیم کنید که وظایف کوچک و مجزا را پیش فرض می کنند. سپس می توانید هر زیربرنامه را از یک روال اصلی و کنترل کننده فراخوانی کنید. مزیت این امر مدیریت حافظه به دلیل دامنه است. متغیرها فقط در رویه ای که در آن استفاده می شوند دامنه دارند. (خب، این درست است، مگر اینکه شما آنها را به عنوان دارای دامنه جهانی اعلام کنید، اما این یک کتری ماهی متفاوت است.) این بدان معنی است که متغیرهای مورد استفاده در یک رویه از بین می روند و حافظه آنها به طور خودکار، زمانی که از رویه خارج می شود، آزاد می شود.

با این حال، اگر ماکرو شما به صورت خطی نوشته شده باشد به طوری که هیچ زیرروال وجود نداشته باشد، تمام متغیرها در تمام مدت زمان اجرای ماکرو در سیستم شما حفظ می شوند. از دیدگاه مدیریت حافظه، بهتر است کد خود را به رویه ها تقسیم کنید تا بتوانید مصرف حافظه را به حداقل برسانید.

مزیت دیگر ماژولار کردن کد خود به این روش این است که اگر با یک خطا مواجه شدید - حتی خطای بی ارزش «Out of Memory» - احتمالاً در یک رویه خاص رخ می دهد و در نتیجه می توانید شانس بهتری برای تعیین دقیق مکان داشته باشید. خطای واقعی در حال رخ دادن است به نظر من، این توانایی برای ردیابی موثرتر نقطه بالقوه بریک، یک مزیت بزرگ است.

اگر باز هم مشکل برطرف نشد، من گزارش هایی را دیده ام که وقتی ورک بوک خود را ذخیره می کنید، VBA را مجبور می کند تا جمع آوری زباله در فضای حافظه شما انجام دهد. به همین دلیل، برخی از افراد پیشنهاد می کنند که ماکرو خود را هر چند وقت یکبار به جای اینکه فقط در انتهای ماکرو قرار دهید، ورک بوک را ذخیره کنید. نمی دانم این گزارش دهی چقدر دقیق است، اما اگر قبلاً از ماکرو خود برای ذخیره ورک بوک استفاده می کنید، ذخیره آن در دفعات بیشتر و نه کمتر ضرری ندارد.

نکته پایانی وجود دارد که باید به آن اشاره کرد. اگر اکنون از Office 365 Business Premium استفاده می کنید، شامل SharePoint Online و Excel Web App می شود. بنابراین، این نسخه ها حجم یک فایل اکسل را به 10 مگابایت محدود می کنند. اگر فایل شما بسیار بزرگ است، ممکن است در اکسل 2013 به خوبی کار کرده باشد، اما در Office 365 Business Premium به دلیل این محدودیت اندازه فایل، ناموفق است.

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

140 نفر آنلاین
0 عضو و 140 مهمان در سایت حاضرند
بازدید امروز: 5165
بازدید دیروز: 25459
بازدید کل: 15232682
...