در آموزش قبل با مجموعه Worksheets در VBA آشنا شدیم و یاد گرفتیم که چطور با استفاده از آن می توانیم یک ماکرو برای افزودن یک صفحه جدید (sheet) به اکسل با استفاده از VBA بنویسیم. در این آموزش می خواهیم نحوه کپی کردن صفحه/کاربرگ (sheet) با استفاده از این مجموعه را یاد بگیریم.
مدت زمان تخمینی مطالعه: 5 دقیقه
فهرست مطالب
متد Copy مجموعه Worksheets
در آموزش های قبل گفتیم که مجموعه Worksheets در VBA همانطور که از نام آن نیز پیدا می باشد، تمامی صفحات موجود در یک workbook را نگهداری می نماید. متد Copy یکی از متدهای پرکاربرد این مجموعه می باشد. با استفاده از این متد می توانید یک صفحه/کاربرگ را بطور کامل کپی و در کتاب کار جاری اکسل یا یک کتاب کار دیگر بچسبانید (paste کنید).
مستندات متد Copy مجموعه Worksheets
دستور متد Copy
expression.Copy (Before, After)
expression در کد بالا بایستی یک شیء باشد که به مجموعه Worksheets اشاره داشته باشد.
عنوان | اجباری/اختیاری | نوع داده | توضیحات |
---|---|---|---|
Before | اختیاری | Variant | یک شیء صفحه (worksheet) است که صفحه ای را که بایستی صفحه جدید قبل از آن اضافه شود را مشخص می نماید. در صورتی که After مشخص شده باشد نمی توان این پارامتر را تعیین نمود. |
After | اختیاری | Variant | یک شیء صفحه (worksheet) است که صفحه ای را که بایستی صفحه جدید بعد از آن اضافه شود را مشخص می نماید. در صورتی که Before مشخص شده باشد نمی توان این پارامتر را تعیین نمود. |
نوشتن ماکروی کپی کردن صفحه/کاربرگ (sheet) در اکسل
1. کپی کردن صفحه/کاربرگ (sheet) در کارصفحه فعلی (workbook) اکسل
این حالت زمانی کاربرد دارد که می خواهید در فایلی که ماکرو را در آن می نویسید یک صفحه را کپی نمایید.
تعیین متغیر workbook
در این بخش متغیری که مشخص کننده workbook باشد را تعیین می نماییم. برای این کار کد زیر را به ماکروی خود اضافه نمایید.
Dim wb As Workbook
Set wb = ThisWorkbook
در خط اول متغیر موردنیاز را اعلان کردیم و در خط دوم مرجع متغیر را با استفاده از دستور Set روی ThisWorkbook (که نماینده فایل اکسل ماکرو می باشد) تنظیم کرده ایم. دقت داشته باشید که هر جا که نوع متغیر یک نوع شیء باشد نمی توانیم متغیر را با استفاده از عملگر = مقدار دهی یا assign نماییم. در این موارد حتما بایستی از دستور Set استفاده نماییم.
کپی صفحه
حالا با استفاده از خاصیت Worksheets شیء ThisWorkbook که توسط متغیر wb به ارث برده شده است می توانیم کاربرگی را که می خواهیم کپی نماییم. مجموعه Worksheets علاوه براینکه یک شیء می باشد، مشابه یک آرایه نیز عمل می نماید. به این صورت که با انتخاب نام یا Index هر کاربرگ در می توانیم مشخص کنیم که کدامیک از اعضای مجموعه Worksheets را نیاز داریم.
به مثال زیر توجه نمایید:
Dim sh As Worksheet
Set sh = wb.Workbooks(1)
Set sh = wb.Workbooks("sheet1")
Set sh = wb.Workbooks("vba")
در خط 1 کد بالا یک متغیر کاربرگ (sh) معرفی نموده ایم.
در خط 2 با استفاده از مجموعه Worksheets کاربرگی که در این مجموعه با Index شماره 1 ذخیره شده است به عنوان مرجع متغیر sh تعیین کرده ایم.
در خط 3 و 4 با استفاده از نام صفحه/کاربرگ مرجع متغیر sh را تعیین کرده ایم.
حال برای کپی صفحه ای به نام iranvba
می توانیم از دستور زیر استفاده نماییم.
Worksheets("iranvba").Copy After:=Worksheets("vba is fun")
کد بالا صفحه iranvba
را بعد از صفحه ای به نام vba is fun
کپی می نماید. در این کد مجموعه Worksheets بدون تعیین workbook آن بکار رفته است و در واقع Worksheets
در این کد به معنای ThisWorkbook.Worksheets
می باشد. کامل شده این کد، کد زیر است.
Dim wb As Workbook
Dim sh_1 As Worksheet
Dim sh_2 As Worksheet
Set wb = ThisWorkbook
Set sh_1 = wb.Worksheets("iranvba")
Set sh_2 = wb.Worksheets("vba is fun")
sh_1.Copy After:=sh_2
2. کپی کردن صفحه/کاربرگ (sheet) در کارصفحه (workbook) دیگر اکسل
برای کپی کردن صفحه اکسل در اکسل دیگر کافیست یکی از آرگومان های Before یا After را با استفاده از مجموعه Worksheets کارصفحه جدید تکمیل نماییم. ماکروی زیر صفحه iranvba
را از کارصفحه فعلی اکسل بعد از اولین صفحه کارصفحه ای بنام test-2.xlsx
کپی می نماید.
Sub copySheetToAnotherWb()
Dim wb_1 As Workbook
Dim wb_2 As Workbook
Dim sh_1 As Worksheet
Dim sh_2 As Worksheet
Set wb_1 = ThisWorkbook
Set wb_2 = Excel.Workbooks.Open(ThisWorkbook.Path & "/test-2.xlsx")
Set sh_1 = wb_1.Worksheets("iranvba")
Set sh_2 = wb_2.Worksheets(1)
sh_1.Copy After:=sh_2
End Sub