درک متغیرها و ثابت ها در ماکروهای اکسل

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

مانند سایر زبان‌های برنامه‌نویسی، داده‌ها را می‌توان در متغیرها یا ثابت‌ها ذخیره کرد (که هر دو اغلب به عنوان کانتینر داده نیز شناخته می‌شوند). این تفاوت اصلی بین این مفاهیم است. بسته به آنچه در برنامه اتفاق می افتد ممکن است اولی تغییر کند. به نوبه خود، ثابت ها یک بار تنظیم می شوند و مقدار خود را تغییر نمی دهند.

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

اگر کاربر اکسل نیاز به تغییر مقدار ذخیره شده در آنها هر از چند گاهی متغیرها را داشته باشد، باید متغیرها را اعلام کند. به عنوان مثال، می توانید متغیری به نام sVAT_Rate تنظیم کنید که نرخ فعلی مالیات بر ارزش افزوده را برای محصول ذخیره می کند. اگر تغییر کرد، می توانید به سرعت آن را اصلاح کنید. این به ویژه برای کسانی که در ایالات متحده تجارت می کنند مفید است، جایی که برخی از کالاها ممکن است اصلا مشمول مالیات بر ارزش افزوده نباشند (و این مالیات نیز از ایالت به ایالت متفاوت است).

انواع داده ها

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

استفاده از نوع داده ای که فضای بیشتری در حافظه اشغال می کند برای اعداد کم توصیه نمی شود. به عنوان مثال برای عدد 1 استفاده از نوع Byte کافی است. این امر بر عملکرد ماژول اجرایی به خصوص در رایانه های ضعیف تأثیر مثبت خواهد داشت. اما مهم است که در اینجا زیاد دور نرویم. اگر از نوع داده‌ای استفاده می‌کنید که خیلی فشرده است، ممکن است یک مقدار بزرگ در آن مناسب نباشد.

اعلان ثابت ها و متغیرها

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

برای اعلام یک متغیر، از دستور Dim استفاده می شود. به عنوان مثال، مانند این:

Dim Variable_Name به عنوان عدد صحیح

Variable_Name نام متغیر است. سپس عملگر As نوشته می شود که نوع داده را نشان می دهد. به جای رشته های "Variable_Name" و "Integer"، می توانید نام و نوع داده خود را وارد کنید.

ثابت ها را نیز می توان اعلام کرد، اما ابتدا باید مقدار آنها را مشخص کنید. یکی از گزینه ها این است:

Const iMaxCount = 5000

انصافاً در برخی موارد می توانید بدون اعلام متغیر انجام دهید، اما در این صورت به طور خودکار نوع Variant به آنها اختصاص داده می شود. اما این کار به دلایل زیر توصیه نمی شود:

  1. نوع بسیار کندتر پردازش می شود و اگر چنین متغیرهایی زیاد باشد، پردازش اطلاعات در رایانه های ضعیف به میزان قابل توجهی کاهش می یابد. به نظر می رسد که آن ثانیه ها تصمیم می گیرند؟ اما اگر مجبور باشید تعداد زیادی خط کد بنویسید و سپس آن را روی رایانه های ضعیف اجرا کنید (که هنوز هم فروخته می شوند، با توجه به اینکه مجموعه های اداری مدرن به رم زیادی نیاز دارند)، می توانید کار را به طور کامل متوقف کنید. مواردی وجود دارد که نوشتن نادرست ماکروها منجر به انجماد کتاب‌های هوشمندی شده است که مقدار کمی رم دارند و برای انجام کارهای پیچیده طراحی نشده‌اند. 
  2. چاپ اشتباه در نام‌ها مجاز است، که می‌توان با استفاده از عبارت Option Explicit، که به شما امکان می‌دهد یک متغیر اعلام‌نشده را در صورت یافتن پیدا کنید، جلوگیری کرد. این یک راه آسان برای تشخیص خطا است، زیرا کوچکترین اشتباه تایپی باعث می شود که مفسر قادر به شناسایی متغیر نباشد. و اگر حالت اعلان متغیر را روشن کنید، اگر محفظه های داده ای پیدا شوند که در همان ابتدای ماژول اعلام نشده اند، مفسر به سادگی به شما اجازه اجرای ماکرو را نمی دهد.
  3. از خطاهای ناشی از عدم تطابق مقادیر متغیر با نوع داده جلوگیری کنید. به طور معمول، اختصاص یک مقدار متنی به یک متغیر عدد صحیح، یک خطا ایجاد می کند. بله، از یک طرف، یک نوع عمومی بدون اعلان اختصاص داده می شود، اما اگر آنها از قبل اعلام شده باشند، می توان از خطاهای تصادفی اجتناب کرد.

بنابراین، با وجود همه چیز، به شدت توصیه می شود که همه متغیرها را در ماکروهای اکسل اعلام کنید.

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

  1. خطوط خالی می شوند.
  2. اعداد مقدار 0 را می گیرند.
  3. متغیرهای نوع Boolean در ابتدا نادرست در نظر گرفته می شوند.
  4. تاریخ پیش فرض 30 دسامبر 1899 است.

برای مثال، اگر قبلاً مقداری مشخص نشده بود، نیازی به اختصاص مقدار 0 به یک متغیر عدد صحیح ندارید. او قبلاً حاوی این شماره است.

گزینه بیانیه صریح

این عبارت به شما این امکان را می دهد که تمام متغیرهایی را که در کد VBA استفاده می شود را اعلام کنید و قبل از اجرای کد، وجود کانتینرهای اعلام نشده را تعیین کنید. برای استفاده از این ویژگی، کافی است یک خط کد Option Explicit را در بالای کد ماکرو بنویسید.

اگر لازم است هر بار این عبارت را در کد خود وارد کنید، می توانید با استفاده از یک تنظیم خاص در ویرایشگر VBA این کار را انجام دهید. برای فعال کردن این گزینه باید:

  1. به محیط توسعه در طول مسیر بروید – Tools > Options.
  2. در پنجره ای که بعد از این باز می شود، تب Editor را باز کنید.
  3. و در نهایت کادر کنار آیتم Require Variable Declaration را علامت بزنید.

پس از انجام این مراحل، بر روی دکمه "OK" کلیک کنید. 

تمام شد، حالا هنگام نوشتن هر ماکرو جدید، این خط به طور خودکار در بالای کد درج می شود.

محدوده ثابت ها و متغیرها

هر متغیر یا ثابت فقط دامنه محدودی دارد. بستگی داره کجا اعلام کنی

فرض کنید یک تابع داریم هزینه کل()، و از متغیر استفاده می کند sVAT_Rate. بسته به موقعیت در ماژول، دامنه متفاوتی خواهد داشت:

گزینه صریح

کم رنگ sVAT_Rate As Single

تابع Total_Cost() به عنوان Double

.

.

.

عملکرد پایان

اگر متغیری در بالای خود یک ماژول اعلام شود، در سراسر آن ماژول منتشر می شود. یعنی با هر رویه ای قابل خواندن است.

علاوه بر این، اگر یکی از رویه ها مقدار متغیر را تغییر دهد، روش بعدی نیز این مقدار اصلاح شده را خواهد خواند. اما در ماژول های دیگر این متغیر همچنان خوانده نمی شود.

گزینه صریح

تابع Total_Cost() به عنوان Double

کم رنگ sVAT_Rate As Single

   .

   .

   .

عملکرد پایان

در این حالت متغیر در داخل رویه اعلان می شود و مفسر اگر در رویه دیگری استفاده شود خطا می دهد.

اگر می خواهید متغیر توسط ماژول های دیگر خوانده شود، باید از کلمه کلیدی Public به جای کلمه کلیدی Dim استفاده کنید. به همین ترتیب، می توانید با استفاده از عبارت Public که به جای کلمه Dim نوشته می شود، دامنه یک متغیر را فقط به ماژول فعلی محدود کنید.

شما می توانید محدوده ثابت ها را به روشی مشابه تنظیم کنید، اما کلمه کلیدی در اینجا همراه با عملگر Const نوشته می شود.

در اینجا جدولی با مثال خوبی از نحوه کار با ثابت ها و متغیرها آورده شده است.

گزینه صریح

عمومی sVAT_Rate As Single

Public Const iMax_Count = 5000

در این مثال، می‌توانید ببینید که چگونه از کلمه کلیدی عمومی برای اعلان یک متغیر استفاده می‌شود، و برای اعلام یک ثابت عمومی چه چیزی را باید در ویرایشگر ویژوال بیسیک بنویسید. دامنه این کانتینرهای ارزش برای همه ماژول ها اعمال می شود.
گزینه صریح

خصوصی sVAT_Rate As Single

Const خصوصی iMax_Count = 5000

در اینجا، متغیرها و ثابت ها با استفاده از کلمه کلیدی Private اعلام می شوند. این بدان معنی است که آنها فقط در ماژول فعلی قابل مشاهده هستند و رویه های موجود در ماژول های دیگر نمی توانند از آنها استفاده کنند.

چرا ثابت ها و متغیرها مورد نیاز است

استفاده از ثابت ها و متغیرها به شما امکان می دهد درجه درک کد را افزایش دهید. و اگر مبتدیان به طور کلی سؤالی در مورد چرایی نیاز به متغیرها نداشته باشند، ابهامات زیادی در مورد نیاز به ثابت وجود دارد. و این سوال در نگاه اول کاملا منطقی به نظر می رسد. پس از همه، شما می توانید یک متغیر را یک بار اعلام کنید و دیگر هرگز آن را تغییر ندهید.

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

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

یا اگر ثابتی با یک نام وجود داشته باشد و متغیر نامی متفاوت اما مشابه داشته باشد. توسعه دهنده به سادگی می تواند آنها را گیج کند. به عنوان مثال، متغیری که نیاز به تغییر ندارد، Variable11 و دیگری که قابل ویرایش است، Variable1 نامیده می شود. یک فرد می تواند به طور خودکار هنگام نوشتن کد، به طور تصادفی یک واحد اضافی را رد کند و متوجه آن نشود. در نتیجه، محفظه مقادیر تغییر می کند، که نباید آنها را لمس کرد.

یا خود توسعه دهنده ممکن است فراموش کند که کدام متغیرها را می تواند لمس کند و کدام را نمی تواند. این اغلب زمانی اتفاق می افتد که کد برای چندین هفته نوشته می شود و اندازه آن بزرگ می شود. در این مدت، فراموش کردن معنای این یا آن متغیر بسیار آسان است.

بله، در این شرایط می توانید با نظرات کار کنید، اما آیا تعیین کلمه Const آسان تر نیست؟

نتیجه گیری

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

اگر توسعه دهنده مطمئن باشد که محتویات این کانتینرها در آینده تغییر نخواهد کرد، باید از ثابت ها استفاده شود. توصیه می شود به جای آن از متغیرها استفاده نکنید، زیرا ممکن است به طور تصادفی اشتباه کنید.

پاسخ دهید