You are currently viewing متغیر در VBA | چگونگی اعلان متغیرها و روش‌های آن
متغیرها در VBA، جعبه‌هایی در حافظه برای نگهداری داده‌ها

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

در بخش قبلی با قسمت‌های مختلف ویرایشگر VBA آشنا شدیم. در این بخش از آموزش‌های رایگان VBA با یکی از پایه‌ای‌ترین مفاهیم برنامه‌نویسی یعنی «متغیرها» آشنا می‌شویم؛ جعبه‌هایی در حافظه که داده‌ها را موقتاً نگه می‌دارند تا بتوانیم از آن‌ها در طول اجرای برنامه استفاده کنیم.

چرا باید متغیرها را بشناسیم؟

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

تقریباً در هر ماکروی VBA که می‌نویسید، چندین متغیر به کار خواهید برد؛ بدون آن‌ها هیچ محاسبه‌ای ممکن نیست.

آیا می‌دانید:

با تسلط بر VBA، می‌توانید محاسبات و تحلیل‌های خود را به سطح جدیدی برسانید. این زبان به شما امکان می‌دهد تا ابزارهای قدرتمند و کارآمدی برای تسریع کارهای روزمره ایجاد کنید.

تعریف

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

متغیرها برای نگهداری نتایج محاسبات و مقادیری که به کنترل‌های فرم اختصاص می‌دهید به‌کار می‌روند. متغیر در VBA Excel یکی از پایه‌ای‌ترین مفاهیم در نوشتن ماکروهای پیشرفته است.

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

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

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

به بیان ساده: متغیرها مثل «جعبه‌هایی» هستند که در حافظه برای نگهداری موقت اطلاعات ایجاد می‌کنید تا بتوانید بعداً در کد خود از آن‌ها استفاده کنید.

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

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

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

Dim x As Integer 'اعلان متغیر

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

جزء دستورتوضیح
Dimدستور اعلان متغیر به VBA
xنام متغیر
As Integerنوع داده متغیر (عدد صحیح)
ساختار کلی اعلان متغیر در VBA

کاربرد متغیر در ماکرو واقعی اکسل

Sub ExampleVariable()
    Dim total As Double
    total = Range("B2").Value + Range("B3").Value
    MsgBox "مجموع دو عدد برابر است با " & total
End Sub

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

در ادامه قواعد نام‌گذاری متغیرها در VBA Excel را مشاهده می‌کنید. VBA در نامگذاری متغیرها از قواعد زیر پیروی می نماید:

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

نمونه‌های درست و نادرست:

نمونه‌کد زیر به شما کمک می‌کند تفاوت بین نام‌های مجاز و نام‌های نادرست را بهتر درک کنید:

'نام‌های مجاز
Dim studentName As String
Dim total_Amount As Double

'نام‌های غیرمجاز
Dim student name As String   'به‌دلیل فاصله بین کلمات
Dim #total As Integer        'به‌دلیل استفاده از کاراکتر غیرمجاز #
Dim 1total As Integer        'به‌دلیل شروع نام متغیر با عدد

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

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

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

خلاصه نکات مهم نام‌گذاری متغیرها:

  • ✅ از حروف انگلیسی برای نام‌گذاری استفاده کنید.
  • ✅ پیشوند نوع داده را در نام متغیر بگنجانید (مثلاً strName برای رشته).
  • ✅ از نام‌های معنادار استفاده کنید تا خوانایی کد افزایش یابد.
  • ✅ فقط از کاراکتر زیرخط (_) برای ترکیب کلمات استفاده نمایید.
  • ✅ از تعریف متغیرهای تکراری در یک محدوده دید خودداری کنید.

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

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

پنجره پیام خطای Run-time error '6': Overflow در VBA
پیام خطای VBA Overflow (سرریز) که هنگام تلاش برای ذخیره مقدار بزرگتر از ظرفیت متغیر رخ می‌دهد.

حتماً برایتان پیش آمده که برنامه بدون دلیل مشخصی متوقف شود و پیغام Overflow را ببینید… این خطا زمانی رخ می‌دهد که مقدار داده بزرگ‌تر از ظرف متغیر باشد

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

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

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

Dim i As Byte
i = 256

⚠️ خطای Overflow زمانی رخ می‌دهد که مقدار متغیر از محدوده نوع داده آن بیشتر شود. برای جلوگیری از آن در حلقه‌ها از Long استفاده کنید.

💡 یادآوری: نوع داده Long می‌تواند مقادیر بین −2,147,483,648 تا 2,147,483,647 را نگهداری کند.

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

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

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

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

روش اعلانویژگیمزایامعایب
✅ Explicit (صریح)با استفاده از Option Explicitکاهش خطاهای تایپی، خوانایی بیشترنیاز به تعریف همه متغیرها
⚠️ Implicit (ضمنی)بدون استفاده از Option Explicitکدنویسی سریع در پروژه‌های کوچکاحتمال بالای بروز خطا و متغیرهای ناخواسته
مقایسه روش‌های اعلان متغیر در VBA

اعلان متغیرها به صورت صریح (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 در خط ۱ می باشد. در این خط، چون متغیر y پیش از استفاده اعلان نشده است، کامپایلر خطای Compile Error: Variable not defined را نشان می‌دهد
در خط ۵، متغیر x که قبلا اعلان شده است مقداردهی شده است.
خط ۶ نشانگر پایان سابروتین MYsub شروع شده در خط ۳ می باشد.

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

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

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

Private Sub MYsub()
    x = 10'نوع متغیر با توجه به مقدار آن از نوع عددی تعیین می شود
     y = "Sadegh"'کامپایلر نوع متغیر را با توجه به مقدار آن از نوع غیر عددی تعیین می نماید
End Sub

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

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

💬 نکته: در پروژه‌های واقعی همیشه توصیه می‌شود از Option Explicit استفاده کنید تا از بروز خطاهای تایپی جلوگیری شود.

❓ سؤالات متداول درباره متغیرها در VBA

آیا می‌توان بدون استفاده از Dim متغیر تعریف کرد؟

بله، اما توصیه نمی‌شود. همیشه از Option Explicit برای جلوگیری از خطاها استفاده کنید.

تفاوت بین Variant و سایر نوع داده‌ها چیست؟

نوع داده Variant می‌تواند هر نوع داده‌ای را نگهداری کند، اما استفاده بیش از حد از آن ممکن است باعث کندی برنامه شود.

آیا نام متغیرها به حروف بزرگ و کوچک حساس است؟

خیر، VBA نسبت به حروف بزرگ و کوچک حساس نیست.

💎 نکات طلایی برای حرفه‌ای‌ها

  • در پروژه‌های بزرگ، از پیشوندهای سه‌حرفی برای نوع داده استفاده کنید (مانند intCount، strUser).
  • برای افزایش سرعت اجرا، نوع داده‌ها را دقیق انتخاب کنید (مثلاً به جای Variant از Long استفاده کنید).
  • در صورت نیاز به متغیرهای عمومی بین چند ماژول، از Public در سطح ماژول استفاده نمایید.
  • رعایت میدان دید متغیرها می‌تواند میزان قابل‌توجهی در مصرف حافظه صرفه‌جویی نماید.
  • در پروژه‌های طولانی، بهتر است متغیرهای موقت را در پایان روال مقداردهی صفر کنید تا مصرف حافظه کاهش یابد.
  • از ابزار Locals Window در VBE برای مشاهده مقدار لحظه‌ای متغیرها استفاده کنید.

جمع‌بندی و آموزش بعدی

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

🚀 برای ادامه مسیر یادگیری VBA، آموزش بعدی را از دست ندهید!

اگر این آموزش برایتان مفید بود، آن را با دوستان خود به اشتراک بگذارید 💬

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