تیم به درستی اشاره میکند که کاربر میتواند روی یک برگه کاربرگ راست کلیک کند، سپس View Code را انتخاب کند تا یک صفحه کد VBA برای کاربرگ باز شود. او کدی نوشته است که به طور خودکار سلول ها، ستون ها و ردیف ها را دستکاری می کند. این کد باید در هر کاربرگ کتاب کار موجود باشد، حتی اگر کاربر کاربرگهای جدیدی اضافه کند. تیم تعجب می کند که آیا راهی وجود دارد، با استفاده از VBA، کد یک کاربرگ به طور خودکار در یک کاربرگ جدید در کتاب کار کپی شود.
چند راه برای حل این مشکل وجود دارد. یکی از راهها - و شاید سادهترین راه - این است که ماکروها را از صفحه کد کاربرگها حذف کنید و به ماژول ThisWorkbook منتقل کنید. برگه کد کاربرگ همان چیزی است که وقتی روی برگه کاربرگ راست کلیک می کنید می بینید. کد موجود در آن برگه برای رسیدگی به رویدادهایی است که در کاربرگ و فقط در آن کاربرگ رخ می دهد. اگر کد را به ماژول ThisWorkbook منتقل کنید، رویدادها همچنان قابل مدیریت هستند، اما این رویدادها برای همه کاربرگهای کتاب کار اعمال میشوند.
برای مثال، وقتی روی یک برگه کاربرگ راست کلیک میکنید و به پنجره کد نگاه میکنید، ابتدا در رویداد Worksheet_SelectionChange کار میکنید. اگر میخواهید این کد را به ماژول ThisWorkbook منتقل کنید، میتوانید آن را در رویداد Workbook_SheetSelectionChange قرار دهید.
اگر چنین "تغییر سطح" کد شما به دلایلی کار نمی کند، روش دیگر ایجاد یک کاربرگ الگو در کتاب کار است. نامی مانند «MyMaster» به آن بدهید و مطمئن شوید که شامل تمام کدهایی است که میخواهید به کاربرگهای تازه ایجاد شده خود اضافه کنید. شما حتی می توانید این کاربرگ را در صورت تمایل مخفی کنید تا حواس کاربران را پرت نکند. سپس، ماکرو زیر را در ماژول ThisWorkbook قرار دهید:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim tmpName As String
tmpName = Sh.Name
Sheets("MyMaster").Copy Before:=Sheets(Sh.Name)
Application.DisplayAlerts = False
Sheets(Sh.Name).Delete
Application.DisplayAlerts = True
Sheets("MyMaster (2)").Name = tmpName
End Sub
این کد هر بار که یک کاربرگ جدید به کتاب کار اضافه می شود فعال می شود. به نام کاربرگ تازه اضافه شده (که چیزی شبیه "Sheet4" خواهد بود) نگاه می کند و آن نام را در یک متغیر موقت ذخیره می کند. سپس کد کاربرگ MyMaster را در کتاب کار کپی می کند (که ماکروهای موجود در کاربرگ را نیز کپی می کند)، کاربرگ را که در ابتدا ایجاد شده بود حذف می کند و سپس کپی MyMaster جدید را به همان نام کاربرگ اصلی تغییر می دهد.