در کدنویسی ویژوال بیسیک در بسیاری موارد پیش می آید که برنامه نویس فایل اکسلی با چند شیت دارد که میخواهد در هریک از این شیت ها عملیات بخصوصی انجام دهد، و یا ممکن است چند فایل اکسل به صورت همزمان برای انجام عملیات خاصی مورد استفاده قرار گیرند، در اینجا باید برنامه نویس از کدهای خاصی استفاده نماید که مشخص شود کدهای دستوری نوشته شده در کدام فایل اکسل (Workbook) و یا کدام شیت (Worksheet) اجرا شوند، برای این کار از متدهای Select و Activate و از پروپرتی Selection استفاده مینماییم.
متد Select و پروپرتی Selection
با استفاده از متد Select (Select Method) میتوان اشیا و شیت ها را فعال کرد، از طرفی پروپرتی Selection (Selection Property) اشیا یا شیت های فعال شده را مورد اشاره قرار میدهد. پیش از آنکه بتوانید از پروپرتی Selection استفاده نمایید باید یک Workbook یا Worksheet را Activate کرده و بعد یک Worksheet، Range و یا شی را Select نمایید، یعنی در هر صورت حتماً قبل از استفاده از Selection باید از متد Select استفاده کنید.
در کدهای زیر با نحوه ی کاربرد و برخی از کاربردهای Select، Selection و Activate آشنا میشویم.
1 2 3 4 5 6 7 8 9 |
Sub Macro1() Sheets("Sheet1").Select Range("A1").Select ActiveCell.FormulaR1C1 = "Name" Range("B1").Select ActiveCell.FormulaR1C1 = "Address" Range("A1:B1").Select Selection.Font.Bold = True End Sub |
کدهای زیر همان کارهای بالا را بدون استفاده از Select و Activate انجام میدهند.
1 2 3 4 5 6 7 |
Sub Labels() With Worksheets("Sheet1") .Range("A1") = "Name" .Range("B1") = "Address" .Range("A1:B1").Font.Bold = True End With End Sub |
اگر شما از Select برای انتخاب یک سلول استفاده نمایید، بدانید سلول های موجود در شیت فعال انتخاب میشوند، نکته ی مهم اینجاست که اگر شما اجرای برنامه را از محیط ویژوال بیسیک شروع نمایید، در واقع هیچ شیت فعالی وجود ندارد، پس اجرای برنامه پس از Select یک سلول به دلیل عدم وجود شیت فعال متوقف میشود.
بنابراین حتماً در کد نویسی های خود قبل از نوشتن کدهای دستوری مشخص نمایید که کدام شیت باید فعال باشد.
1 2 3 4 5 6 |
Sub CopyRow() Worksheets("Sheet1").Rows(1).Copy Worksheets("Sheet2").Select Worksheets("Sheet2").Rows(1).Select Worksheets("Sheet2").Paste End Sub |
متد Activate
میتوانیم از متد Activate برای Activate کردن یک سلول قرار گرفته در یک محدوه ی Select شده انتخاب کرد، حتی اگر یک محدوده شامل چندین سلول Select شده باشد، تنها یک سلول Activate میگردد. در کدهای زیر یک محدوده Select شده است و بدون تغییر Selection یک سلول Activate میگردد.
1 2 3 4 5 |
Sub MakeActive() Worksheets("Sheet1").Activate Range("A1:D4").Select Range("B2").Activate End Sub |
ActiveCell در ویژوال بیسیک
پروپرتی ActiveCell یک شی Range (شامل یک سلول، اگر یک محدوده فعال باشد-در حالت انتخاب باشد-تنها سلول اول آن محدوده Activate میشود) را که نماینده سلول های فعال (انتخاب شده) میباشد را برمیگرداند. در این حالت شما میتوانید تمام Property ها و Method های قابل استفاده برای Range ها را برای ActiveCell به کار ببرید.
به خاطر داشته باشید تنها هنگامی میتوانیم از Active Cell استفاده نماییم که شیت در برگیرنده ی آن Activate باشد.
1 2 3 4 |
Sub SetValue() Worksheets("Sheet1").Activate ActiveCell.Value = 35 End Sub |
1 2 3 4 5 |
Sub SetActive() Worksheets("Sheet1").Activate Worksheets("Sheet1").Range("B5").Activate ActiveCell.Font.Bold = True End Sub |
متد Active Cell تنها برای انتخاب یک سلول به کار میرود در صورتی که نیاز به انجام عملیات بر روی یک محدوده از سلول ها را دارید میتوانید از متد Select استفاده نمایید.
برای جابجایی Active Cell میتوانید از پروپرتی Offset استفاده نماییم، فرض کنید میخواهید بر یک سلول بخصوص که شرایط خاصی دارد (در مثال زیر اگر مقدار آن بزرگتر از ۵۰ باشد) عملیاتی انجام دهید، مثلاً فونت سلولی که مقدار آن بزرگتر از صفر است را Bold کنید و در سلول کناری آن علامتی قرار دهید که پیدا کردن آ سلول را برای کاربران راحت تر نماید، میتوانید از کدی مشابه کد زیر استفاده نمایید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub MoveActive() Dim Counter Worksheets("Sheet1").Activate Range("C1:C100").Select Selection.Value = "=int(100*Rand())” For Counter = 1 To 100 Worksheets("sheet1").Cells(Counter, 3).Activate If ActiveCell.Value > 55 Then ActiveCell.Font.Bold = True ActiveCell.Offset(0, -1).Activate ActiveCell.Value = "ExcelPro.ir" End If Next End Sub |
در کدهای بالا ابتدا سلولهای C1:C100 انتخاب شده اند و در آنها عدد رندومی بین ۱ تا ۱۰۰ قرار داده شده است، بعد از آن سلول هایی که در آنها عدد بیشتر از ۵۵ قرار دارد را نتخاب نموده ایم و فونت آن سلول را Bold کرده ایم و در سلول مجاور آن عبارت ExcelPro.ir را نوشته ایم.
Current Region در ویژوال بیسیک
از Current Region میتوان برای Activate کردن سلول اول از محدوده ی انتخاب شده در یک شیت همانند کد زیر استفاده نمود، لازم به ذکر است کلاً در صورتی که از Activate استفاده نماییم تنها یک سلول انتخاب میشود و برای انتخاب همزمان چند سلول باید از Select استفاده نماییم.
1 2 3 4 5 |
Sub Region() Worksheets("Sheet1").Activate ActiveCell.CurrentRegion.Select Selection.Value = "ExcelPro.ir" End Sub |
استفاده از پروپرتی Area
از پروپرتی Areas میتوانید برای اشاره به یک محدوده ی انتخاب شده (مثلاً A1:C2) و یا چند محدوده ی انتخاب شده (مثلاً A1:C2 و C5:E8) استفاده نمود.
در کل Areas به هر محدوده از اکسل که در حالت انتخاب وجود دارد اطلاق میشود، محدوده ی انتخاب شده میتواند یک سلول و یا چند سلول باشد.
کد زیر تعداد محدوده های انتخاب شده را گزارش میدهد.
1 2 3 4 |
Sub NOAreas() Worksheets("Sheet1").Activate Cells(1, 1).Value = Selection.Areas.Count End Sub |
1 2 3 4 5 |
Sub FindMultiple() If Selection.Areas.Count > 1 Then MsgBox "Cannot do this to a multiple selection." End If End Sub |
ممنون از آموزش عالیتون
بسیار عالی بود
تشکر فراوان