دیوید یک کتاب کار دارد که شامل 53 کاربرگ است. اولین کاربرگ "Master" نام دارد و حاوی داده هایی در محدوده B1:B52 است. او میخواهد تحت کنترل ماکرو، سلول B1 را به سلول A2 در Sheet2، سلول B2 را به سلول A2 در Sheet3، سلول B3 را به سلول A2 در Sheet4، و غیره کپی کند. .
به منظور درک بهتر نحوه برخورد با این کار، مفید است (نه، حیاتی) که بدانید چگونه کاربرگ های فردی در VBA مدیریت می شوند. بخش مهم این است که هر کاربرگ بخشی از یک مجموعه کاربرگ است. این بدان معنی است که هر کاربرگ دارای یک نام و هر یک دارای یک مقدار شاخص است که موقعیت آن را در مجموعه کاربرگ ها نشان می دهد. یک تطابق اولیه بین نام کاربرگ و موقعیت فهرست در مجموعه Worksheets وجود دارد، اما این می تواند به راحتی از بین برود.
به عنوان مثال، هنگامی که برای اولین بار یک کتاب کار ایجاد می کنید، معمولاً حاوی یک یا چند کاربرگ به نام های، به طور کلی، Sheet1، Sheet2، Sheet3 و غیره است. اینها با شماره های شاخص 1، 2، 3 و غیره در مجموعه کاربرگ ها مطابقت دارند. این مطابقت اولیه بین نام کاربرگ (Sheet1) و مقدار شاخص (1) است که می تواند منجر به سردرگمی شود. این به این دلیل است که با تغییر نام کاربرگها و مهمتر از آن، تغییر ترتیب کاربرگ، رابطه بین نام کاربرگ و مقدار شاخص میتواند بهخوبی دمدمی مزاج به نظر برسد.
بیایید بگوییم که کتاب کار Davids با Sheet1، Sheet2 و Sheet3 ایجاد شده است. او بلافاصله قبل از Sheet1 (در سمت چپ Sheet1 در برگههای کاربرگ) یک کاربرگ اضافه میکند و نام آن را Master میگذارد. در این مرحله، Master دارای مقدار شاخص مجموعه Worksheets 1، Sheet1 دارای مقدار شاخص 2، Sheet2 دارای مقدار شاخص 3، و Sheet3 دارای مقدار شاخص 4 است. مقادیر شاخص در مجموعه Worksheets همیشه با ترتیب کاربرگ ها همانطور که در برگه های کاربرگ نشان داده شده است.
چرا این مهم است؟ زیرا هنگامی که به یک کاربرگ در یک ماکرو ارجاع می دهید، می توانید این کار را با استفاده از مقدار شاخص برای مجموعه کاربرگ ها یا با استفاده از نام واقعی اختصاص داده شده به کاربرگ انجام دهید. به عنوان مثال، می توانید با استفاده از موارد زیر به کاربرگ Master مراجعه کنید:
Worksheets("Master")
یا اگر نمیخواهید با نام به آن اشاره کنید، میتوانید با استفاده از مقدار شاخص در مجموعه کاربرگها به آن مراجعه کنید. با فرض اینکه کاربرگ Master اولین مورد در کتاب کار باشد (برگه Master در سمت چپ سایر برگههای کاربرگ قرار دارد)، پس این به کاربرگ Master نیز اشاره دارد:
Worksheets(1)
با در نظر گرفتن همه این موارد، اگر کاربرگ Master شما اولین مورد در کتاب کار است و می خواهید مقادیر را در 52 کاربرگ بعدی، از چپ به راست در کتاب کار قرار دهید، می توانید از این ماکرو بسیار ساده استفاده کنید:
Sub CopyData1()
Dim J As Integer
For J = 1 To 52
Worksheets(J + 1).Range("A2") = Worksheets("Master").Cells(J, 2)
Next J
End Sub
ماکرو از هر دو روش مقدار شاخص برای ارجاع برگه ها به همراه روش نام برای کاربرگ Master استفاده می کند. شما به راحتی می توانید از روش مقدار شاخص برای هر دو مرجع استفاده کنید:
Sub CopyData2()
Dim J As Integer
For J = 1 To 52
Worksheets(J + 1).Range("A2") = Worksheets(1).Cells(J, 2)
Next J
End Sub
یا، اگر ترجیح میدهید، میتوانستید کمی پیچیدهتر شوید و فقط از سلولهای کاربرگ Master عبور کنید و از آن به عنوان راهی برای تعیین مکان قرار دادن اطلاعات استفاده کنید:
Sub CopyData3()
Dim c As Range
For Each c In Worksheets("Master").Range("B1:B52")
Worksheets(c.Row + 1).Range("A2") = c.Value
Next c
End Sub
در نهایت، ممکن است بخواهید در نظر داشته باشید که آیا واقعاً میخواهید رویکردهایی را که تاکنون مورد بحث قرار گرفت، اتخاذ کنید. مشکل این است که مقادیر کپی شده در سلول A2 در هر یک از کاربرگ های دیگر ثابت هستند - آنها تغییر نمی کنند. برای بهروزرسانی مقادیر (اگر مقادیر B1:B52 در کاربرگ Master تغییر کند)، باید به یاد داشته باشید که ماکرو را دوباره اجرا کنید.
راه حل، البته، قرار دادن فرمول ها در سلول A2 در هر یک از کاربرگ های غیر Master است. فرمول های موجود در هر یک از سه کاربرگ اول به صورت زیر است:
=Master!B1
=Master!B2
=Master!B3
البته، قرار دادن این فرمول ها در هر 52 کاربرگ می تواند خسته کننده، زمان بر و مستعد خطا باشد. بنابراین، میتوانید از یک ماکرو برای قرار دادن همه فرمولها، با استفاده از تغییری از ماکروهایی که قبلاً بحث شد، استفاده کنید:
Sub CopyData4()
Dim J As Integer
For J = 1 To 52
Worksheets(J + 1).Range("A2").Formula = "=Master!B" & J
Next J
End Sub
نتیجه این است که همه فرمول ها همان جایی هستند که شما انتظار دارید، و نتایج نمایش داده شده در A2 در هر کاربرگ دیگر ثابت نیستند.