کلاس و شیء دو جنبه اصلی برنامه نویسی شیء گرا (OOP) می باشند. در این آموزش با نحوه ایجاد کلاس و شیء در VBA آشنا می شویم.
فهرست مطالب
کلاس در VBA
کلاس قالب ایجاد شیء در برنامه نویسی شیء گرا (OOP) می باشد. در برنامه نویسی شیء گرا ابتدا قالب شیء با استفاده از کلاس ایجاد و سپس با استفاده از قالب ایجاد شده اشیاء متعدد ایجاد می گردد.
در VBA نیز قبل از اینکه یک شیء بخواهد ایجاد گردد باید یک کلاس ایجاد و خواص و رفتار شیء در آن کلاس تعریف گردد.
ایجاد کلاس در VBA
برای ایجاد کلاس در VBA باید یک ماژول کلاس ایجاد نمایید. ماژول کلاس شامل تعریف جزئیات یک کلاس می باشد. به محض ایجاد یک ماژول کلاس، VBA یک کلاس جدید هم نام با آن ماژول ایجاد می کند.
مراحل ایجاد ماژول کلاس
- ویرایشگر کد VBA در اکسل یا آفیس خود باز نمایید. برای دریافت اطلاعات بیشتر درباره باز کردن ویرایشگر کد VBA این آموزش را مشاهده نمایید.
- از منوی Insert روی گزینه Class Module کلیک نمایید تا VBA ماژول کلاس را ایجاد نماید.
- نام ماژول کلاس را می توانید پس از ذخیره فایل اکسل یا اکسس تعیین نمایید.
نام کلاس در VBA نامی است که برای ماژول کلاس انتخاب می نمایید.
شیء در VBA
شیء یک نمونه از یک کلاس می باشد، که از روی قالبی که در کلاس تعریف شده است ایجاد می گردد. اشیاء خصوصیات و رفتارهای خود را از کلاس می گیرند.
ایجاد شیء
اعلان متغیر شیء
اولین قدم برای ایجاد یک شیء در VBA اعلان یک متغیر برای نگهداری شیء می باشد. متغیری که شیء را نگهداری می نماید می تواند یا از نوع کلاسی که قرار است نمونه ای از آن باشد و یا از نوع Object اعلان شود.
Dim myObject As Class1 ' اعلان شیء از نوع کلاسی با نام Class1
Dim myObject As Object ' اعلان متغیر شیء با نوع داده Object
روش های ایجاد شیء در VBA
گفتیم که هر شیء یک نمونه جدید از یک کلاس است، بنابراین برای اعلان شیء باید تعیین کنید که شیء موردنظر نمونه ای از کدام کلاس می باشد.
ایجاد یک شیء جدید در VBA به دو روش امکان پذیر می باشد:
ایجاد شیء هنگام اعلان متغیر
اعلان متغیر در VBA با دستور Dim، دستور Private، دستور Public یا دستور Static انجام می شود. اگر هنگام اعلان متغیر از کلمه کلیدی New استفاده نمایید VBA هنگام اعلان متغیر یک شیء جدید از یک کلاس ایجاد خواهد کرد.
کدهای زیر یک شیء جدید هنگام اعلان متغیر ایجاد می کنند:
' ایجاد یک نمونه جدید از کلاس Worksheet (صفحه اکسل) با استفاده از یکی از دستورات اعلان
Dim X As New Worksheet
Public X As New Worksheet
Private X As New Worksheet
Static X As New Worksheet
' اعلان یک شیء جدید از کلاسی که کاربر ایجاد کرده است
' userClass یک ماژول کلاس است که توسط کاربر ایجاد شده است
Dim myObject As New userClass
ایجاد شیء با استفاده از دستور Set
دستور Set در VBA دو کاربرد اصلی دارد:
- تعیین مرجع یک شیء به یک متغیر شیء؛ منظور از مرجع یک شیء همان کلاسی است که قالب شیء در آن تعریف شده است.
- تخلیه کلیه منابع سیستم و حافظه اختصاص یافته به یک شیء
شکل کلی دستور Set به صورت زیر می باشد:
Set objectvar = {[ New ] objectexpression | Nothing }
با استفاده از دستور Set می توانید مرجع یک متغیر شیء از قبل اعلان شده را تعیین یا تغییر نمایید.
استفاده از کلمه کلیدی New در دستور Set یک شیء جدید از کلاس ایجاد می نماید.
dim MyObject As Object ' اعلان متغیر از نوع شیء
Set MyObject = New MyClass ' تعیین مرجع متغیر شیء
در خط اول کد بالا MyObject یک متغیر است که از نوع داده Object اعلان شده است. MyClass نام یک ماژول کلاس است که توسط کاربر ایجاد شده است.
در خط دوم با استفاده از دستور Set به کامپایلر اعلام می کنیم که MyObject یک نمونه جدید از کلاس MyClass می باشد و باید خواص و رفتارهایی که برای MyClass تعیین کرده ایم را داشته باشد.
dim MyObject As MyClass ' اعلان متغیر از نوع شیء
Set MyObject = New MyClass ' تعیین مرجع متغیر شیء
کد بالا مشابه کد قبلی می باشد با این تفاوت که در این کد هنگام اعلان متغیر شیء صریحاً به کامپایلر اعلام کردیم که متغیر MyObject قرار است که یک شیء از کلاس MyClass باشد ولی در کد قبلی یک Object اعلان کردیم که می تواند هر شیء ای باشد.
پیوند زودهنگام (Early-bound) متغیر به شیء در کد اخیر کارایی بهتری نسبت به پیوند دیرهنگام (Late-bound) دارد [1]. بنابراین توصیه می شود جاهایی که امکان آن وجود دارد از پیوند زودهنگام استفاده نمایید.
ایجاد شیء با استفاده از تابع CreateObject
تابع CreateObject یک شیء اکتیوایکس (ActiveX object) را ایجاد و بر می گرداند. با این تابع نیز می توانید یک شیء (فقط شیء اکتیوایکس) در VBA ایجاد نمایید.
Sub testCreateObject()
' اعلان يک متغير شيء
' اعلان متغير از نوع شيء باعث پيوند ديرهنگام خواهد شد
Dim ExcelSheet As Object
' ايجاد شيء با استفاده از تابع
Set ExcelSheet = CreateObject("Excel.Sheet")
' قابل مشاهده کردن اکسل با استفاده از شيء Application
ExcelSheet.Application.Visible = True
' قرار دادن يک مقدار دلخواه در سلول اول اکسل براي تست کد
ExcelSheet.Application.Cells(1, 1).Value = "اين سلول اول در ستون اول مي باشد."
' ذخيره شيء بر روي حافظه در مسير دلخواه
ExcelSheet.SaveAs "C:\Users\Pasargad\Downloads\test\test.xlsx"
' بستن اکسل
ExcelSheet.Application.Quit
' تخليه فضاي حافظه در نظر گرفته شده براي شيء
Set ExcelSheet = Nothing
End Sub
کد بالا را می توانید در یک ماژول استاندارد در یک فایل اکسس یا اکسل ذخیره و اجرا نمایید. می توانید فایل اکسس نمونه را از این لینک دریافت نمایید.
بیشتر بخوانید
توابع توکار VBA | لیست کامل توابع داخلی در ویژوال بیسیک
عملگرهای VBA | انجام عملیات روی داده ها و ایجاد عبارت ها
حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک
دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی
کدهای VBA | آشنایی با کدها و دستور زبان برنامه نویسی VBA
آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی
آموزش پایه VBA | مفاهیم پایه برای شروع برنامهنویسی ویژوال بیسیک
ممنون برای آموزشهای خوب و کاربردی که ارائه می دهید