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

لاورنس به راهی برای تعیین تعداد کاربرگ نیاز دارد حتی اگر کاربرگ تغییر نام داده باشد. برای مثال، اگر برگه ای Sheet11 نامیده شود، به اندازه کافی آسان است که بفهمید برگه 11 است. اگر برگه را به ژانویه تغییر نام دهد، لارنس هنوز به راهی نیاز دارد که بداند این برگه 11 است.

راه حل این مشکل به بهترین وجه با یک تابع تعریف شده توسط کاربر (یک ماکرو) انجام می شود. در واقع، دو عدد وجود دارد که ماکرو می تواند برای هر کاربرگ بازگرداند. اولی شماره شاخص برای کاربرگ است. این عدد نمایانگر شیء کاربرگ برگه در مجموعه Worksheets است. این مقدار را می توان با یک ماکرو مشابه زیر برگرداند:

Function SheetNumber1(shtname As String)
    Dim sht As Worksheet

    Application.Volatile
    For Each sht In ThisWorkbook.Worksheets
         If LCase(sht.Name) = LCase(shtname) Then
              SheetNumber1 = sht.Index
              Exit Function
         End If
    Next
    SheetNumber1 = -1
End Function

این تابع، هنگامی که در یک کاربرگ استفاده می شود، شماره فهرست هر کاربرگ را که نام آن به تابع ارسال شده است، برمی گرداند. اگر نامی که به تابع ارسال می شود در مجموعه کاربرگ ها وجود نداشته باشد، مقدار -1 توسط تابع برمی گردد. به عنوان مثال، موارد زیر که در یک سلول استفاده می شود، مقدار شاخص را برای کاربرگ به نام "ژانویه" در مجموعه برمی گرداند:

=SheetNumber("January")

مشکل این رویکرد این است که ترتیب اشیاء Worksheet در مجموعه Worksheets می تواند در طول زمان تغییر کند. بنابراین، شما همیشه نمی توانید فرض کنید که یازدهمین برگه در مجموعه، برگه ای است که در ابتدا Sheet11 بود.

یک راه سازگارتر برای تعیین نام اصلی یک کاربرگ (صرف نظر از نحوه تغییر نام آن) استفاده از چیزی است که ویژوال بیسیک از آن به عنوان برگه های "CodeName" یاد می کند. این یکی از ویژگی های کاربرگ است و به روش زیر قابل تعیین است:

Function SheetNumber2(shtname As String)
    Dim sht As Worksheet
    Dim sTemp As String

    Application.Volatile
    For Each sht In ThisWorkbook.Worksheets
         If LCase(sht.Name) = LCase(shtname) Then
              sTemp = sht.CodeName
              SheetNumber2 = Val(Mid(sTemp, 6, 4))
              Exit Function
         End If
    Next
    SheetNumber2 = -1
End Function

ویژگی CodeName در ماکرو فقط خواندنی است. در زمان ایجاد کاربرگ اختصاص داده می شود، اما امکان تغییر دستی آن در ویرایشگر ویژوال بیسیک وجود دارد. CodeName همیشه یک رشته است که نشان دهنده اولین نامی است که روی کاربرگ اعمال می شود، بنابراین چیزی شبیه به "Sheet11" خواهد بود. هنگامی که CodeName تنظیم شد، حتی اگر کاربرگ تغییر نام داد (مانند "ژانویه")، ثابت می ماند ("Sheet11").

در مثال ماکرو (SheetNumber2) ویژگی CodeName به متغیر sTemp اختصاص داده شده است. این در اکثر مواقع چیزی شبیه به "Sheet3" یا "Sheet11" خواهد بود. بنابراین، ماکرو سپس مقدار عددی هر چیزی که با کاراکتر ششم شروع می شود را می گیرد (درست بعد از "Sheet"). این مقداری است که توسط تابع برگردانده می شود.

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

پاسخ شما

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

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

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

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 53 visibility
ارسال شده در 27 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
0 پاسخ 44 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 57 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 31 visibility
ارسال شده در 25 تیر 1402 موضوع: آفیس توسط: Admin

26.4k سوال

11.7k پاسخ

614 دیدگاه

11.3k کاربر

166 نفر آنلاین
0 عضو و 166 مهمان در سایت حاضرند
بازدید امروز: 878
بازدید دیروز: 19133
بازدید کل: 20676153
...