در بخش قبلی با شکل کدها و برخی قواعد اولیه کدنویسی در VBA آشنا شدیم. در این بخش از آموزش های رایگان وی بی ای با یکی از اساسی ترین مفاهیم برنامه نویسی یعنی متغیر آشنا خواهیم شد.
فهرست مطالب
تعریف
طبق تعریف واژه نامه VBE متغیر در VBA فضایی از حافظه است که یک نام نمادین یا شناسه دارد و برای ذخیره دادهها کنار گذاشته شدهاست. متغیر یک مکان موقت درون حافظه برنامه است که داده ها را نگهداری می کند. متغیرها برای نگهداری نتیجه محاسبات و مقادیری که به کنترل های روی فرم نسبت می دهید بکار می روند.
مقدار یک متغیر می تواند تغییر کند زیرا متغیر فضایی از حافظه است که در هر لحظه می تواند یک مقدار خاص را حفظ کند. متغیرها بر خلاف خواص کنترل ها که از قبل نام دارند هیچ نامی ندارند تا اینکه آنها را نامگذاری کنید.
قبل از آنکه بتوانید از یک متغیر استفاده کنید باید آن را اعلان نمایید، یعنی به VBA نام متغیر و نوع داده ای را که نگه می دارد اعلام نمایید. متغیرها فقط می توانند داده هایی را حفظ کنند که مطابق با نوع داده ای باشد که برای آنها تعریف کرده اید.
بعنوان مثال متغیری که از نوع Byte اعلان شده، نمی تواند یک مقدار رشته ای (String) را نگه دارد (البته نوع داده Variant از این قاعده مستثنی است).
اعلان متغیر در VBA
متداول ترین دستور VBA برای اعلان یک شناسه بعنوان یک متغیر دستور Dim می باشد. نحوه استفاده از دستور Dim در مثال زیر توضیح داده شده است.
Dim x As Integer 'اعلان متغیر
در مثال بالا متغیر x از نوع داده integer به کامپایلر VBA اعلان شده است. اگر در صفحه انواع داده ها دقت کرده باشید، داده integer از نوع عددی می باشد و فضایی معادل 2 بایت را اشغال می نماید. بنابراین با اعلان متغیر x فضایی برابر با ۲ بایت به نام x اختصاص داده می شود.
قواعد نامگذاری متغیر در VBA
VBA در نامگذاری متغیرها از قواعد زیر پیروی می نماید:
- نام متغیر باید با یکی از حروف الفبا شروع شود.
- از حروف الفبا و اعداد می توانید در نام متغیر استفاده نمایید.
- نام متغیر می تواند بین ۱ تا ۲۵۵ کاراکتر داشته باشد.
- در نام متغیر نمی توانید از فاصله ( space )، نقطه (.)، علامت تعجب (!) یا کاراکترهای @، &، $ و # استفاده نمایید.
- بطور کلی، شما نباید از نام هایی که همنام با توابع، دستورها، روش ها و ثابت های ذاتی ویژوال بیسیک یا برنامه کاربردی میزبان می باشد استفاده نمایید. بعبارت دیگر از نام کلمات کلیدی استفاده شده در معماری VBA نمی توانید استفاده نمایید.
- در یک سطح میدان دید یکسان نمی توانید از نام های تکراری استفاده نمایید. بعنوان مثال نمی توانید دو نام متغیر age را در یک روال اعلان نمایید.
نکات کاربردی درباره اعلان متغیرها
نکاتی زیر را در مورد نامگذاری و اعلان متغیرها همواره در نظر داشته باشید تا با خطا مواجه نشوید:
- همانطور که می دانید کدهای VBA به زبان انگلیسی نوشته می شوند، بنابراین برای جلوگیری از بروز خطا در کامپایل کدها حتما در انتخاب نام متغیر از نام های انگلیسی استفاده نمایید.
- در ابتدای نام متغیر یک پیشوند قرار دهید که نوع داده متغیر را نشان دهد. بدین ترتیب برای پیدا کردن نوع داده متغیر مجبور نیستید به قسمت اعلان برنامه مراجعه کنید. برای مشاهده فهرست پیشوندهای پیشنهادی می توانید این صفحه را مشاهده نمایید.
- دستور Dim را می توان هم در سطح ماژول و هم در درون روال استفاده نمود. متغیری که در سطح ماژول اعلان می شود متغیر ماژول نامیده می شود و برای تمامی روال های درون ماژول قابل دسترس می باشد. (اطلاعات بیشتر در این خصوص را می توانید در آموزش میدان دید متغیر در VBA پیدا کنید.)
- از نام های معنادار (مانند curHighTotal) بجای اسامی مبهم (مثل curX1) استفاده کنید. این نام های معنادار به مستند شدن کد کمک می کنند.
- در نام متغیر می توانید از تعداد محدودی کاراکترهای خاص استفاده نمایید. برای اطمینان فقط از کاراکتر زیرخط (_) در نام متغیر استفاده نمایید.
- VBA حساس به حروف بزرگ و کوچک نمی باشد. بنابراین تفاوتی بین Age، age و aGe وجود نخواهد داشت. البته در نظر داشته باشید ویرایشگر VBE حالت حروف در اولین اعلان را حفظ می نماید.
خطای Overflow در VBA (خطای شماره 6)
در صورتی که به متغیر اعلان شده توسط شما مقداری بیشتر یا کمتر از محدوده مجاز نوع داده آن تحمیل شود با خطای Overflow (خطای شماره ۶) مواجه خواهید شد و برنامه شما متوقف خواهد شد.
بنابراین همواره باید در تعیین نوع داده متغیر دو وجه اساسی را در نظر داشته باشید، از یک طرف انتخاب نوع داده با حجم بیشتر از نیاز، باعث اشغال بی مورد حافظه و کندی برنامه شما خواهد شد و از طرف دیگر در صورتی که فضای انتخابی شما کمتر از مقدار اختصاص یافته به متغیر باشد با خطای کامپایلر مواجه خواهید شد.
بعنوان مثال در کد زیر خط دوم باعث بروز خطای Overflow خواهد شد، چرا که محدوده مجاز نوع داده Byte بین 0 تا 255 می باشد.
Dim x As Byte
i = 256
روش های اعلان متغیر به کامپایلر
در VBA اعلان متغیرها را می توانید به دو صورت تعیین نمایید:
- اعلان متغیرها به صراحت (Explicitly)
- اعلان متغیرها به صورت ضمنی (Implicitly)
در VBA تعیین نوع اعلان توسط دستور Option Explicit صورت می پذیرد.
اعلان متغیرها به صورت صریح (Explicitly)
برای اعلان متغیرها بصورت صریح (Explicitly) باید از دستور Option Explicit استفاده نمایید. در صورت استفاده از دستور Option Explicit در ابتدای یک ماژول، کامپایلر شناسه را در صورتی بعنوان متغیر خواهد پذیرفت که قبل از استفاده از آن در کد VBA، شناسه و نوع آن به کامپایلر اعلان شده باشد.
مثال زیر نحوه استفاده از دستور Option Explicit را نمایش می دهد:
Option Explicit 'تعیین نحوه اعلان صریح متغیرها به کامپایلر
Dim x As Byte 'اعلان متغیر
Private Sub MYsub()
y = 10' متغیر اعلان نشده باعث ایجاد خطای حین کامپایل می شود
x = 10' متغیر اعلان شده خطایی ایجاد نخواهد کرد
End Sub
در خط ۱ کد بالا Option Explicit به کامپایلر اعلام می نماید که متغیرها باید بصورت صریح از قبل اعلان شده باشند. نکته مهم در خصوص دستور Option Explicit این است که این دستور باید در هر ماژول قبل از هر کد دیگری در پنجره کد ظاهر شده باشد.
در خط ۲ متغیر x از نوع Byte اعلان شده است.
خط ۳ اعلان سابروتین MYsub می باشد. در سابروتین ها و نقش آن ها در بخش های بعدی بصورت کامل با شما صحبت خواهیم کرد.
در خط ۴ عدم اعلان متغیر y باعث ایجاد خطای حین کامپایل خواهد شد. علت این امر استفاده از دستور Option Explicit در خط ۱ می باشد.
در خط ۵، متغیر x که قبلا اعلان شده است مقداردهی شده است.
خط ۶ نشانگر پایان سابروتین MYsub شروع شده در خط ۳ می باشد.
اعلان متغیرها به صورت ضمنی یا تلویحی (Implicitly)
برای اعلان متغیرها بصورت ضمنی (Implicitly) کافیست از دستور Option Explicit را در ابتدای ماژول استفاده ننمایید. در این حالت کامپایلر بصورت اتوماتیک متغیرها را بهنگام استفاده از آن ها در کد ایجاد و نوع آن ها را تعیین می نماید. برای روشن شدن موضوع می توانید مثال زیر را مشاهده نمایید:
Private Sub MYsub()
x = 10'نوع متغیر با توجه به مقدار آن از نوع عددی تعیین می شود
y = "Sadegh"'کامپایلر نوع متغیر را با توجه به مقدار آن از نوع غیر عددی تعیین می نماید
End Sub
در خط ۲ شناسه x با توجه به مقدار آن توسط کامپایلر بعنوان متغیر از نوع داده عددی Integer تعیین می شود.
در خط ۳ شناسه y توسط کامپایلر بعنوان متغیر از نوع داده غیرعددی String تعیین می شود.
بیشتر بخوانید
توابع توکار VBA | لیست کامل توابع داخلی در ویژوال بیسیک
عملگرهای VBA | انجام عملیات روی داده ها و ایجاد عبارت ها
حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک
کدهای VBA | آشنایی با کدها و دستور زبان برنامه نویسی VBA
دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی
آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی
میدان دید متغیر در VBA | نحوه دسترسی به متغیرها در قسمت های مختلف پروژه