VBA یک زبان Object Oriented میباشد که مهمترین قسمت آن آدرس دهی در VBA میباشد. به عبارت دیگر تعدادی Object وود دارد که شما قادر به تغییر دادن ویژگیهای مربوط به آن میباشید. در VBA برعکس زبان انگلیسی و همانند زبان فارسی ابتدا شی قرار میگیرد و بعد از آن عمل انجام گرفته گفته میشود (بین شی و عمل ” . ” قرار میگیرد) یعنی اگر بخواهیم بگوییم توپ را بزن در انگلیسی میگوییم Kick the ball ولی در VBA گفته میشود Ball.Kick
Object ها دارای ساختار سلسله مراتبی میباشند و در راس Object ها، خود اکسل قرار دارد و با Application نمایش داده میشود ولی عمدتا نیاز به استفاده از این Object نمیباشد.از Object های زیر شاخه آن میتوان موارد Addin, Window, Workbook, Worksheetfunction را نام برد که از بین آنها Workbook و Worksheetfunction پر کاربردترین میباشند.
Workbook
در نسخه ۲۰۱۳ اکسل میتوانید به صورت همزمان تعداد زیادی Workbook باز نمایید ولی به ازای تمامی آنها فقط یک VBE باز میباشد لذا در هنام برنامهنویسی بسیار مهم است که کدام یک از اکسل ها فعال میباشند. اگر به صورت همزمان دو کارپوشه با نامهای Book1.Xlsx و Book2.Xlsx باز باشند، جهت آماده سازی Book1.Xlsx به منظور انجام فعالیتها از کد زیر استفاده میشود.( لازم به ذکر است که جهت انجام تغییرات نیازی به فعال سازی Woorkbook مد نظر نمیباشد و میتوانید آدرس ها را به صورت کامل بدهید ولی در حالتی که تعدادی عملیات پشت سرهم بر یک WorkBook صورت میگیرد بهتر است که آن WorkBook فعال باشد)
Workbooks(“book1.xlsx”).Activate
حالت دیگر آدرس دهی به Workbook استفاده از حالت زیر میباشد که در این حالت ترتیب Workbook ها بسیار مهم میباشد.
Workbooks(2).Activate
جهت ایجاد یک Workbook جدید از کد زیر استفاده میشود
Workbooks.Add
به منظور بستن Book1.Xlsx از کد زیر استفاده میشود.
Workbooks(“book1.xlsx”).close
البته اگر قبل از بستن، فایل ذخیره نشده باشد از کاربر انجام ذخیرهسازی را سوال میپرسد.
به منظور فهمیدن و چک کردن Workbook فعال میتوان نام آن را سوال کرد.
Workbooks(2).Name
کد زیر محل ذخیرهسازی فایل Book1.Xlsx را به دست میآورد.
Workbooks(“book1.xlsx”).Path
به منظور ذخیرهسازی Book1.XLsx میتوان از دو حالت Save ، Saveas و یا Savecopyas در انتهای آن استفاده نمود، مثلا به منظور ذخیرهسازی Book2.Xlsx در همان مسیر با اسم Book10.Xlsx میتوان از کد زیر استفاده نمود.
Workbooks(“book2.xlsx”).savecopyas workbooks(“book2.xlsx”).Path _
& “\Book10.xlsx”
در کد فوق به منظور زیبا شدن و طولانی نشدن کد از دو خط جهت برنامهنویسی استفاده شده است که در این حالت با قرار دادن فاصله و _ میتوان Enter زده و ادامه کد را در خط بعدی نوشته.
برای Workbook تعداد زیادی Property و Method وجود دارد که در قسمت فوق به تعدادی از پرکاربرد ترین آنها اشاره شد، در طول مثالهای آینده به سایر آنها اشاره خواهد شد.
Worksheet
Workbook دارای زیر مجموعههای فراوانی از جمله Window, Chart, Worksheet و .. میباشد. از این بین Worksheet یکی از مهمترین آنها میباشد که در زیر به آن پرداخته شده است.
به منظور فعال سازی Sheet1 در Book1.Xlsx از کد زیر استفاده میشود.
Workbooks(“book2.xlsx”).Worksheets(“sheet1”).Select
در کد فوق اگر کاربرگی تحت عنوان Sheet1 وجود نداشته باشد، در زمان اجرا برنامه خطا میدهد، به منظور رفع مشکل فوق میتوان از دستور زیر استفاده نمود که البته این دستور نسبت به ترتیب کارپوشهها حساس است و در صورت جابهجا شدن آنها، ممکن است نتایج اشتباه به بار آورد.
Workbooks(“book2.xlsx”).Worksheets(1).Select
میتوان کد فوق را با حالت زیر جایگیزین نمود:
Workbooks(“book2.xlsx”).Sheets(1).Select
تفاوت Sheets با Worksheets در این است که Sheet شامل Worksheetها و ChartSheet ها میشود.
در صورتی که بدانیم Book1.Xlsx فعال میباشد، دیگر نیازی به آدرس دهی Workbook نمیباشد و میتوان کدهای فوق را به صورت زیر نوشت.
Worksheets(1).Select
جهت تغییر نام اولین Sheet به نام data base از کد زیر استفاده میشود.
Sheets(1).Name = “Data Base”
به منظور اضافه کردن یک Sheet جدید به نام data base در ابتدای تمامی Sheet ها از دستور زیر استفاده میشود.
ThisWorkbook.Worksheets.Add before:=Worksheets(1)
ActiveSheet.Name = “Data Base”
که در این دستور، قسمت Worksheets.Count تعداد Sheet های موجود را بیان میکند.
برای بهتر شدن کد بالا، میتوان ابتدا نام Sheet جدید را از کاربر پرسیده و سپس آن را اضافه نماید (به صورت زیر)
Attribute VB_Name = “Module1”
Dim sheet_name As String
sheet_name = InputBox _
(“لطفا نام مورد نظر برای شیت جدید را وارد نمایید”, “نام شیت”)
ThisWorkbook.Worksheets.Add before:=Worksheets(1)
ActiveSheet.Name = sheet_name
در کد بالا، اگر زمانی که از کاربر درخواست نام جدید میشود، کاربر کلید Cancel را بزند، در انتها برنامه Error میدهد و از نام پیش فرض برای Sheet جدید استفاده میکند (در بخش Error Handeling به این بحث میپردازیم(
جهت پاک کردن Sheet فعال، میتوان دستور زیر استفاده نمایید
ActiveSheet.Delete
ولی بعد از اجرای این دستور، از کاربر پرسیده میشود آیا میخواهید این Sheet پاک گردد، به منظور عدم نمایش این پیغامها به کاربر، میتوان در ابتدای روال، دستور زیر را به کار برد.
Application.DisplayAlerts = False
جهت پنهان کردن Sheet فعال، از دستور Visible، همانند زیر استفاده میگردد.
ActiveSheet.Visible = False