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

رنیر دارای یک ورک بوک است که دارای ده کاربرگ است که به نام منابع 1 تا منابع 10 نامگذاری شده است. "به اصطلاح. بنابراین، نام منابع 4 تا منابع 10 به طور خودکار به منابع 3 از طریق منابع 9 تغییر می کند.

راه های مختلفی وجود دارد که می توانید این کار را انجام دهید، همه از طریق استفاده از ماکروها. یک رویکرد احتمالاً کمتر از آنچه رنیر ترجیح می دهد خودکار است، اما عالی کار می کند:

Sub ReNameSheets()
    Dim J As Integer
    Dim wks As Worksheet

    J = 0
    For Each wks In ActiveWorkbook.Worksheets
        J = J + 1
        wks.Name = "TempSheet " & J
    Next wks

    J = 0
    For Each wks In ActiveWorkbook.Worksheets
        J = J + 1
        wks.Name = "Resources " & J
    Next wks
End Sub

این ماکرو به سادگی تمامی کاربرگ ها را طی می کند و با استفاده از قراردادی که Renier ترجیح می دهد، نام آنها را تغییر می دهد. ماکرو را می توان در صورت تقاضا اجرا کرد، هر زمان که تغییر نام کاربرگ ها مورد نظر باشد.

توجه داشته باشید که کد در واقع دو نامگذاری را از کاربرگ ها عبور می دهد. اولین مورد این است که نام کاربرگ ها را روی نام های موقت قرار دهید و دومی تنظیم آنها به نام های نهایی. این دو پاس به جلوگیری از بروز مشکل بالقوه در هنگام افزودن کاربرگ به ورک بوک کمک می کند - به عنوان مثال، اگر یک کاربرگ جدید را درست قبل از منابع 4 اضافه کنید، پس از تغییر نام تک گذر، سعی می شود کاربرگ جدید را به عنوان منابع 4 تغییر نام دهید، که باعث ایجاد آن می شود. یک خطا زیرا کاربرگ 5 در آن نقطه، منابع 4 نیز نامیده می شود. با انجام دو پاس، نام همه چیز را به چیزی کاملاً جدید تغییر می دهید و سپس تنظیمات نام نهایی را انجام می دهید.

برای یک رویکرد خودکارتر، ممکن است بخواهید از رویداد SheetBeforeDelete برای شی Workbook استفاده کنید. این رویداد (همانطور که از نامش پیداست) بلافاصله قبل از حذف کاربرگ فعال می شود. در اینجا یک مثال از رویکرد مدیریت رویداد آورده شده است:

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
    Dim sPrefix As String
    Dim iNum1 As Integer
    Dim iNum2 As Integer
    Dim wks As Worksheet

    sPrefix = "Resources "
    If Left(Sh.Name, Len(sPrefix)) = sPrefix Then
        iNum1 = CInt(Right(Sh.Name, Len(Sh.Name) - Len(sPrefix)))
        Sh.Name = "TempSheet 9999"
        For Each wks In Sheets
            If Left(wks.Name, Len(sPrefix)) = sPrefix Then
                iNum2 = CInt(Right(wks.Name, Len(wks.Name) - Len(Prefix)))
                If iNum2 > iNum1 Then
                    wks.Name = sPrefix & (iNum2 - 1)
                End If
            End If
        Next
    End If
End Sub

کنترل کننده رویداد بررسی می کند که آیا کاربرگ در حال حذف با پیشوند تعیین شده ("منابع") شروع می شود یا خیر. اگر این کار را کرد، صفحه کاری در حال حذف را به یک نام موقت تغییر نام می دهد ("TempSheet 9999"). سپس، از هر یک از کاربرگ های ورک بوک عبور می کند و هر کاربرگ را که دارای پیشوند مناسب و تعداد پسوند بالاتر از کاربرگ در حال حذف است، تغییر نام می دهد.

دو اخطار بزرگ با این رویکرد وجود دارد. اولاً، اگر کاربرگ ها را اضافه کنید، جواب نمی دهد. دوم، تنها به طور قابل اعتمادی حذف کاربرگ های منفرد را مدیریت می کند. اگر چندین کاربرگ را در یک زمان حذف کنید، شماره گذاری نادرست خواهد بود و در واقع، ماکرو ممکن است به دلیل روشی که اکسل حذف ها را مدیریت می کند، از کار بیفتد.

اگر پیش بینی می کنید که چندین کاربرگ را اغلب حذف کنید، می توانید با استفاده از رویکردی متفاوت، از این مشکل دوری کنید. این یکی متکی به استفاده از رویدادهای SheetActivate و SheetDeactivate شی Workbook است.

 These variables are declared OUTSIDE of the events,
 so they are available globally.

    Dim shName As String
    Dim Avail As Variant

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
     When the worksheet is deactivated, the name of
     that worksheet is stored in the shName variable.

    shName = Sh.Name
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim wks As Worksheet
    Dim J As Integer

    On Error Resume Next
     The following line will generate an error if the
     the worksheet shName was deleted. If the error
     occurrs, then we can trigger the renaming.
    Avail = Sheets(shName).Range("A1")
    If Err Then
        J = 0
        For Each wks In ActiveWorkbook.Worksheets
            J = J + 1
            wks.Name = "Resources " & J
        Next wks
    End If
    On Error GoTo 0
End Sub

این کنترل کننده های رویداد کار می کنند زیرا رویداد SheetDeactivate به طور خودکار هر زمان که کاربرگ ای باقی می ماند (مثلاً وقتی کاربرگ دیگری را فعال می کنید) یا هر زمان که کاربرگ حذف می شود، فعال می شود. سپس رویداد SheetActivate فعال می شود و اساساً بررسی می کند که آیا می توان به برگه ای که قبلاً غیرفعال شده بود دسترسی پیدا کرد یا خیر. اگر دسترسی به آن امکان پذیر نباشد، می دانیم که حذف شده است و می توانیم نام همه کاربرگ ها را تغییر دهیم.

رویکردی که برای تغییر نام استفاده می کنید کاملاً به شما بستگی دارد که بر اساس نحوه کار با کاربرگ های خود تعیین می کنید.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

79 نفر آنلاین
0 عضو و 79 مهمان در سایت حاضرند
بازدید امروز: 20293
بازدید دیروز: 23384
بازدید کل: 15271190
...