اشیاء اکسل در یک پروژه VBA اکسل بطور کلی دو نوع صفحه و کاربرگ تقسیم می شوند. در این آموزش موارد کاربرد اشیاء اکسل در ماکرونویسی را بررسی می نماییم.
فهرست مطالب
اشیاء اکسل در VBE
اشیاء اکسل در پنجره مرور پروژه ویرایشگر VBE در پوشه Microsoft Excel Objects نمایش داده می شوند. اما این اشیاء چه هستند و چرا شیء نامیده می شوند.
معرفی اشیاء اکسل
اشیاء اکسل، شیءهایی هستند که توسط مایکروسافت برنامه نویسی و ایجاد شده اند. این اشیاء بخشی از کتابخانه [1] Excel می باشند. این اشیاء برای هر فایل اکسل بطور خودکار ایجاد و در پوشه Microsoft Excel Objects قرار داده می شوند.
در برنامه نویسی شیءگرا هر شیء یک نمونه جدید از یک کلاس می باشد. مایکروسافت کتابخانه و کلاس لازم را در معماری اکسل ایجاد کرده است. وقتی که یک فایل اکسل ایجاد می کنید VBA برای راحتی کار اشیاء موردنیاز (کاربرگ و صفحه) را از کلاس مرتبط با آن (کلاس Worksheet و Workbook) ایجاد می کند.
یک صفحه اکسل را در نظر بگیرید، مایکروسافت تمامی خصوصیات و رفتار یک صفحه اکسل (شامل سلول ها، ایجاد سطرها، ستون ها و …) را در کلاسی بنام Worksheet در کتابخانه Excel تعریف و ایجاد کرده است.
هر وقت که یک صفحه جدید به فایل اکسل خود اضافه می کنید VBA بصورت خودکار یک شیء جدید از این کلاس ایجاد می کند و در پوشه Microsoft Excel Objects ویرایشگر VBE قرار می دهد.
شیء صفحه جدید ایجاد شده بطور خودکار تمامی خصوصیات و متدهای کلاس Worksheet را به ارث می برد.
کاربرد اشیاء اکسل
اشیاء اکسل بطور مستقیم به فایل اکسلی که ماکرو در آن ذخیره شده است مرتبط می باشند. مهمترین کاربرد اشیاء اکسل مدیریت رخدادها (Events) در فایل اکسل فعلی می باشد.
بعنوان مثال با استفاده از این اشیاء می توانید وقتی که کاربرگ اکسل را باز می کنید یک پیغام خوش آمدگویی برای کاربر ارسال نمایید، یا وقتی که کاربر در یک صفحه مقدار یک سلول را تغییر داد، رنگ آن را تغییر دهید.
گفتیم که هر شیء اکسل یک نمونه از کلاس مرتبط با آن می باشد، با توجه به ماهیت کلمه کلیدی Me در VBA این کلمه کلیدی در کد این اشیاء به شیء موردنظر اشاره خواهد داشت. توضیحات تکمیلی درباره کلمه کلیدی Me را می توانید در این صفحه مشاهده نمایید.
در ادامه کاربرد اشیاء اکسل برای ایجاد و ذخیره ماکروها را جداگانه بررسی می نماییم.
ماکرونویسی در اشیاء صفحه اکسل (Worksheet)
شیء صفحه اکسل در هر پروژه VBA به طور خودکار به تعداد صفحاتی که در فایل اکسل وجود دارد ایجاد می شود.
هر شیء صفحه مستقیماً به یک صفحه در فایل اکسل پروژه مرتبط می باشد.
در تصویر مقابل شیء Sheet1 مرتبط با صفحه 1 و شیء Sheet2 مرتبط با صفحه 2 فایل اکسل پروژه Book1.xlsm می باشند.
اگر صفحه جدیدی در فایل اکسل ایجاد کنید، بطور خودکار زیر این لیست اضافه خواهد شد.
برای نوشتن رخداد یا ماکرو در هر شیء صفحه روی آن دو بار کلیک نمایید تا پنجره کد مربوط به آن نمایش داده شود.
مثال 1 : رخداد تغییر رنگ فونت پس از تغییر مقدار سلول
کد زیر را در شیء Sheet1 (صفحه 1)
کپی نمایید، هر وقت مقدار یکی از سلول هایی که در صفحه 1 اکسل قرار دارد تغییر کند رنگ فونت آن بطور خودکار آبی خواهد شد.
Private Sub Worksheet_Change(ByVal Target as Range)
Target.Font.ColorIndex = 5
End Sub
مثال 2 : ماکروی انجام تکرار با استفاده از حلقه For
کد زیر را در شیء Sheet1 (صفحه 1)
کپی نمایید، این کد بطور خودکار مقدار سلول ها اول تا دهم ستون A را به طور خودکار تکمیل و رنگ پس زمینه آن ها را سبز می کند.
Public Sub sheetMacro()
For i = 1 To 10
Me.Cells(i, 1) = "سلول" & i
Me.Cells(i, 1).Interior.ColorIndex = 4
Next
End Sub
در کد بالا کلمه کلیدی Me به صفحه ای از اکسل که کد در شیء آن نوشته شده یعنی صفحه 1
اشاره دارد.
ماکرونویسی در شیء ThisWorkbook
شیء ThisWorkbook در یک پروژه VBA در اکسل به کاربرگی که پروژه در آن ذخیره شده است. با استفاده از این شیء می توانید رخدادهای مربوط به کاربرگ را مدیریت کنید و یا در کد آن ماکرونویسی انجام دهید.
وقتی که در شیء ThisWorkbook یک ماکرو بنویسید کارکرد کلمه کلیدی Me عوض می شود و بجای یک صفحه به کاربرگ اکسل اشاره خواهد داشت.
مثال 1 : رخداد نمایش پیغام به کاربر وقتی که فایل اکسل باز می شود
اگر کد زیر را در شیء ThisWorkbook یک فایل اکسل کپی و ذخیره نمایید، کاربر وقتی که فایل را باز کند پیغام خوش آمدگویی “به ایران وی بی ای خوش آمدید” را مشاهده خواهد کرد.
Private Sub Workbook_Open()
MsgBox "به ايران وي بي اي خوش آمديد", vbInformation + vbMsgBoxRtlReading
End Sub
مثال 2 : ماکروی ایجاد پنج صفحه جدید پس از صفحه دوم فایل اکسل فعلی
کد زیر را در شیء ThisWorkbook یک پروژه VBA اکسل کپی و سپس اجرا نمایید. این کد بطور خودکار 5 صفحه جدید بعد از دومین صفحه ایجاد خواهد کرد.
Public Sub ThisWorkbookMacro()
Me.Sheets.Add after:=Me.Sheets(2), Count:=5
End Sub
Me در کد بالا به کاربرگ اکسل اشاره دارد و خواص و متدهای آن را به ارث برده است.
وبلاگ عالی است. خیلی سپاسگزارم.