رایان یک کاربرگ اکسل دارد که باید هر روز برای هر یک از 3 شیفت کاری از آن استفاده کند. او برای هر نوبت، هر روز، بارها و بارها یک کپی از این کاربرگ تهیه می کند. به نظر رایان به نظر می رسد که اگر یک ماکرو داشته باشد که بتواند کاربرگ اصلی را 3 بار برای هر روز در یک ماه کپی کند و کاربرگ ها را "شیفت 1 فوریه 1"، "شیفت 1 فوریه 2" و غیره نامگذاری کند، مفید خواهد بود. او نمی تواند. یک ماکرو برای انجام چنین کاری پیدا کنید و میپرسیدم آیا کسی میتواند کمک کند.
این در واقع آنقدر طول نمی کشد که به عنوان یک ماکرو کنار هم قرار گیرد. ترفند این است که به یاد داشته باشید که ماکرو باید کاربرگ اصلی شما را 3 بار برای هر روز در ماه مورد نظر کپی کند. این همچنین به این معنی است که ماکرو باید تعیین کند که چند روز در ماه وجود دارد. پس از مشخص شدن این موضوع، می توانید دو حلقه تودرتو For...Next را برای مدیریت فرآیند ایجاد واقعی تنظیم کنید.
Sub CopyShiftSheets()
Dim iDay As Integer
Dim iShift As Integer
Dim iNumDays As Integer
Dim wMaster As Worksheet
Dim sTemp As String
iMonth = 2 Set to month desired, 1-12
iCurYear = Year(Now())
iNumDays = Day(DateSerial(iCurYear, iMonth + 1, 0))
Set wMaster = Worksheets("Master") change to name of master
For iDay = 1 To iNumDays
For iShift = 1 To 3
sTemp = MonthName(iMonth) & " " & iDay & " Shift " & iShift
wMaster.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = sTemp
Next iShift
Next iDay
End Sub
توجه داشته باشید که ماه مورد نظر (در این مورد فوریه) به متغیر iMonth و iCurYear روی سال جاری تنظیم شده است. سپس تعداد روزهای آن ماه و سال در iNumDays محاسبه و ذخیره می شود.
دو حلقه For...Next هر روز و هر شیفت را طی میکنند و کاربرگ Master را کپی کرده و نام آن را تغییر میدهند. وقتی کارتان تمام شد، کتاب کار شما همه کاربرگ های مورد نظر را دارد که به درستی نامگذاری شده اند. با این حال، باید مراقب باشید که ماکرو را دو بار برای یک ماه اجرا نکنید. اگر این کار را انجام دهید، خطایی ایجاد میشود زیرا کاربرگهایی با نام تکراری در کتاب کار خواهید داشت.