متغیر در VBA | چگونگی اعلان متغیرها و روش های آن

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

تعریف

طبق تعریف واژه نامه VBE متغیر در VBA فضایی از حافظه است که یک نام نمادین یا شناسه دارد و برای ذخیره داده‌ها کنار گذاشته شده‌است. متغیر یک مکان موقت درون حافظه برنامه است که داده ها را نگهداری می کند. متغیرها برای نگهداری نتیجه محاسبات و مقادیری که به کنترل های روی فرم نسبت می دهید بکار می روند.

مقدار یک متغیر می تواند تغییر کند زیرا متغیر فضایی از حافظه است که در هر لحظه می تواند یک مقدار خاص را حفظ کند. متغیرها بر خلاف خواص کنترل ها که از قبل نام دارند هیچ نامی ندارند تا اینکه آنها را نامگذاری کنید.

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

بعنوان مثال متغیری که از نوع Byte اعلان شده، نمی تواند یک مقدار رشته ای (String) را نگه دارد (البته نوع داده Variant از این قاعده مستثنی است).

پیش نیاز آموزشی این بخش:
انواع داده در VBA

اعلان متغیر در VBA

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

در مثال بالا متغیر x از نوع داده integer به کامپایلر VBA اعلان شده است. اگر در صفحه انواع داده ها دقت کرده باشید، داده integer از نوع عددی می باشد و فضایی معادل 2 بایت را اشغال می نماید. بنابراین با اعلان متغیر x فضایی برابر با ۲ بایت به نام x اختصاص داده می شود.

قواعد نامگذاری متغیر در VBA

VBA در نامگذاری متغیرها از قواعد زیر پیروی می نماید:

  • نام متغیر باید با یکی از حروف الفبا شروع شود.
  • از حروف الفبا و اعداد می توانید در نام متغیر استفاده نمایید.
  • نام متغیر می تواند بین ۱ تا ۲۵۵ کاراکتر داشته باشد.
  • در نام متغیر نمی توانید از فاصله ( space )، نقطه (.)، علامت تعجب (!) یا کاراکترهای @، &، $ و # استفاده نمایید.
  • بطور کلی، شما نباید از نام هایی که همنام با توابع، دستورها، روش ها و ثابت های ذاتی ویژوال بیسیک یا برنامه کاربردی میزبان می باشد استفاده نمایید. بعبارت دیگر از نام کلمات کلیدی استفاده شده در معماری VBA نمی توانید استفاده نمایید.
  • در یک سطح میدان دید یکسان نمی توانید از نام های تکراری استفاده نمایید. بعنوان مثال نمی توانید دو نام متغیر age را در یک روال اعلان نمایید.

نکات کاربردی درباره اعلان متغیرها

نکاتی زیر را در مورد نامگذاری و اعلان متغیرها همواره در نظر داشته باشید تا با خطا مواجه نشوید:

  • همانطور که می دانید کدهای VBA به زبان انگلیسی نوشته می شوند، بنابراین برای جلوگیری از بروز خطا در کامپایل کدها حتما در انتخاب نام متغیر از نام های انگلیسی استفاده نمایید.
  • در ابتدای نام متغیر یک پیشوند قرار دهید که نوع داده متغیر را نشان دهد. بدین ترتیب برای پیدا کردن نوع داده متغیر مجبور نیستید به قسمت اعلان برنامه مراجعه کنید. برای مشاهده فهرست پیشوندهای پیشنهادی می توانید این صفحه را مشاهده نمایید.
  • دستور Dim را می توان هم در سطح ماژول و هم در درون روال استفاده نمود. متغیری که در سطح ماژول اعلان می شود متغیر ماژول نامیده می شود و برای تمامی روال های درون ماژول قابل دسترس می باشد. (اطلاعات بیشتر در این خصوص را می توانید در آموزش میدان دید متغیر در VBA پیدا کنید.)
  • از نام های معنادار (مانند curHighTotal) بجای اسامی مبهم (مثل curX1) استفاده کنید. این نام های معنادار به مستند شدن کد کمک می کنند.
  • در نام متغیر می توانید از تعداد محدودی کاراکترهای خاص استفاده نمایید. برای اطمینان فقط از کاراکتر زیرخط (_) در نام متغیر استفاده نمایید.
  • VBA حساس به حروف بزرگ و کوچک نمی باشد. بنابراین تفاوتی بین Age، age و aGe وجود نخواهد داشت. البته در نظر داشته باشید ویرایشگر VBE حالت حروف در اولین اعلان را حفظ می نماید.

برای دریافت اطلاعات بیشتر درباره دستور Dim می توانید این صفحه را مشاهده نمایید.

خطای Overflow در VBA (خطای شماره 6)

خطای Overflow در VBA
خطای Overflow در VBA

در صورتی که به متغیر اعلان شده توسط شما مقداری بیشتر یا کمتر از محدوده مجاز نوع داده آن تحمیل شود با خطای Overflow (خطای شماره ۶) مواجه خواهید شد و برنامه شما متوقف خواهد شد.

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

بعنوان مثال در کد زیر خط دوم باعث بروز خطای Overflow خواهد شد، چرا که محدوده مجاز نوع داده Byte بین 0 تا 255 می باشد.

روش های اعلان متغیر به کامپایلر

در VBA اعلان متغیرها را می توانید به دو صورت تعیین نمایید:

  • اعلان متغیرها به صراحت (Explicitly)
  • اعلان متغیرها به صورت ضمنی (Implicitly)

در VBA تعیین نوع اعلان توسط دستور Option Explicit صورت می پذیرد.

اعلان متغیرها به صورت صریح (Explicitly)

برای اعلان متغیرها بصورت صریح (Explicitly) باید از دستور Option Explicit استفاده نمایید. در صورت استفاده از دستور Option Explicit در ابتدای یک ماژول، کامپایلر شناسه را در صورتی بعنوان متغیر خواهد پذیرفت که قبل از استفاده از آن در کد VBA، شناسه و نوع آن به کامپایلر اعلان شده باشد.
مثال زیر نحوه استفاده از دستور Option Explicit را نمایش می دهد:

در خط ۱ کد بالا Option Explicit به کامپایلر اعلام می نماید که متغیرها باید بصورت صریح از قبل اعلان شده باشند. نکته مهم در خصوص دستور Option Explicit این است که این دستور باید در هر ماژول قبل از هر کد دیگری در پنجره کد ظاهر شده باشد.
در خط ۲ متغیر x از نوع Byte اعلان شده است.
خط ۳ اعلان سابروتین MYsub می باشد. در سابروتین ها و نقش آن ها در بخش های بعدی بصورت کامل با شما صحبت خواهیم کرد.
در خط ۴ عدم اعلان متغیر y باعث ایجاد خطای حین کامپایل خواهد شد. علت این امر استفاده از دستور Option Explicit در خط ۱ می باشد.
در خط ۵، متغیر x که قبلا اعلان شده است مقداردهی شده است.
خط ۶ نشانگر پایان سابروتین MYsub شروع شده در خط ۳ می باشد.

برای اطلاعات بیشتر در مورد دستور Option Explicit این صفحه را مشاهده نمایید.

اعلان متغیرها به صورت ضمنی یا تلویحی (Implicitly)

برای اعلان متغیرها بصورت ضمنی (Implicitly) کافیست از دستور Option Explicit را در ابتدای ماژول استفاده ننمایید. در این حالت کامپایلر بصورت اتوماتیک متغیرها را بهنگام استفاده از آن ها در کد ایجاد و نوع آن ها را تعیین می نماید. برای روشن شدن موضوع می توانید مثال زیر را مشاهده نمایید:

در خط ۲ شناسه x با توجه به مقدار آن توسط کامپایلر بعنوان متغیر از نوع داده عددی Integer تعیین می شود.
در خط ۳ شناسه y توسط کامپایلر بعنوان متغیر از نوع داده غیرعددی String تعیین می شود.

توجه داشته باشید تعیین نوع اعلان به صورت ضمنی (Implicitly) بجز در پروژه های کوچک و آموزشی توصیه نمی شود، چرا که خوانایی کدهای شما را به طور چشمگیری کاهش می دهد. دستور Option Explicit از ماژول شما در برابر متغیرهای اعلان نشده و ایجاد سهوی متغیرهای جدید بدلیل خطاهای تایپی محافظت می کند.
به طور مثال فرض کنید برای پروژه ای شناسه myVariable را بعنوان متغیر تعیین نموده اید، حدود ۱۰۰۰ خط کد نوشته اید و در این بین یکجا به اشتباه myVarable تایپ نموده اید. در این حالت کامپایلر myVarable را بعنوان متغیر جدیدی شناسایی می نماید و هیچ خطایی رخ نمی دهد.

دیدگاهتان را بنویسید

19 − پنج =