در این آموزش از مبحث برنامه نویسی شیء گرا در VBA کاربرد روال Property Get و خواندن مقدار یک ویژگی کلاس در VBA را بررسی می نماییم.
فهرست مطالب
معرفی روال Property Get
در دو آموزش قبلی با کاربرد روال های Property Let و Property Set آشنا شدیم. کاربرد روال Property Let تعیین مقدار برای ویژگی یک شیء و کاربرد روال Property Set تعیین مرجع برای ویژگی یک شیء وقتی ویژگی هم یک شیء است، می باشد.
هر دو روال Property Let و Property Set باعث می شوند که یک داده در شیء ایجاد شده از کلاس ذخیره شود. در واقع این دو روال فقط نوشتنی (Write-only) می باشند و نمی توانید داده ای را از درون شیء بخوانند.
برای خواندن داده ها از درون شیء باید از روال Property Get استفاده نماییم. وقتی که در ساختار یک کلاس برای یک ویژگی، یک روال Property Get تعریف شود امکان خواندن مقدار آن ویژگی در خارج از شیء نیز مهیا می شود.
دریافت مقدار یک ویژگی با استفاده از روال Property Get
برای اینکه ویژگی یک شیء خواندنی نیز باشد بایستی از قبل روال Property Get در ساختار کلاسی که شیء به آن تعلق دارد اعلان شده باشد.
دریافت مقدار ویژگی ایجاد شده با روال Property Let
در مثال کلاس Fruit در آموزش روال Property Let وقتی که خواستیم مقدار ویژگی name را برای شیء orange دریافت کنیم کامپایلر خطای Invalid use of property
را ایجاد و برنامه متوقف گردید.
برای اینکه بتوانیم ویژگی name را خواندنی نیز بکنیم، کد زیر را در پنجره کد کلاس Fruit اضافه نمایید.
Property Get name() As String
name = fruitName
End Property
حالا اگر مجدداً در یک ماژول استاندارد کد زیر را کپی و در پنجره Immediate نام روال test را تایپ و کلید Enter را فشار دهید. ملاحظه می کنید که این دفعه خطای Invalid use of property
را دریافت نمی کنید و مقدار ویژگی در پنجره Immediate چاپ می شود.
Sub test()
Dim orange As New Fruit
Dim objectName As String
orange.name = "orange"
objectName = orange.name
Debug.Print objectName
End Sub
دریافت مقدار ویژگی ایجاد شده با روال Property Set
گفته شد که ویژگی ای که با استفاده از روال Property Set مرجع آن تعیین می شود، خودش یک شیء می باشد. بنابراین دریافت مقدار برای یک شیء امکان پذیر نمی باشد و خطای حین اجرا (Run-Time Error '91'
) را ایجاد می نماید.
در اینگونه موارد فقط می توانیم ویژگی یک ویژگی را دریافت نماییم. برای باز شدن موضوع مثال روال Property Set را در نظر بگیرید. روال setWs مرجع ویژگی clsWS را تعیین می کرد. ویژگی clsWS یک شیء از کلاس Worksheet است، یعنی در واقع یک کاربرگ اکسل می باشد.
یکی از ویژگی های کلاس Worksheet ویژگی Cells می باشد که یک ویژگی فقط خواندنی می باشد و مقداری که در یک سلول وجود دارد را برمی گرداند. در کد زیر با استفاده از این ویژگی کلاس Worksheet که در ویژگی clsWS نیز وجود دارد می خواهیم مقدار اولین سلول اولین صفحه کاربرگ جاری اکسل را دریافت نماییم.
در پنجره کد کلاس myWorkSheet کد زیر را اضافه نمایید.
Property Get firsCell()
firsCell = clsWS.Cells(1, 1)
End Property
در یک ماژول استاندارد کد زیر را کپی نمایید و سپس در پنجره Immediate نام روال test را تایپ و کلید Enter را فشار دهید.
Sub test()
Dim mySheet As New myWorkSheet
Set mySheet.setWs = ThisWorkbook.Sheets(1)
Debug.Print mySheet.firsCell
End Sub
هر مقداری که در اولین سلول در اولین صفحه اکسل نوشته شده باشد در پنجره Immediate چاپ خواهد شد.
دریافت فایل اکسل مثال ها
ملاحظات
هنگام استفاده از روال Property Get در VBA بخاطر داشته باشید که :
- تعداد پارامتر (آرگومان) های روال Property Get باید کمتر از روال Property Let یا Property Set متناظر با آن باشد.
- نوع داده روال Property Get باید دقیقاً مشابه نوع داده روال Property Let یا Property Set متناظر با آن باشد.
بیشتر بخوانید
توابع توکار VBA | لیست کامل توابع داخلی در ویژوال بیسیک
عملگرهای VBA | انجام عملیات روی داده ها و ایجاد عبارت ها
حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک
کدهای VBA | آشنایی با کدها و دستور زبان برنامه نویسی VBA
دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی
آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی
میدان دید متغیر در VBA | نحوه دسترسی به متغیرها در قسمت های مختلف پروژه