در این درس بعدز مقدمه ای راجع به Object Hierarchy در اکسل به سراغ معرفی دو شی پایه ای اکسل می رویم ، Workbook و Worksheet که متد ها و فیلد های مختلفی را از آنها به شما معرفی خواهیم کرد.

سلسله مراتب اشیا در اکسل‌

مبحثی که لازم است به درس قبل اضافه شود ، سسله مراتب اشیا در اکسل است! در اکسل اشیا زیر مجموعه هم دیگر هستند، مثلا واضح است که شی شیت (sheet) شامل شی رنج (range)باشد!

اولین شی به نام Application است که خود شامل Workbook یا همان فایل اکسل است که آن ها خود شامل شی هایی از Worksheet  است که خود Worksheet  ها نیز شامل شی هایی به نام range هستند.

در درس اول اسکریپت نویسی ما با نوشتد کد زیر برای رویداد کلیک روی دکمه این کد را اجرا کردیم و نتیجه درج عبارت Hello در خانه A1 شد:

 Range("A1").Value = "Hello"

اما در واقع کد خلاصه بود! کد کاملی که باید می نوشتیم کد زیر بود:

 

Application.Workbooks("create-a-macro").Worksheets(1).Range("A1").Value = "Hello"

یک توضیح گیج کننده:

شی اپلیکیشن متدی با نام Workbooks دارد که Workbook های باز را پیدا می کند و از او میخواهیم شی Workbooks با نام فایل “create-a-macro” را برای ما پیدا کند و شی پیدا شده چون از جنس ورکبوک است متدی به نام Worksheets دارد و از او میخواهیم شی شیت اول را به ما بدهد و او نیز اولین شیت را به ما میدهد و چون شی شیت خود متدی به نام Range که برای ما شی های رنج را پیدا میکند آن را صدا میزنیم و از او مخواهیم رنج A1 را به ما بدهد و شی رنج A1 را که پیدا کردیم درون فیلدی از او با نام Value  مقدار hello را میریزیم! 🙂

واضح تر:

 

Application.Workbooks("create-a-macro").Worksheets(1).Range("A1").Value = "Hello"

از اپلیکیشن با متدی که درون آن هست میخواهیم که ورک بوک ما را با اسم فلان به ما بدهد و نامی به آن میدهیم تا ان را گم نکنیم

Dim wb= Application.Workbooks("create-a-macro")

از ورکبوک پیدا شده که نامی به آن داده بودیم میخواهیم که شیت اول را برای ما پیدا کند و به آن هم نامی می دهیم

Dim ws= wb.Worksheets(1)

از شیت پیدا شده میخواهیم که رنج مرود نظر را به ما بدهد و به آن نامی می دهیم.

Dim r= ws.Range("A1")

 

خب حالا r به خانه a1 اشاره میکند که شی ای از جد رنج است این شی فیلدی به نام value دارد که هر چیزی درون آن بریزیم آن چیز درون خانه A1 قرار میگیرد.

البته به کد های بالا که نگاه کنید متوجه خواهید شد که Worksheets هم متدی برای شی ورک بوک بود که شیت های زیر مجموعه آن را در خروجی به ما میداد

حالا با نوشته کد r.value=”HELLO” میتوانیم کد را به پایان برسانیم!

اما بهتر است کد را به صورت خلاصه بنویسیم زیرا با شی های ورک شیت و ورک بوک و .. کاری نداریم که برای آن ها اسم بگزاریم تا گم نوشند! بزاریم گم بشوند 🙂 مشکلی نیست 🙂

 

اما یک سوال×؟

چگونه کد Application.Workbooks(“create-a-macro”).Worksheets(1).Range(“A1”).Value = “Hello” به کد Range(“A1”).Value = “Hello” تبدیل میشود؟

اگر خاطرتان باشد ما کد را درون editor در قسمت sheet1 نوشتیم! پس الان دورن شیت ۱ هستیم و لازم نیست آن شیت را پیدا کرده و بعد متند Range آن را صدا کنیم تا برایمان خانه مورد نظر را پیدا کند! همین که بنویسیم Range این متد برای شیی که الان درونش هستیم اجرا می شود!

 

مجموعه ها

Workbooks و Worksheets در واقع مجموعه هستند! یعنی Workbooks شامل تمامی فایل های اکسل باز است و Worksheets شمال تمامی شیت های درون آن ورک بوک است.

راه های فراخوانی یک شیت:

با استفاده از نام شیت:

Worksheets("Sales").Range("A1").Value = "Hello"

با استفاده از ردیف شیت (َیت اول، شیت دوم و …):

Worksheets(1).Range("A1").Value = "Hello"

با استفاده از codename شیت(درون محیط ادیتور در ستون سمت چپ Codename هر شیت آماده بود):

Sheet1.Range("A1").Value = "Hello"

 

استفاده از codename ایمن تر است، زیرا که به خیال راحت جای شیت ها را تغییر دهید و نام آنها را تغییر دهید اما کدتان خراب نمی شود.

 

متد ها و فیلد ها

مانند درس اول یک دکمه بسازید و درون کد آن کد زیر را بنویسید.

Workbooks.Add

این متد برای مجموعه Workbooks یک ورکبوک جدید می سازد.

 

اگر این متد را برای مجموعه Worksheets استفاده می کردیم یک شیت جدید ساخته می شد.

 

فیلد Count هم تعداد در به ما می دهد، تعداد اگر روی Worksheets استفاده کنیم تعداد شیت ها و اگر روی Workbooks استفاده کنیم تعداد فایل های باز اکسل

MsgBox Worksheets.Count

نتیجه کد:

 

 

درباره نویسنده

سید حامد موسوی

مهندس برق - مخابرات و در زمینه های طراحی مدارت الکترونیکی ، مخابراتی، برنامه نویسی چند رسانه ای ، طراحی وب ، اندروید ، نریشن و گرافیک فعالیت دارم.

متن نظر