اکسل پدیا، دانشنامه پارسی اکسل

021-47625755
[email protected]

ورود یا ثبت نام

  • دانشنامه اکسل
    • اکسل چیست؟
    • اکسل مقدماتی
    • توابع اکسل
    • نمودار ها
    • وی بی – ماکرو
  • آکادمی اکسل
    • ویدئوهای آموزشی
      • رسم نمودارهای حرفه ای
      • اکسل و شروع حرفه ای
      • اکسل نینجا (اکسل پیشرفته)
      • صفر تا صد Pivot Table
      • برنامه نویسی وی بی (VBA)
    • کتاب ها
      • کتاب های فارسی
      • کتاب های انگلیسی
  • داشبورد های مدیریتی
    • آموزش ساخت داشبورد
    • دانلود داشبورد نمونه
  • افزونه های کاربردی
  • دوره های حضوری
    • اکسل نینجا
    • برنامه نویسی وی بی (VBA)
  • درباره ما
    • Cart

      0

وی بی - ماکرو

  • خانه
  • بلاگ
  • وی بی - ماکرو
  • تعریف متغیر ها و ثابت ها در وی بی (VBA) | قسمت دوم

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

  • ارسال شده توسط سامان چراغی
  • دسته بندی وی بی - ماکرو
  • تاریخ ۱ مرداد ۱۳۹۶
  • نظرات ۴ دیدگاه ها
تعریف متغیر
5 / 5 ( 4 امتیاز )

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

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

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

سرعت انجام محاسبات و حافظه تخصصی به برنامه

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

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

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

جلوگیری از خطای تایپی (Typo Bugs)

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

حتما بخوانید:  دستورات شرطی در VBA | ساختار Select

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

1
SVatRate = 0.175

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

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

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

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

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

گزینه Option Explicit در تعریف متغیر ها و ثابت ها

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

حتما بخوانید:  چهار گام ایجاد پیوت تیبل (Pivot Table)
1
Option Explicit

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

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

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

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

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

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

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

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

1
2
3
4
5
Option Explicit
Dim SVAT_Rate As Single
Function Total_Cost() As Double
...
End Function

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

1
2
3
4
5
Option Explicit
Function Total_Cost() As Double
Dim SVAT_Rate As Single
...
End Function

اگر شما متغیر SVat_Rate رو در ابتدای تابع Total_Cost تعریف کنید، دامنه اعتبار این متغیر به اندازه همون تابع هست و خارج از تابع Total_Cost شناخته نمیشه. بنابراین اگر سعی کنید از متغیر SVat_Rate در هر تابع دیگه در هر جا استفاده کنید امکانش نیست.

حتما بخوانید:  همه چیز از ضبط ماکرو در اکسل

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

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

 

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

1
2
3
4
Option Explicit
Public SVAT_Rate As Single
Public Const IMax_Count = 5000
…

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

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

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

1
2
3
4
Option Explicit
Private SVAT_Rate As Single
Private Const IMax_Count = 5000
...

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

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

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

برچسب:مقدماتی

  • اشتراک گذاری:
profile avatar
سامان چراغی
من سامان چراغی هستم. دانش آموخته مقطع فوق لیسانس دانشگاه تربیت مدرس در رشته مهندسی صنایع. از سال 1388 اکسل و برنامه نویسی VBA رو به صورت حرفه ای شروع کردم.

مطلب قبلی

Paste Special ابزار حرفه ای در اکسل
۱ مرداد ۱۳۹۶

مطلب بعدی

تبدیل فایل اکسل به pdf
۱ مرداد ۱۳۹۶

ممکن است همچنین دوست داشته باشید

For-VBA-Cover
ایجاد حلقه های تکرار در VBA اکسل با ساختار For
۲۱ فروردین, ۱۳۹۷
Events Cover
رویدادها در اکسل
۱۰ فروردین, ۱۳۹۷
InputBox-Function-Cover
تابع Msgbox و تعامل با کاربر
۱۲ اسفند, ۱۳۹۶

    4 نظر

  1. profile avatar
    مصطفی
    ۲ خرداد ۱۳۹۹
    پاسخ

    با سلام یه سوال در مورد متغییر ها داشتم
    می خواستم بدونم یه متغییر که تعریف کردیم بخواهیم قبل در اجرا در ماکروها یه عدد پیش فرض بهش بدیم تا درون ماکرو داشته باشه و بعد از تغییر در ماکروها و تغییر همین متغییر مبالغ جدید در متغییر اینجا کرد

    • profile avatar
      سامان چراغی
      ۱۹ خرداد ۱۳۹۹
      پاسخ

      سلام
      برای این کار یک متغیر Public را در رویداد Workbook_Open تعریف کنید و مقدار دهی کنید (با این کار زمانیکه فایل باز میشه این متغیر تعریف میشه و مقدار اولیه رو تو خودش نگه میداره).
      حالا میتونید درون کدهای ماکرو از این متغیر استفاده کنید.
      بعد از پایان کدهای ماکرو، تغییرات روی این متغیر اعمال میشه و تا زمانیکه فایل باز هست قابل استفاده هست.

  2. profile avatar
    سعیدرضا
    ۱۱ فروردین ۱۳۹۹
    پاسخ

    بسیار عالی واقعا فکر نمیکردم این مطلب در سایهای فارسی اومده باشه!

    پس ما به کمک مطالب بالا میتونیم یک متغیرو در یک ماژول در SUB های مختلف استفاده کنیم؟! درس متوجه شدم

    • profile avatar
      سامان چراغی
      ۱۱ فروردین ۱۳۹۹
      پاسخ

      خوشحالیم که باعث خوشحالی شما شدیم
      بله این مطلب درباره همین مورد هست.

نظر بدهید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --

زودتر از دیگران با خبر بشید

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

آخرین مطالب

مقادیر متمایز در اکسل
تفاوت داده Distinct و Unique چیست؟ چطور میشه مشخص کرد
۱۰فروردین۱۴۰۰
استفاده از چندین تابع IF اکسل در هم
توابع IF تو در تو و نکات مهمی که باید بدانید
۲۷اسفند۱۳۹۹
تابع Trim
تابع Trim در اکسل
۲۱اسفند۱۳۹۹
کاربرد Power Query
چند مثال کاربردی از ابزار Power Query
۱۵اسفند۱۳۹۹

وجود یک منبع جامع و به روز که بدونی همیشه پشتیبانته برای یادگیری ضروریه. اکسل پدیا رو برای همین به وجود آوردیم.

پاسخ سوالات شما

اگر سوالات اکسلی دارید تو تالار گفتمان اکسل پدیا میتونید مطرح کنید. اساتید بسیاری هستند که به شما کمک میکنند.

کانال و تالار گفتمان اکسل پدیا

ورود به تالار گفتگو تلگرام

عضویت در خبرنامه
با عضویت در خبرنامه، ایمیل‌های آموزشی درباره اکسل و برنامه نویسی وی بی را دریافت خواهید کرد.

  • این فیلد برای اعتبار سنجی است و باید بدون تغییر باقی بماند .

021-47625755

[email protected]

آدرس: تهران، میدان دوم صادقیه، برج گلدیس، طبقه 7 واحد 721

دانلود اپ اکسل پدیادانلود از کافه بازار

تمامی حقوق برای اکسل پدیا محفوظ است.

  • اکسل از راه دور
  • شرایط و قوانین
  • درباره ما
  • تماس با ما