کپی کردن صفحه/کاربرگ (sheet)

در آموزش قبل با مجموعه Worksheets در VBA آشنا شدیم و یاد گرفتیم که چطور با استفاده از آن می توانیم یک ماکرو برای افزودن یک صفحه جدید (sheet) به اکسل با استفاده از VBA بنویسیم. در این آموزش می خواهیم نحوه کپی کردن صفحه/کاربرگ (sheet) با استفاده از این مجموعه را یاد بگیریم.

مدت زمان تخمینی مطالعه: 5 دقیقه

آیا می‌دانید:

با یادگیری ماکرونویسی و تسلط بر دستورات VBA در اکسل، شما می‌توانید کارهای پیچیده را به‌طور خودکار انجام دهید؛ به‌طوری که با استفاده از ویژوال بیسیک، می‌توانید کدهای کاربردی و نمونه‌های موثر ایجاد کرده و در راستای بهبود کارایی و سرعت انجام وظایف خود از آن‌ها بهره‌برداری کنید و به این ترتیب، بهره‌وری و دقت خود را افزایش دهید.

متد 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 را تعیین کرده ایم.

با توجه به مثال بالا متوجه می شویم که مجموعه Worksheets، مجموعه ای از اشیاء‌ صفحه/کاربرگ موجود در کارصفحه/workbook می باشد. این مجموعه در VBA بطور خودکار شیء مربوط به تمامی کاربرگ ها را به ترتیب Index هر یک در خود قرار می دهد.

حال برای کپی صفحه ای به نام 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

دانلود فایل اکسل آموزش

بیشتر بخوانید…

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