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

گیلبرت دارای یک کاربرگ (به نام "کنترل") است که حاوی لیستی از نام های کاربرگ مورد نظر در سلول های A1:A12 است. او به روشی در یک ماکرو نیاز دارد تا هر یک از 12 کاربرگ دیگر را در کتاب کار بر اساس آن محدوده سلول ها تغییر نام دهد. نام کاربرگ ها لازم نیست پویا باشند. زمانی که او ماکرو را اجرا می کند فقط باید نام آنها را تغییر داد.

هسته اصلی توسعه یک ماکرو برای رفع این نیاز، تکیه بر ویژگی Name هر کاربرگ است که می‌خواهید نام آن را تغییر دهید. به عنوان مثال، می توانید از یک ماکرو بسیار ساده مانند زیر استفاده کنید:

Sub RenameSheets()
    Dim c As Range
    Dim J As Integer

    J = 0
    For Each c In Range("A1:A12")
        J = J + 1
        If Sheets(J).Name = "Control" Then J = J + 1
        Sheets(J).Name = c.Text
    Next c
End Sub

ماکرو به سادگی از محدوده سلولی A1:A12 عبور می کند و اگر کاربرگ بعدی "کنترل" نام ندارد، کاربرگ را به مقدار سلول تغییر نام می دهد.

همانطور که اشاره شد، این ماکرو بسیار ساده است و به احتمال زیاد باید بسیار قوی تر باشد. به عنوان مثال، اگر بیشتر (یا کمتر) از 13 کاربرگ در کتاب کار فعلی وجود داشته باشد، چه کاری باید انجام شود؟ در صورت وجود سلول های خالی در محدوده A1:A12 چه باید کرد؟ اگر کسی ماکرو را اجرا کند و "کنترل" کاربرگ فعال نباشد، چه باید کرد؟ اگر دو مقدار یکسان در A1:A12 وجود داشته باشد چه باید کرد؟ اگر روی یک یا چند نام در محدوده A1:A12 فضاهای پیشرو یا انتهایی وجود داشته باشد، چه؟ اینها و (به احتمال زیاد) طیف کاملی از سؤالات دیگر می توانند بر ظاهر ماکرو تأثیر بگذارند. در اینجا یک نسخه نظری از ماکرو است که چندین مورد از احتمالات ذکر شده را در نظر می گیرد:

Sub RenameSheets()
    Dim c As Range
    Dim J As Integer
    Dim K As Integer
    Dim sName As String
    Dim w(12) As String
    Dim bGo As Boolean
    Dim sTemp As String

    bGo = True
    If Worksheets.Count <> 13 Then
         Check to make sure exactly 13 worksheets in workbook
        bGo = False
        sTemp = "There are more than 13 worksheets."
    End If
    If ActiveSheet.Name <> "Control" Then
         Check to make sure Control is active
        bGo = False
        sTemp = "Control worksheet is not active."
    Else
         Check for empty and duplicate cells in range
        J = 0
        For Each c In Range("A1:A12")
            sName = Trim(c.Text)
            If sName <> "" Then
                For K = 1 to J
                    If LCase(w(K)) = LCase(sName) Then
                        bGo = False
                        sTemp = "Duplicate sheet names in list."
                    End If
                Next K
                If bGo Then
                     Everything still good; add name
                    J = J + 1
                    w(J) = sName
                End If
            End If
        Next c
    End If

    If bGo Then
        K = 0
        For J = 1 To 12
            K = K + 1
            If Sheets(K).Name = "Control" Then K = K + 1
            Sheets(K).Name = w(J)
        Next J
    Else
        MsgBox(sTemp)
    End If
End Sub

توجه کنید که نسخه دوم ماکرو چقدر طولانی تر از نسخه اول است؟ هر زمان که شروع به اضافه کردن چک های متعدد در یک ماکرو کنید، واقعاً می تواند آن را بسیار طولانی تر از بدون چک کند. البته مزیت اضافه کردن چک‌ها این است که ماکرو شما کمتر با مشکل مواجه می‌شود زیرا توسط افرادی غیر از شما استفاده می‌شود.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

613 دیدگاه

10.8k کاربر

166 نفر آنلاین
1 عضو و 165 مهمان در سایت حاضرند
اعضای حاضر در سایت
بازدید امروز: 10343
بازدید دیروز: 13001
بازدید کل: 19464638
...