Procedure در ماکرو نویسی اکسل

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

پروسیژر در ویژوال بیسیک

نمودار زیر دسته بندی پروسیژر ها در ماکرو نویسی اکسل را ترسیم مینماید:

Procedure در ماکرو نویسی اکسل

ایجاد Procedure در ماژول

پروسیژرها در ویژوال بیسیک در محیط ماژول ها بوجود می آیند، ابتدا باید برای Projectخود ماژول ایجاد نمایید، با نحوه ی ایجاد ماژول ها، تغییر نام آنها و انواع آن ها در مقالات قبلی آشنا شده ایم.

وارد پنجره کد نویسی ماژول شده و از منوی Insert گزینه ی Procedure را انتخاب نمایید. پس از انتخاب این گزینه پنجره ایجاد procedure برای شما فعابپل شده و میتوانید پروسیژر دلخواه را ایجاد نمایید.

در اینجا طبق تعریف project در ویژال بیسیک، هر فایل اکسلی که شما بر روی آن ماژول ایجاد میکنید Project شما محسوب میشود، به عبارتی Workbook شما در اکسل همان Project در ویژوال بیسیک است.

ایجاد پروسیژر در ماژول

انواع پروسیژر در ماکرو نویسی اکسل

پروسیژر ها در ماکرو نویسی در اکسل به سه دسته تقسیم میشوند:

  • Sub یا Sub Procedures
  • توابع یا Functions
  • Property Procedures

اکسل پرو

پروسیژر Sub در ویژوال بیسیک

پروسیژر های نوع ساب، با عبارت Sub شروع شده و با عبارت End Sub تمام میشوند، کدهای (Statements) قرار گرفته در بین این دو عبارت همگی جزیی از این پروسیژر بوده و با هم اجرا میشوند، پروسیژر نوع ساب غالباً برای انجام یک آنالیز مورد بررسی قرار میگیرد، همانطور که قبلاً ذکر شده، تمام پروسیژر ها میتوانند حین اجرا از پروسیژرهای دیگر استفاده نمایند.

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

sub Procedure

پروسیژر ساب به صورت زیر نوشته میشود:

در اینجا نام ساب Excelpro میباشد، پرانتز های قرار گرفته در جلوی نام ساب، به صورت پیش فرض خالی هستند و نام آرگومان های Sub در آن نوشته میشود، آرگومان های Sub میتوانند از نوع Variable، Constant و یا Expression باشند، در آینده با آنها بیشتر آشنا خواهیم شد ولی در حال حاضر نیازی به تعریف آرگومان برای پروسیژر هایمان نداریم. در مقاله ای جداگانه ساختار Sub Procedure ها مورد بررسی بیشتر قرار خواهد گرفت.

پروسیژر Function در ویژوال بیسیک

با توابع در اکسل آشنایی داریم، به وسیله ی ویژوال بیسیک میتوان توابع شخصی برای فایل های اکسل خود ایجاد نماییم که در اکسل به آن ها User Defined Function گفته میشود. در ویژوال بیسیک برای تعریف و ایجاد توابع باید از پروسیژر نوع Function استفاده کنیم، همانند Sub، پروسیژر نوع فانکشن با Function شروع شده و با End Function تمام میشود.

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

Function Procedure

پروسیژر فانکشن به صورت زیر نوشته میشود:

در اینجا نام فانکشن Excelpro میباشد، پرانتز های قرار گرفته در جلوی نام فانکشن، به صورت پیش فرض خالی هستند و نام آرگومان های Function که در توابع اکسل به عنوان آرگومان های ورودی توابع با آن ها اشنا هستیم در آن نوشته میشود، آرگومان های Function میتوانند از نوع Variable، Constant و یا Expression باشند، در آینده با آنها بیشتر آشنا خواهیم شد. توابع با اختصاص دادن نام خودشان به عنوان یک متغیر مقدار گیرنده در کد های نوشته شده میتوانند مقدار خروجی داشته باشند. مثلاً خروجی تابع فوق مجموع دو آرگومان ورودی میباشد.

اکسل پرو

پروسیژر نوع Property

پروسیژر های نوع Property مجموعه ای از کدها و Statements هستند که به برنامه نویس اجازه میدهند Properties دلخواه خود را ایجاد و ویرایش نماید. پروسیژر های نوع پروپرتی میتوانند برای ایجاد Read-Only Properties برای فرم ها و انواع ماژول ها مورد استفاده قرار گیرند.

property procedure

فرض کنید ما یک اتومبیل داریم ، برای این اتومبیل میتوانیم ویژگی های مختلفی تعریف نماییم مانند رنگ، سال ساخت، کارخانه سازنده و … به عنوان مثال، رنگ اتومبیل را میتوانیم به عنوان یک ویژگی برای اتومبیل تعریف کنیم که میتواند مقادیری از جنس آبی، سبز، مشکی و… باشد. اگر در این مثال اتومبیل را یک ماژول و یا فرم (میتوان آن را به صورت کلی یک Object در نظر گرفت) در نظر بگیریم، رنگ اتومبیل یک Property میباشد که از طریق پروسیژر نوع Property میتوان آن را برای اتومبیل تعریف کرده و نوع آن را مشخص کنیم. در این حالت در مثال اتومبیل میتوان نوشت:

“رنگ اتومبیل آبی است”

و مشابه آن در ویژوال بیسیک میتوانیم بنویسیم:

Object.Color=Blue

در اینجا Color پروپرتی اختصاص یافته به شی Object میباشد که مقدار آن Blue است که Blue در واقع خود یک Constant تعریف شده میباشد.

منظور از Read-Only Properties مواردی هستند که صرفاً قابل گزارش میباشند و قابل تغییر نیستند، فرض کنید در مثال فوق برند تمام اتومبیل ها فقط قرار است Mercedes-Benz باشد، در این حالت Property برند اتومبیل به عنوان یک Read-Only Property برای اتومبیل میباشد که مقدار آن همواره Mercedes-Benz است.

عبارت “Object.Brand” همواره معادل Mercedes-Benz میباشد. در آینده مفصلاً پروسیژر نوع Property مورد بررسی قرار خواهد گرفت.

اکسل پرو

حوزه اعتبار Procedure

در هر Project ممکن است شما چندین ماژول داشته باشید، هر ماژول میتواند محتوی تعدادی Procedure با انواع مختلف باشد. همانطور که قبلاً ذکر شد در پروسیژر ها همواره میتوانید Procedure های دیگر را فراخوانی نموده و بخشی از عملیات را با آنها انجام دهید.

حوزه ی اعتبار یا Scope هر Procedure امکان فراخوانی پروسیژر را در ماژول ها تعیین مینماید، اگر شما قبل از عبارت شروع هر پروسیژر مانند Sub کلمه ی privet را بنویسید (مانند Privet Sub …..) به این معنی است که آن پروسیژر تنها در همان ماژولی که قرار گرفته قابل فراخوانی است و در ماژول های دیگر شناخته شده نیست و اگر کلمه ی Public نوشته شود آن پروسیژر را در تمام ماژول ها قابل استفاده مینماید.

به صورت پیش فرض نوشتن کلمات Public و Privet قبل از Procedure ها اجباری نیست و میتوانید بدون مشخص کردن Scope کار خود را انجام دهید.

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

حوزه اعتبار پروسیژرها در ویژوال بیسیک

ساختار Procedure ها

هر پروسیژر بنا به نوع آن با یک Statement شروع و به پایان میرسد، در بین این دو خط کدهای نوشته شده همگی در غالب همان پروسیژر قابل اجرا میباشند و یک هدف واحد را دنبال میکنند.

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

اشتراک گذاری در شبکه های اجتماعی: share on facebook share on google plus share on linkedin

۸ نظر

  1. شهریار

    ممنون ازمطالبتون،لطفا ردیفهای مطالب یادگیری ماکرو را باطبقه بندی ذکر کنید تا بطور سلسله مراتب بتونیم جلو بریم مرسی

    1. حامد قدیمی

      خواهش میکنم، مقالات مقدماتی ماکرو نویسی را به ترتیب از بالا به پایین مطالعه کنید، تنها استثنا، مقاله ی “ذخیره و انتقال ماکرو” را به عنوان مقاله ی سوم خود در روند یادگیری مطالعه کنید، موفق باشید.

  2. فریبا

    با سلام و تشکر از مطالب مفیدتون
    آیا امکانش هست به عنوان مثال semidifferentiate رو به عنوان یک پروسیژر sub بنویسید؟
    مرسی

    1. حامد قدیمی

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

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