برگزیده های پرشین تولز

تعریف متغیر ها و ثابت ها در وی بی (VBA) | قسمت دوم

S.Cheraghi

کاربر تازه وارد
تاریخ عضویت
28 فوریه 2017
نوشته‌ها
48
لایک‌ها
4
در آموزش آشنایی با متغیر ها و ثابت ها در مورد انواع آنها صحبت کردیم و نحوه معرفی متغیر ها و ثابت ها رو گفتیم. امروز میخوایم در مورد علت های تعریف متغیر ها و ثابت ها و دامنه تعریف آنها صحبت کنیم. مسئله ای مهم و ظریف که یادگیری اون درک صحیحی از برنامه نویسی وی بی (VBA) به شما میده.

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

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

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

از طرف دیگه متغیرهای از جنس Variant مدت زمانی بیشتری برای پردازش نسبت به اکثر متغیرها نیاز داره از این رو در برنامه هایی که تعداد متغیرهای غیرضروری از این جنس زیاده برنامه کندتری خواهید داشت.

جلوگیری از خطای تایپی (Typo Bugs)
اگه همیشه متغیرها رو تعریف میکنید راحت تر میتونید از گزینه VBA Option Explicit (در ادامه توضیح میدیم) که برای ایجاد الزام جهت تعریف متغیرها است، استفاده کنید. این کار باعث میشه خطاهای ناشی از تایپ اشتباه نام متغیر در برنامه از بین بره. این نکته رو با یک مثال توضیح میدم:

حتما بخوانید: قبل از شروع آموزش VBA در اکسل بدانید!
فرض کنید از یک متغیر با نام “SVat_Rate” استفاده میکنید. ممکنه زمانیکه میخواید یک مقدار به این متغیر تخصیص بدید کد زیر رو بنویسید (که خیلی احتمالش زیاده)

SVatRate = 0.175
که مقدار 0.175 رو به متغیر اختصاص بده اما این کار انجام نشده! (یک بار دیگه به نام متغیری که اول گفتیم و متغیری که در کد استفاده کردیم دقت کنید). درحالیکه اگر از گزینه VBA Option Explicit استفاده کنید اکسل شما رو مجبور میکنه که هر متغیر جید رو اول تعریف کنید (به همین دلیل متغیرهایی که نام آنها اشتباها تایپ میشه به عنوان متغیر جدید شناسایی میشن و اکسل پیغام میده که باید تعریف بشه و شما متوجه خطا میشید). در این مثال اکسل پیغام میده که متغیر SVatRate قبلا تعریف نشده و باید آن را تعریف کنید.

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

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

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

گزینه Option Explicit در تعریف متغیر ها و ثابت ها
با فعال سازی گزینه Option Explicit شما مجبور میشید که تمامی متغیرهایی رو که در کد وی بی (VBA) استفاده میکنید رو تعریف کنید. از طرفی با فعال بودن این گزینه، متغیرهایی که تعریف نشده اند رو قبل از اجرای برنامه با رنگ کردن آنها مشخص میکنه. برای استفاده از این مورد کافیه دستور زیر رو در بالای هر صفحه کد بنوییسد.
حتما بخوانید: تابع Sumif اکسل | محاسبه جمع شرطی در یک مجموعه داده

Option Explicit
از طرفی اگه میخواید که همیشه این کد بالای صفحات کدنویسی شما باشه میتونید از طریق مسیر زیر این کار رو انجام بدید تا به صورت خودکار این کد اضافه بشه:

  • در صفحه ویرایشگر ویژوال بیسیک یا وی بی گزینه Tools> Options رو انتخاب کنید.
  • از پنجره باز شده تپ Editor رو انتخاب کنید.
  • تیک مربوط به گزینه Required Variable Declaration رو بزنید و OK کنید.
Option-Explicit.png


شکل 1 – متغیر ها و ثابت ها – ایجاد الزام برای تعریف متغیرها در وی بی​

وقتیکه این کار رو انجام دید از این به بعد این کد Option Explicit به صورت خودکار در بالای همه صفحات کد قرار داده میشه.

دامنه اعتبار متغیرها و ثابت ها
هر بار که یک متغیر و یا ثابت رو تعریف میکنید در یک محدوده مشخصی دارای اعتبار هستند و شناخته میشن و این دامنه به مکانی که متغیر رو تعریف میکنید بستگی داره.

به عنوان مثال فرض کنید از یک متغیر با نام “SVat_Rate” درون یک Function با نام “Total_Cost” استفاده میکنید. در جدول زیر در مورد دامنه اعتبار متغیر در دو حالت مختلف از تعریف متغیر صحبت کردیم:

Option Explicit
Dim SVAT_Rate As Single
Function Total_Cost() As Double
...
End Function
اگر شما متغیر SVat_Rate رو در بالای ماژول تعریف کنید در اینصورت دامنه اعتبار متغیر به اندازه کل توابع و روال های ماژول هست. به عبارت دیگر متغیر SVat_Rate در تمام برنامه های این ماژول شناخته میشه. در واقع اگر شما یک مقدار رو به این متغیر در تابع Total_Cost تخصیص بدید این مقدار در سایر توابع موجود تو این ماژول باقی میمونه و پاک نمیشه. از طرفی اگر قصد داشته باشید از متغیر SVat_Rate رو در یک ماژول دیگه استفاده کنید به دلیل اینکه خارج از دامنه اعتبار متغیر هست، شناخته نمیشه.

Option Explicit
Function Total_Cost() As Double
Dim SVAT_Rate As Single
...
End Function
اگر شما متغیر SVat_Rate رو در ابتدای تابع Total_Cost تعریف کنید، دامنه اعتبار این متغیر به اندازه همون تابع هست و خارج از تابع Total_Cost شناخته نمیشه. بنابراین اگر سعی کنید از متغیر SVat_Rate در هر تابع دیگه در هر جا استفاده کنید امکانش نیست.

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

نکته1:
برای متغیرهای در سطح یک ماژول میتونید از کلمه Private به جای Dim استفاده کنید نشاندهنده اینه که دامنه اعتبار متغیر محدود به همان ماژول هست.
نکته2:
مطالبی که در مورد دامنه اعتبار متغیرها گفتیم در مورد ثابت ها هم صادق هست. به عبارت دیگه کلمات Public و Private در هنگام تعریف آنها استفاده میشه اما باید توجه کنید که این کلمات جایگزین کلمه Const نمیشن و در کنار اون قرار میگیرن.


تو مثال زیر نحوه استفاده این کلمات رو برای متغیر و ثابت میبینید:

Option Explicit
Public SVAT_Rate As Single
Public Const IMax_Count = 5000

این مثال نشون میده که چطوری از کلمه Public برای تعریف متغیر SVat_Rate و ثابت Imax_Count استفاده شده.

دامنه اعتبار این دو به اندازه کل پروژه تعریف شده هست.

بنابراین متغیر SVat_Rate و ثابت Imax_Rate در هر تابع و روالی که در این پروژه تعریف شده قابل دسترس هست.

Option Explicit
Private SVAT_Rate As Single
Private Const IMax_Count = 5000
...
در این مثال نحوه استفاده از کلمه Private برای تعریف متغیر SVat_Rate و ثابت Imax_Count استفاده شده. دامنه اعتبار این دو در حد ماژولی هست که آنها در آن تعریف شده اند.

به عبارت دیگه SVat_Rate و Imax_Count تنها درون روال ها و توابع تعریف شده درون ماژول در دسترس هست.

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

منبع آموزش:
گروه تخصصی اکسل پدیا | توابع اکسل | اکسل چیست | اکسل پیشرفته
تعریف متغیر ها و ثابت ها در وی بی (VBA) | قسمت دوم
 
بالا