هنگام سازماندهی داده ها در کتاب های کاری، کپی کردن کاربرگ ها از یک کتاب کار به کتاب دیگر غیر معمول نیست. در واقع، دستور Move یا Copy Sheet (وقتی روی برگه کاربرگ راست کلیک میکنید قابل مشاهده است) یکی از مواردی است که من اغلب از آن استفاده میکنم، و حاضرم شرط ببندم که دیگران به همان اندازه از آن استفاده کنند.
پس چگونه می توان کاربرگ ها را در یک ماکرو کپی کرد؟ پاسخ این است که از روش کپی با یک کاربرگ جداگانه یا گروهی از کاربرگ استفاده کنید. به عنوان مثال، کد ماکرو زیر کاربرگ انتخاب شده فعلی را در یک کتاب کار جدید کپی می کند:
ActiveSheet.Copy
خودشه؛ یک خط تنها چیزی است که برای کپی کردن کاربرگ در یک کتاب کار جدید و بدون نام لازم است. پس از اجرای خط، Workbook جدید انتخاب می شود و می توانید با استفاده از کدی مشابه زیر آن را ذخیره کنید. خط اول کد کتاب کار را ذخیره می کند و خط دوم آن را می بندد.
ActiveWorkbook.SaveAs Filename:="MyNewFile.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled
ActiveWindow.Close
اگر میخواهید یک برگه خاص را در کتاب کار دیگری کپی کنید، به جای استفاده از شی ActiveSheet، این کار را با تعیین نام برگهای که میخواهید کپی کنید، انجام دهید:
Sheets("Sheet1").Copy
این مثال کاربرگ به نام Sheet1 را از مجموعه Sheets در یک کتاب کار جدید کپی می کند. سپس می توانید کتاب کار جدید را همانطور که قبلاً بحث شد ذخیره کنید.
روش کپی، زمانی که با کاربرگ ها استفاده می شود، محدود به کپی کردن یک برگه در یک زمان نیست. اگر گروهی از برگهها را انتخاب کردهاید، همچنان میتوانید از یک خط فرمان برای کپی کردن همه آنها در یک کتاب کار جدید استفاده کنید. این همان کاری است که در این ماکرو انجام می شود:
Sub CopyWorkbook()
Dim sCopyName As String
sCopyName = "My New Workbook.xlsm"
SelectedSheets.Copy
ActiveWorkbook.SaveAs Filename:=sCopyName, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
به استفاده از دستور Copy توجه کنید. ماکرو چه یک کاربرگ انتخاب کرده باشید چه پنجاه برگه کار خواهد کرد. مهم نیست اگر میخواهید همه کاربرگها را از یک کتاب کار به کتاب دیگر کپی کنید، تنها کاری که باید انجام دهید این است که یک تغییر واحد در ماکرو، در خطی که متد Copy فراخوانی میشود، انجام دهید:
Sheets.Copy
این کل مجموعه Sheets را کپی می کند، که شامل تمام کاربرگ های کتاب کار است.
لازم به ذکر است که روش Copy فقط برای کپی کردن کاربرگ ها در یک کتاب کار جدید نیست. همچنین می توان از آن برای کپی صفحات کاری در همان کتاب کار استفاده کرد. تنها کاری که باید انجام دهید این است که مشخص کنید کجا در کتاب کار فعلی میخواهید کپی کنید:
ActiveSheet.Copy After:=Sheets("Sheet7")
این خط کد کاربرگ فعال را در همان کتاب کار کپی می کند تا بعد از کاربرگ به نام Sheet7 ظاهر شود. اگر برای نیازهای شما مناسبتر است، میتوانید برگهای را که نسخه قبل از آن قرار میگیرد را مشخص کنید:
ActiveSheet.Copy Before:=Sheets("Sheet7")
این باعث می شود که کاربرگ قبل از Sheet7 به جای بعد از آن قرار گیرد.