By val و By ref | دو اصطلاحی که باید کار با آنها را یاد بگیرید .
سلام به سافت پلاس و دنیای برنامه نویسی VBA خوش آمدید .امروز می خواهیم به سراغ برنامه نویسی VBA در اکسل برویم .
زیادی هستند که معمولا وقتی که شما در ابتدای مسیر برنامه نویسی VBA هستید با آنها مواجه می شوید .
اما از بین همه آنها دو تا اصطلاح هست که همیشه با آنها سرو کار دارید .
این دو تا اصطلاح Sub و Function هستند .
البته قبلا در داخل سایت راجع به این دو تا اصطلاح بطور کامل صحبت کرده ام پس اینجا قرار نیست راجع به این که این دو تا اصطلاح چی هستند ؟ چه کاربردی دارند و چه تفاوتی بین این دو تا وجود دارد صحبت کنم .
اگر می خواهید با این دو تا اصطلاح بصورت کامل و اصولی آشنا شوید به شما توصیه می کنم به سراغ مطلب زیر بروید .
وقتی که در ابتدای کار با این دو اصطلاح هستید معمولا از آنها در ساده ترین شکل خودشان استفاده می کنید .
ولی جلوتر که بروید متوجه می شوید که همیشه هم این روال ها و تابع ها به فرمت ساده خودشان نیستند .
اینجاست که سرو کله آرگومان ها پیدا می شوند . آرگومانها در واقع ورودی هایی هستند که با استفاده از آنها می توانید یک سری اطلاعات را در اختیار روال یا تابع مورد نظر خودتان قرار دهید .
اما باز هم کار به همین جا ختم نمی شود . چون در حین کار با آرگومان ها دو تا اصطلاح By Val و By Ref هم هستند که کم کم سر و کله شان پیدا می شود و شما باید با این این دو تا اصطلاح و مفهوم مربوط به آنها هم آشنا شوید .
چیزی که قرار است در داخل این مطلب به طور مفصل راجع به انها با هم صحبت کنیم .
من علیرضا شهرآئینی هستم و از شما دعوت می کنم که اگر علاقمند به برنامه نویسی اکسل تا انتهای این مطلب من را همراهی کنید .
فهرست محتوا
چه موقع از آرگومانها استفاده می کنیم ؟
وقتی که شما با استفاده از کدهای VBA یک تابع و یا یک روال را تعریف می کنید می توانید مشخص کنید که آیا آن تابع یا روال شما ورودی داشته باشد یا نه ؟
اگر روال یا تابع مورد نظر شما قرار نیست ورودی بپذیرد که مشکلی نیست و کدهای شما در قالب روال یا تابع می توانند کار خودشان را انجام بدهند .
اما بعضی از مواقع هست که یک تابع یا روال برای اینکه بتواند کار مورد نظر را انجام بدهد نیاز به یک سری اطلاعات دارد که باید این اطلاعات را در قالب ورودی ها یا آرگومانهایی در اختیارش قرار بدهید .
در ویدئوی بالای راجع به این موضوع بهتر صحبت کرده ام .
برای اینکه بتوانید آرگومان های مورد نظر خودتان را در اختیار یک روال قرار بدهید دو تا انتخاب وجود دارد .
انتخاب اول ارسال آرگومان ها با استفاده از دستور ByVal است .
انتخاب دومی که وجود دارد استفاده از دستور ByRef است .
اما این دو تا دستور چه فرقی با هم دارند ؟
کجاها باید از دستور اول و کجاها باید از دستور دوم استفاده کرد ؟
اگر در استفاده این دستورها در جای خودشان دقت نکنیم چه عواقبی ممکن برای ما بوجود بیایید؟
اینها سوالاتی است که قرار است در ادامه راجع به آنها با هم بیشتر صحبت کنیم .
پس با من همراه باشید .
آشنایی با دستور ByVal
عبارت ByVal مخفف اصطلاح By Value است .
ByVal در عین حال یکی از صدها کلمات کلیدی در زبان برنامه نویسی وی بی است .
با استفاده از این عبارت می شود مقدار یک متغیر را در اختیار روال مورد نظر قرار داد .
اجازه بدهید با هم یک مثال خیلی ساده را بررسی کنیم .
به کد زیر نگاه کنید .
Sub test() >>>>>>>>>>>> روال شماره -۱
Dim A As Integer
Dim B As Integer
Dim C As Integer
A=20
B=40
C=60
msgbox calc_avg(A,B,C)
اینجا ما یک روال خیلی ساده داریم .
3 تا متغیر به اسامی A و B و C تعریف کرده و در داخل هر کدام از آنها هم 3 تا عدد را ذخیره کرده ایم .
تا به اینجای کار همه چیز عادی است . اما داستان ما از خط شماره 15 در این کدها شروع می شود .
در واقع با استفاده از این خط ما یک روال دیگر را صدا کرده ایم که اسم آن روال Calc_avg است .
از قرار معلوم این تابع 3 تا ورودی هم دارد که به عنوان ورودی مقادیر 3 تا متغیر خودمان را که در همین روال تعریف کرده ایم در اختیارش قرار می دهیم .
اما برویم ببینم که این روال چه کاری می کند .
خواندن این مطلب را هم از دست ندهید : مفهوم متغیر در برنامه نویسی اکسل
به کدهای زیر دقت کنید .
Sub test() >>>>>>>>>>>> روال شماره -۱
Dim A As Integer
Dim B As Integer
Dim C As Integer
A=20
B=40
C=60
msgbox calc_avg(A,B,C)
MsgBox A
MsgBox B
MsgBox C
End Sub
Function Calc_avg(ByVal A As Integer,ByVal B as Integer,ByVal C as Integer) >>>>>>>>>>> روال شماره - ۲
A=A+10
Calc_avg = (A + B + C)/3
End Function
روال دوم که از نوع تابع است 3 تا مقدار را به عنوان ورودی دریافت می کند . البته این ورودی ها باید حتما از نوع عدد باشد .
در بدنه این تابع 2 تا کار تعریف شده است .
کار اولی که تعریف شده این است که هر مقداری که در متغیر A وجود دارد و آن را به عنوان ورودی دریافت می کند با عدد 10 جمع بزند.
در اینجا ما مقدار ذخیره شده در متغیر A که در حال حاضر برابر با عدد 20 است را به عنوان ورودی در اختیار این تابع قرار می دهیم .
در خط بعدی همین عدد وارد یک محاسبه شده با مقادیر مربوط به 2 تا متغیر دیگر جمع و حاصل آنها بر عدد 3 تقسیم می شود و این عدد نهایی که در حکم میانگین است به عنوان خروجی نهایی این تابع لحاظ می شود .
اما اینجا چه اتفاقاتی در جریان است ؟ در ادامه با من همراه باشید تا مفصل راجع به این اتفاق ها با هم صحبت کنیم .
Function Calc_avg(ByVal A As Integer,ByVal B as Integer,ByVal C as Integer) >>>>>>>>>>> روال شماره - ۲
A=A+10
Calc_avg = (A + B + C)/3
End Function
دستور ByVal چه کاری می کند ؟
یک بار دیگر به روال شماره 2 نگاه کنید .
این تابع اینطور می گوید که ” من یک کپی از متغیر A می خواهم ” .
در جواب ما می گوییم ” مشکلی نیست ” و متغیر A را در اختیارش قرار می دهیم . اما قبل از این متغیر یک عبارت ByVal را درج کرده ایم . این یعنی چی ؟
در واقع با استفاده از کلمه ByVal به این تابع می گوییم که ” شما فقط مجاز هستید که یک کپی از این متغیر را داشته باشید ”
این یعنی اینکه اصل این متغیر را برای خودمان نگه داشته ایم . خب این کار چه تاثیری دارد ؟
این باعث می شود اصل متغیر ما و هر مقداری که در داخل آن قرار دارد برای خودمان حفظ شود و این تابع قادر به تغییر مقداری که در داخل آن ذخیره شده نباشد .
در ادامه اتفاقی که می افتد این است که همین متغیر A که مدر داخل تابع یک مقدار جدید به آن اختصاص پیدا کرده وارد خط شماره 17 از کدهای بالا می شود . نتیجه مربوط به محاسبه این تابع برای ما نمایش داده می شود .
در خط شماره 19 از برنامه خواسته شده که هر مقداری که در داخل متغیر A ذخیره دارد را برای ما نمایش بدهد که این مقدار برابر با عدد 20 خواهد بود .
اما اگر از عبارت Byef استفاده کنیم قرار است خروجی به چه صورت باشد ؟
اگر از هیچ کدام از این دو تا عبارت استفاده نشود تکلیف چیست و خروجی کار به چه صورت خواهد بود .
پاسخ این دو تا سوال را می توانید در داخل ویدئوی ابتدای همین مطلب پیدا کنید .
پس توصیه می کنم این ویدئو را هم حتما مشاهده کنید .
باز هم به پایان یکی دیگر از مطالب مربوط به برنامه نویسی در اکسل رسیدیم .
خیلی خوب می دانم که همین الان کلی سایت هستند که راجع به موضوعی که توی این پست راجع به آن با هم صحبت کردیم مطالب و آموزش های مختلفی نوشته اند .
اما از اینکه این سایت و این مطلب را برای یادگیری این موضوع انتخاب کردید از شما واقعا متشکرم .
تمام سعی من آموزش این مطلب به ساده ترین شکل ممکن بود . خوشحال می شوم که نظرات شما را در خصوص این مطلب در قسمت دیدگاهها داشته باشم .
هر نظر و پیشنهاد و یا سوالی در این خصوص دارید که به نحوی به تکمیل تر کردن این مطلب کمک کند با کمال میل از ان استقبال می کنم .
به امید دیدار مجدد شما در سافت پلاس .
مطالب زیر را حتما مطالعه کنید
با این کدهای VBA محدوده ها را در اکسل مدیریت کنید+ویدئو
SQL Server سوالاتی که همه در موردش می پرسند ؟
ردیابی تغییرات در فایل اکسل|نکته های کاربردی
مخفی کردن فرمول ها در اکسل؛ چرا و چطور این کار را انجام دهیم؟
مخفی کردن فرمول ها در اکسل با استفاده از روش های مختلف چیزی است که در این مطلب راجع به اون با هم صحبت می کنیم .
چه جوری از اطلاعات خودمان در اکسل محافظت کنیم ؟
توی این آموزش با هم روش های مختلف حفاظت از فایل های اکسل را یاد می گیریم .
با این ۷ روش سرعت اجرای کدهای VBA را ۱۰ برابر کنید .
در این مطلب با ۷ روشی آشنا می شویم که موجب افزایش سرعت اجرای کدهای اکسل می شوند .
دیدگاهتان را بنویسید