سبد خرید
0

سبد خرید شما خالی است.

تمام دسته ها
  • تمام دسته ها
  • Power BI
  • Power Pivot
  • Power Query
  • ابزارها
  • افزونه ها
  • اکسل مدیا
  • توابع اکسل
  • دسته‌بندی نشده
  • دیده بان
  • گوگل شیت
  • مسائل کاربردی
  • معرفی کتاب
  • نمودار ها
  • وی بی - ماکرو

رویه ها در VBA و شروع ساخت تابع در اکسل

توابع در ویژوال بیسیک اکسل
۵/۵ - (۶ امتیاز)

رویه ها در وی بی (VBA) یا توابع در ویژوال بیسیک

Excel Functionsدر وی بی (VBA) مجموعه ای از دستورات برای اجرای یک سری فعالیت را در یک رویه (Procedure) قرار میدیم که این رویه یا میتونه از نوع تابع (Function) باشه یا ساب (Sub). با ایجاد رویه، شما میتونید مجموعه دستوراتی رو برای انجام کارهای مختلف تعریف کنید و تو برنامه های خودتون ازشون استفاده کنید. با این روش توابع در ویژوال بیسیک ایجاد می شوند.

تفاوت اصلی بین یک تابع و ساب اینه که تابع یک خروجی خواهد داشت در حالیکه یک رویه این خروجی رو نداره.

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

قبل از شروع کار با این رویه ها بهتره یکسری موارد مشترک رو بین اون دو یاد بگیریم.

آرگومان ها

رویه ها در وی بی (VBA) میتونن با استفاده از آرگومان ها اجرا بشن. این آرگومان ها در بخش تعریف آنها مشخص شده اند. به عنوان مثال شما میتونید یک ساب تعریف کنید که یک عدد رو به تمام سلول های انتخاب شده در شیت اضافه کنه. شما میتونید این عدد رو به صورت آرگومان به ساب بدید تا این کار رو برای شما انجام بده:

[irp posts=”۹۴۳۷″ name=”تعریف متغیر ها و ثابت ها در وی بی (VBA) | قسمت اول”]

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

 

آرگومان های اختیاری

بعضی توابع و ساب ها آرگومان های اختیاری دارند (حتما شما چند مورد از این آرگومان ها رو در توابع مختلف دیدید، آرگومان آخر تابع Vlookup یک نمونه از این موارد هست). شما هم میتونید برای توابع و ساب های خودتون آرگومان های اختیاری تعریف کنید. این آرگومان ها میتونن توسط کاربر پر بشن یا نشن.

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

 

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

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

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

 

انتقال آرگومان با مرجع یا با مقدار

زماینکه آرگومان ها به رویه ها داده میشن به دو صورت میشه با اونها رفتار کرد:

با مقدار (ByVal) – در این حالت تنها مقدار اون آرگومان منتقل میشه به این معنی که یک کپی از اون رو منتقل میکنه. بنابراین هر تغییری که درون رویه بر روی آرگومان انجام میشه تأثیری بر اصل آرگومان نداره و آرگومان در حالت اولیه خودش میمونه.

با مرجع (ByRef) – در این حالت مقدار آرگومان به صورت اصلی (نه کپی) منتقل میشه. در این حالت هر تغییری که در طول رویه بر روی آرگومان ایجاد میشه برای روی اصل آرگومان هم اعمال میشه و بعد از تمام شدن رویه دیگه مقدار آرگومان تغییر کرده.

برای اینکه تعیین کنیم آرگومان به چه صورت به رویه منتقل بشن (با مقدار یا با مرجع) از کلمات ByRef یا ByVal استفاده میکنیم.

به رویه های زیر دقت کنید:

در این حالت آرگومان i به صورت مقداری منتقل میشه و هر تغییری که درون رویه بر روی  متغیر i ایجاد میشه در پایان رویه از بین میره و تغییری در مقدار i نخواهد داشت (در واقع تنها میتونه از مقدار متغیر i استفاده کنه)

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

نکته:
به صورت پیشفرض آرگومان های یک رویه به همراه مرجه به رویه منتقل میشن. بنابراین اگه از هیچکدام از کلمات ByVal و یا ByRef استفاده نکنید به معنی انتقال آرگومان با مرجع هست.

 

تو این آموزش درباره رویه ها (Procedures) صحبت کردیم و گفتیم که دو نوع هستند: ساب (Sub) و تابع (Function) و تقریبا متوجه شدیم که توابع در ویژوال بیسیک چطور ایجاد می شوند. همینطور یاد گرفتید که چطوری آرگومان اختیاری برای هر کدوم از این رویه ها ایجاد میشه و نهایتا نحوه تعیین نوع انتقال آرگومان به رویه رو دیدید.

تو آموزش های بعدی نحوه کار با هر یک از این رویه ها رو توضیح میدیم و اینکه چطوری با آرگومان ها درون رویه ها کار کنیم.

 

کلیدواژه : مقدماتی
126

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

دیدگاه کاربران
  • حمید رضا کاشانیان ۱۷ مهر ۱۳۹۸ / ۴:۳۷ ب٫ظ

    با سلام حضور محترم جناب آقای مهندس چراغی عزیز
    وبا تشکر ویژه بابت سایت بسیار کاربردی و آموزندتون بالاخره یکی پیدا شد که این نرم افزار قدرتمند رو آموزش اصولی بده و تبریک میگم به شما و تیم توانمندتون .
    من یک نرم افزار فروش و حسابداری و انبار داری با اکسل ۹۵ برای خودم { فست فود ) طراحی کردم و تا امروز آپدیت کردم به ۲۰۱۶ که از همه نظر نیازهامو براورده میکنه
    فقط جدیدا میخواستم رقم جمع فاکتورم رو بفرستم به پورت com3 که دستگاه کارت خوان بانک بوسیله کابل USP به اون متصل هست تا مشتری فقط رمزشو بزنه و دیگه لازم نباشه رقم خرید رو وارد کنه تا هم سرعت کار بره بالا و هم کمتر اشتباه بشه ولی نمیدونم کدش رو دقیقا چطور بنویسم
    در ضمن درایور دستگاه پوز و فایل dll رو بانک بهم داده ولی چون برنامم عمومی نیست مسئولین فنی بانک گفتند قسمت داخلی برنامه رو خودت باید تنظیم کنی و هیچ کمکی نکردند
    از شما و تیم خوبتون کمک و راهنمایی میخواستم
    با تشکر و سپاس فراوان

    • سامان چراغی ۱۸ مهر ۱۳۹۸ / ۶:۴۶ ب٫ظ

      با سلام و تشکر از لطفتون
      موردی که میفرمائید فقط از طریق VBA انجام میشه و دقیقا پیش نیاز اون اینه که توابع موجود و ساختار آنها رو در فایل dll شناخته بشه و بر اساس اون بشه این ارتباط رو برقرار کرد.
      ممکنه راهنمای این توابع رو در نت یا سایت سازنده دستگاه بتونید پیدا کنید.

      • حمید رضا کاشانیان ۱۹ مهر ۱۳۹۸ / ۴:۲۵ ب٫ظ

        با سلام
        ممنون از راهنمایتون دقیقا مشکل منم همینه ، فایل dll رو هر جای کامپیوتر که کپی میکنم در قسمت avilable references VBE دیده نمیشه تا بتونم از توابعش استفاده کنم .
        راهنمای توابع رو دارم ، بانک اونارو در قالب یک فایل pdf داخل پکیج dll بهم داده .
        به نظر شما فایل dll رو کجا بریزم تا توسط VBE شناخته بشه ؟

        • سامان چراغی ۱۹ مهر ۱۳۹۸ / ۷:۴۷ ب٫ظ

          متأسفانه به این عمیقی درگیر چنین مشکلی نبودم و ساختار دقیق فایل های dll رو جهت حل این مشکل نمیشناسم اما با جستجویی که کردم ممکنه دو صفحه زیر بهتون کمک کنه:
          اضافه کردن فایل dll به VBA از سایت مایکروسافت
          رفرنس دوم
          ممنون میشم درصورتیکه راه حل قطعی مشکل رو پیدا کردید بنده رو هم مطلع سازید.
          تشکر و پوزش بابت عدم ارائه پاسخ نهایی

          • حمید رضا کاشانیان ۲۲ مهر ۱۳۹۸ / ۶:۱۳ ب٫ظ

            اختیار دارید جناب آقای مهندس ، ممنون بابت وقتی که گذاشتید .
            حتما در صورت آگاهی ، شما را مطلع خواهم کرد ، ولی چون فایل dll با #C نوشته شده به نظرم باید از یک برنامه نویس حرفه ای که مسلط به #C و VB باشه سوال کنیم .
            اگر شما کسی رو تو دوستان و آشنایانتون دارید که ممنون میشم .

          • سامان چراغی ۲۲ مهر ۱۳۹۸ / ۸:۲۸ ب٫ظ

            تشکر،
            احساس میکنم این مسئله بیشتر با یک متخصص #C حل بشه، چند تا از کامنت هایی که میخوندم راه حل های مرتبط با این قضیه داده بودن و در نوع ذخیره فایل dll راهکار هایی داده بودند.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.

توسط
تومان