در آموزش قبلی سایت با روال و انواع در ویژوال بیسیک آشنا شدیم. روال Function یکی از انواع روال پشتیبانی شده توسط VBA می باشد که مقدار بازگشتی نیز می تواند داشته باشد. در این بخش از آموزش های رایگان وی بی ای با برخی از توابع توکار یا توابع داخلی (Built-in Function) پرکاربرد VBA آشنا می شویم.
مدت زمان تخمینی مطالعه: 0 دقیقه
فهرست مطالب
تعریف
توابع توکار یا ذاتی یا داخلی توابعی هستند که در زبان برنامه نویسی VBA پیاده سازی و بهینه سازی آنها توسط کامپایلر صورت گرفته است و در دسترس برنامه نویس قرار گرفته اند.
توابع توکار به منظور افزایش سرعت، سادگی و کارایی درون کامپایلر VBA تعبیه شده اند تا عملیات پرکابردی را که خلال برنامه نویسی ممکن است مورد استفاده اکثر برنامه نویسان قرار بگیرد را بر عهده بگیرند. بعنوان مثال تابع توکار Sin به منظور محاسبه سینوس در کامپایلر قرار داده است.
توابع توکار مانند روال Function عملیاتی را انجام می دهند و در پایان مقدار بازگشتی را نتیجه می دهند، با این تفاوت که معماری توابع توکار توسط کامپایلر می شود و همچنین توابع توکار در VBA بعنوان روال دسته بندی نمی شوند، به این معنا که توابع توکار تا زمانی که درون یک روال قرار نگیرند هیچ عملیاتی را انجام نخواهند داد.
VBA طیف وسیعی از توابع داخلی را پشتیبانی می نماید که در زیر با آنها آشنا خواهیم شد.
۱- توابع تبدیل
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
Asc | Asc(string) | محاسبه کد اَسکی اولین نویسه آرگومان string | Asc(“ABC”) | 65 |
Chr |
Chr(charcode) ChrB(charcode) ChrW(charcode) | محاسبه نویسه مرتبط با کد نویسه محاسبه داده های بایت مرتبط با کد نویسه محاسبه نویسه یونیکد مرتبط با کد نویسه | Chr(65) | A |
CVErr | CVErr(errornumber) | ایجاد کد خطای تعریف شده توسط کاربر | CVErr(2001) | Error 2001 |
Format | Format(Expression, [ Format ], [ FirstDayOfWeek ], [ FirstWeekOfYear ]) | قالب بندی عبارت | Format(“17:4:23”, “hh:mm:ss”) | 17:04:23 |
Hex | Hex(number) | تبدیل اعداد از مبنای ۱۰ به مبنای ۱۶ | Hex(10) | A |
Oct | Oct(number) | تبدیل اعداد از مبنای 10 به مبنای 8 | Oct(459) | 713 |
Str | Str(number) | محاسبه رشته متناظر با عدد | Str(459) | ” 459″ |
Val | Val(string) | مقدار عددی اعداد موجود در یک رشته را محاسبه می کند | Val(” 2 45 7″) | 2457 |
۲- توابع ریاضی
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
Abs | Abs(number) | محاسبه قدر مطلق عدد | Abs(-50.3) | 50.3 |
Atn | Atn(number) | محاسبه آرک تانژانت یک عدد (نتیجه تابع بر حسب رادیان نمایش داده می شود) | Atn(1)*4 | 3/14159265358979 |
Cos | Cos(number) | محاسبه کسینوس زاویه (آرگومان number بر حسب رادیان باید تکمیل شود) | Cos(0) | 1 |
Exp | Exp(number) | تابع نمایی ex | Exp(1) | 2/71828182845905 |
Int Fix |
Int(number) Fix(number) | محاسبه قسمت صحیح عدد (تابع Int همواره number را به نزدیکترین عدد صحیح محاسبه می نماید ولی تابع Fix فقط قسمت اعشاری number را حذف می نماید) |
Int(99.8) Fix(99.8) Int(-99.2) Fix(99.2) |
99 99 100- 99- |
Log | Log(number) | محاسبه لگاریتم طبیعی آرگومان number | Log(2/71828182845905) | 1 |
Rnd | Rnd [ (Number) ] | ایجاد عدد اتفاقی کمتر از 1 و صفر | Int((6 * Rnd) + 1) | ایجاد یک عدد اتفاقی بین یک و شش |
Sgn | Sgn(number) | علامت آرگومان number را بر می گرداند | Sgn(12) Sgn(-12) Sgn(0) | 1 -1 0 |
Sin | Sin(number) | محاسبه سینوس زاویه (آرگومان number بر حسب رادیان باید تکمیل شود) | Sin(0) | 0 |
Sqr | Sqr(number) | محاسبه رادیکال عدد در مبنای ۲ | Sqr(4) | 2 |
Tan | Tan(number) | محاسبه تانژانت زاویه (آرگومان number بر حسب رادیان باید تکمیل شود) | tan(0.785398) | 0/999999673205157 |
۳- توابع تبدیل نوع داده
تابع | دستور زبان | هدف | نوع داده نتیجه تابع |
---|---|---|---|
CBool | CBool(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Boolean | Boolean |
CByte | CByte(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Byte | Byte |
CCur | CCur(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Currency | Currency |
CDate | CDate(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Date | Date |
CDbl | CDbl(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Double | Double |
CDec | CDec(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Decimal | Decimal |
CInt | CInt(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Integer | Integer |
CLng | CLng(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Long | Long |
CLngLng | CLngLng(expression) | تبدیل نوع داده آرگومان تابع به نوع داده LongLong | LongLong (فقط در پلتفرم های ۶۴ بیتی)) |
CLngPtr | CLngPtr(expression) | تبدیل نوع داده آرگومان تابع به نوع داده LongPtr | LongPtr |
CSng | CSng(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Single | Single |
CStr | CStr(expression) | تبدیل نوع داده آرگومان تابع به نوع داده String | String |
CVar | CVar(expression) | تبدیل نوع داده آرگومان تابع به نوع داده Variant | Variant |
۴- سایر توابع داخلی
تابع MsgBox
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
MsgBox | MsgBox ((prompt, [ buttons, ] [ title, ] [ helpfile, context ])) | نمایش پنجره پیغام به کاربر با استفاده از آرگومان ها (arglist) | MsgBox “آیا اطلاعات فرم را تایید می نمایید؟”, vbOKCancel | نمایش پنجره پیغام به کاربر که شامل دو کلید OK و Cancel می باشد |
- لیست آرگومان ها با استفاده از «,» (کاما) جدا می شوند.
- غیر از آرگومان prompt که اجباری می باشد، سایر آرگومان ها اختیاری هستند.
- آرگومان prompt می تواند یک رشته String (مانند مثال جدول بالا) و یا یک متغیر که حاوی اطلاعات یک رشته می باشد تعریف گردد.
- آرگومان buttons ترکیب کلید هایی که می بایست در پنجره پیغام بکار رود را تنظیم می نماید.
تابع InputBox
تابع | دستور زبان | هدف | مثال | نتيجه |
---|---|---|---|---|
InputBox | InputBox (prompt, [ title ], [ default ], [ xpos ], [ ypos ], [ helpfile, context ]) | یک کادر دریافت اطلاعات را به کاربر نمایش می دهد، اطلاعات را از کاربر در یک جعبه متنی دریافت می نماید و پس از کلیک کاربر یک رشته حاوی محتویات جعبه متنی را برمی گرداند. | inputbox “لطفا تاريخ تولد خود را وارد نماييد” |
مقدار بازگشتی تابع داخلی InputBox از نوع داده String می باشد. بنابراین برای ذخیره اطلاعات دریافتی از کاربر باید یک متغیر از نوع String اعلان نمایید.
تابع Array
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
Array | Array(arglist) | ایجاد آرایه با استفاده از لیست آرگومان ها (arglist) | MyWeek = Array(“Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”, “Sun”) | MyWeek(2) = Tue |
- لیست آرگومان ها با استفاده از «,» (کاما) جدا می شوند.
- کران پایین یک آرایه بصورت پیش فرض صفر می باشد. شما می توانید با استفاده از دستور
Option Base 1
کران پایین را به یک تغییر دهید. دقت داشته باشید که دستور Option Base فقط در سطح ماژول قابل استفاده می باشد. در مثال بالا فرض شده است که Option Base روی یک تنظیم شده است.
تابع LBound
تابع | دستور زبان | هدف |
---|---|---|
LBound |
LBound(arrayname, [ dimension ]) |
کران پایین در دسترس برای یک آرایه (arrayname) را با توجه به بعد انتخابی (dimension) برمی گرداند. |
- آرگومان dimension تعیین کننده این است که کران پایین برای کدام بعد باید بازگردانده شود. مقدار یک (1) برای بعد اول، دو (2) برای بعد دوم و به همین ترتیب. اگر حذف شود مقدار پیش فرض آن یک (1) می باشد.
- تابع LBound به همراه تابع UBound برای محاسبه اندازه هر کدام از ابعاد یک آرایه بکار می رود. بطور مثال دستور
UBound(A, 2) - LBound(A, 2) + 1
اندازه بعد دوم آرایه A را محاسبه می نماید. - تنظیم Option Base می تواند روی مقدار بازگشتی تابع LBound تاثیر بگذارد.
- استفاده از بند To به هنگام اعلان یک آرایه با استفاده از هر یک دستورات اعلان متغیر (Dim, Private, Public, ReDim, Static) باعث خواهد شد که هر عددی که در اعلان مشخص شده باشد بعنوان کران پایین تعیین گردد. مقدار تعیین شده در بند To بر تنظیم Option Base ارجح می باشد. ( این موضوع در مثال مشخص می باشد )
مثال
Dim Lower
Dim MyArray(1 To 10, 5 To 15, 10 To 20) ' اعلان آرایه سه بعدی با کران های بالا و پایین تعیین شده
Dim AnyArray(10) ' اعلان آرایه یک بعدی
Lower = Lbound(MyArray, 1) ' مقدار بازگشتی: 1.
Lower = Lbound(MyArray, 2) ' مقدار بازگشتی: 5.
Lower = Lbound(MyArray, 3) ' مقدار بازگشتی: 10.
Lower = Lbound(AnyArray) ' مقدار بازگشتی: 0 یا 1. به مقدار تنظیم Option Base بستگی دارد.
تابع UBound
تابع | دستور زبان | هدف |
---|---|---|
UBound |
UBound(arrayname, [ dimension ]) |
کران بالای در دسترس برای یک آرایه (arrayname) را با توجه به بعد انتخابی (dimension) برمی گرداند. |
- آرگومان dimension تعیین کننده این است که کران پایین برای کدام بعد باید بازگردانده شود. مقدار یک (1) برای بعد اول، دو (2) برای بعد دوم و به همین ترتیب. اگر حذف شود مقدار پیش فرض آن یک (1) می باشد.
- تابع UBound به همراه تابع LBound برای محاسبه اندازه هر کدام از ابعاد یک آرایه بکار می رود. بطور مثال دستور
UBound(A, 2) - LBound(A, 2) + 1
اندازه بعد دوم آرایه A را محاسبه می نماید. - تنظیم Option Base روی مقدار بازگشتی تابع UBound تاثیری ندارد. استفاده از بند To به هنگام اعلان یک آرایه با استفاده از هر یک دستورات اعلان متغیر (Dim, Private, Public, ReDim, Static) باعث خواهد شد که هر عددی که در اعلان مشخص شده باشد بعنوان کران بالا تعیین گردد. مقدار تعیین شده در بند To بر تنظیم Option Base ارجح می باشد. ( این موضوع در مثال مشخص می باشد )
مثال
Dim Upper
Dim MyArray(1 To 10, 5 To 15, 10 To 20) ' اعلان متغیر حاوی آرایه
Dim AnyArray(10)
Upper = UBound(MyArray, 1) ' مقدار بازگشتی: 10.
Upper = UBound(MyArray, 3) ' مقدار بازگشتی: 20.
Upper = UBound(AnyArray) ' مقدار بازگشتی: 10.
تابع Choose
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
Choose | Choose(index, choice-1, [ choice-2, …, [ choice-n ]] ) | با توجه به آرگومان index یکی از آرگومان های choice-1 تا choice-n را برمی گرداند. | Choose(1, “Speedy”, “United”, “Federal”) | Speedy |
- آرگومان index از نوع داده عددی است و باید بین یک و تعداد آرگومان های choice باشد.
- آرگومان های choice می توانند هر نوع عبارت Variant که حاوی یکی از انتخاب ها است، باشند.
- در صورتی که آرگومان index بیشتر از انتخاب ها باشد تابع مقدار Null را برمی گرداند.
تابع CreateObject
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
CreateObject | CreateObject(class, [ servername ]) | یک شیء اکتیوایکس را ایجاد و بر می گرداند. | Set ExcelSheet = CreateObject(“Excel.Sheet”) | یک شئ مطابق صفحه گسترده اکسل ایجاد می نماید. |
- آرگومان class نام برنامه کاربردی و کلاس شیء ای که باید ایجاد شود می باشد. دستور این آرگومان به شکل appname.objecttype می باشد و شامل دو قسمت appname (نام برنامه کاربردی که شیء را ارائه می نماید) و objecttype (نوع یا نام کلاس شیء ای که باید ایجاد شود) می باشد.
- آرگومان اختیاری servername نام سرور شبکه ای است که قرار است شیء روی آن ایجاد شود می باشد.(در صورتی که بخواهید شیء را روی یک کامپیوتر درون شبکه ایجاد نماید)
- بعد از ایجاد شیء توسط تابع، شیء ایجاد شده تمامی متدها و خواص مرجع شیء ای که نمونه آن را ایجاد کرده است را خواهد داشت.
فرایند اتصال شئ ایجاد شده توسط تابع CreateObject در زمان اجرای برنامه صورت می پذیرد. این به این علت است که برای ایجاد شیء توسط این تابع ابتدا متغیر با استفاده از بند As Object اعلان می شود که بدین معناست که متغیر می تواند حاوی مرجع هر نوع شی ای باشد؛ و بنابراین دسترسی به شیء از طریق شیء فقط در زمان اجرای برنامه امکان پذیر می باشد. این نوع متغیر Late-Bound نامیده می شود. نوع مقابل این متغیر early-bound می باشد. مرجع یک متغیر early-bound در زمان اعلان مشخص می گردد و بعد از اعلان فقط می تواند حاوی مرجع شئ اعلان شده باشد، اما از لحاظ کارایی بهتر از متغیر Late-Bound عمل می نماید.
تابع VarType
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
VarType | VarType(varname) | یک مقدار Integer را برمی گرداند که نشان دهنده زیرگروه یک متغیر و یا نوع خاصیت پیش فرض یک شیء می باشد. | MyCheck = VarType(StrVar) | مقدار ۸ را بر می گرداند. |
- تابع داخلی VarType برای تشخیص نوع داده یک متغیر کاربرد دارد. در صورتی که در آرگومان تابع بجای یک متغیر از یک شیء استفاده نمایید تابع نوع داده خاصیت (Property) پیش فرض آن شیء را بر خواهد گرداند.
- در جدول زیر نوع داده متناظر با مقدار بازگشتی تابع VarType مشخص شده است.
ثابت | مقدار | توضيح |
---|---|---|
vbEmpty | 0 | تهی (فاقد مقدار اولیه) |
vbNull | 1 | Null (فاقد داده معتبر) |
vbInteger | 2 | Integer |
vbLong | 3 | Long integer |
vbSingle | 4 | عدد با ممیز شناور تک دقتی (Wikipedia) |
vbDouble | 5 | عدد با ممیز شناور با دقت دوگانه (Wikipedia) |
vbCurrency | 6 | Currency value |
vbDate | 7 | Date value |
vbString | 8 | String |
vbObject | 9 | Object |
vbError | 10 | Error value |
vbBoolean | 11 | Boolean value |
vbVariant | 12 | Variant |
vbDataObject | 13 | شی دسترسی به داده (DAO) |
vbDataObject | 13 | شی دسترسی به داده (DAO) |
vbDecimal | 14 | Decimal value |
vbByte | 17 | Byte value |
vbLongLong | 20 | LongLong integer (فقط در بسترهای 64 بیتی معتبر می باشد) |
vbUserDefinedType | 36 | نوع داده کاربر |
vbArray | 8192 | آرایه |
تابع IsNumeric
تابع | دستور زبان | هدف | مثال | نتیجه |
---|---|---|---|---|
IsNumeric | IsNumeric(expression) | یک مقدار بولی بر می گرداند که مشخص کننده این است که آیا عبارتی که در آرگومان تابع آورده شده است عدد می باشد یا خیر | MyCheck = IsNumeric(“55”) | مقدار True را بر می گرداند. |
مقدار بازگشتی تابع داخلی IsNumeric در صورتی که آرگومان تابع عدد باشد True و در غیر اینصورت False می باشد.
بیشتر بخوانید:
Functions (Visual Basic for Applications)
بیشتر بخوانید
توابع توکار VBA | لیست کامل توابع داخلی در ویژوال بیسیک
عملگرهای VBA | انجام عملیات روی داده ها و ایجاد عبارت ها
حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک
کدهای VBA | آشنایی با کدها و دستور زبان برنامه نویسی VBA
دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی
آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی
میدان دید متغیر در VBA | نحوه دسترسی به متغیرها در قسمت های مختلف پروژه