ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
12 visibility
موضوع: آفیس توسط:

کوین یک ورک بوک حاوی 36 کاربرگ دارد. او باید نام کاربرگ را در سلولی از آن کاربرگ داشته باشد. او یک تابع تعریف شده توسط کاربر ایجاد کرده است که نام کاربرگ را برمی گرداند، اما همان نام را در تمام 36 کاربرگ برمی گرداند - نام هر کاربرگ که هنگام اجرای تابع تعریف شده توسط کاربر نمایش داده می شود. او نمی پرسد که آیا یک ماکرو به شکل تابع تعریف شده توسط کاربر (UDF) وجود دارد که بتواند از آن استفاده کند که همیشه نام برگه ای را که تابع در آن استفاده می شود برمی گرداند. به عبارت دیگر، در ورک بوک 36 برگه ای او، بسته به کاربرگی که در آن استفاده شده است، باید 36 نتیجه مختلف را برگرداند.

پاسخ کوتاه این است که بله، راهی وجود دارد. در واقع چند راه وجود دارد. و جالب است که اگر نمی خواهید، مجبور نیستید از ماکرو یا تابع استفاده کنید. به عنوان مثال، در اینجا یک فرمول کاربرگ معمولی است که در هر سلول روی کاربرگ کار می کند:

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

نمونه تابع CELL در این فرمول نام کامل کاربرگ را شامل نام فایل و مسیر فایل برمی گرداند. استفاده از تابع FIND منجر به حذف همه چیز به جز نام کاربرگ می شود.

به استفاده از مرجع سلول (A1) در هر نمونه از تابع CELL توجه کنید. این تابع CELL را مجبور می کند تا نام کاربرگ حاوی مرجع سلول را برگرداند. بدون آن، شما همان نتیجه (اولین کاربرگ) را برای هر نمونه از فرمول دریافت خواهید کرد.

همچنین باید بدانید که اگر فرمول را در یک ورک بوک جدید استفاده کنید - کتابی که ذخیره نشده است، نتایج معتبری را به شما نشان نخواهد داد. شما باید ورک بوک را ذخیره کنید تا در واقع نامی داشته باشد که توسط تابع CELL با موفقیت بازگردانده شود. همچنین اگر ورک بوک یا نام کاربرگ حاوی یک کاراکتر براکت راست ("]" باشد، به درستی کار نخواهد کرد. در این صورت، شما می خواهید از یکی از راه حل های دیگری که در این نکته بحث شده است استفاده کنید.

اگر ترجیح می دهید از یک تابع تعریف شده توسط کاربر استفاده کنید، می توانید چیز ساده ای مانند این تابع را امتحان کنید:

Function TabName1() As String
    Application.Volatile
    TabName1 = ActiveSheet.Name
End Function

با این حال، این تابع نتیجه مطلوب را ارائه نمی دهد، زیرا همیشه نام کاربرگ فعال را برمی گرداند. این بدان معناست که اگر تابعی را بر روی هر یک از برگه های ورک بوک خود فراخوانی کنید، به جای نام برگه ای که تابع در آن استفاده شده است، همیشه نام برگه فعال در هر یک از آن کاربرگ ها را برمی گرداند. تابع زیر نتایج بهتری ارائه می دهد:

Function TabName2() As String
    Application.Volatile
    TabName2 = Application.Caller.Parent.Name
End Function

اگر فکر می کنید می خواهید از تابع برای ارجاع به نام کاربرگ در جای دیگری از ورک بوک استفاده کنید، این تابع برای شما بهتر کار خواهد کرد:

Function TabName3(cell As Range)
    TabName3 = cell.Worksheet.Name
End Function

این نسخه از تابع مستلزم آن است که یک مرجع سلولی - هر مرجع سلولی - به سلولی در کاربرگ که نام آن را می خواهید استفاده کنید، ارائه دهید.

البته، اگر ترجیح می دهید از یک تابع تعریف شده توسط کاربر استفاده نکنید، می توانید به سادگی یک ماکرو ایجاد کنید که نام هر برگه کاربرگ را در همان سلول در هر کاربرگ قرار دهد. به عنوان مثال، ماکرو زیر از هر یک از کاربرگ های ورک بوک عبور می کند و نام هر کاربرگ را در سلول A1 قرار می دهد.

Sub TabName4()
    For J = 1 To ActiveWorkbook.Sheets.Count
        Sheets(J).Cells(1, 1).Value = Sheets(J).Name
    Next
End Sub

باید توجه داشته باشید که این رویکرد پویا نیست (هر بار که نام کاربرگ ها را تغییر می دهید یا کاربرگ های جدید اضافه می کنید باید دوباره اجرا شود). همچنین هر چیزی که در سلول A1 باشد را بازنویسی می کند. (اگر می خواهید نام کاربرگ ها در سلول های مختلف در هر کاربرگ قرار گیرند، مقادیر استفاده شده در مجموعه Cells را تغییر دهید.)

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

76 نفر آنلاین
0 عضو و 76 مهمان در سایت حاضرند
بازدید امروز: 14589
بازدید دیروز: 8462
بازدید کل: 15425278
...