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

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

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

=Sheet2!A1

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

Sub ConvertFormulas1()
    Dim c As Variant
    Dim frm As String

    On Error Resume Next

    For Each c In Selection
        If c.HasFormula Then
            frm = c.Formula
            If InStr(1, frm, "!") = 0 Then
                c.Value = c.Value
            End If
        End If
    Next c
End Sub

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

=[OtherWorksheet.xls]Sheet1!$C$9

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

Sub ConvertFormulas2()
    Dim c As Variant
    Dim OtherSheet As Boolean
    Dim frm As String

    On Error Resume Next

    For Each c In Selection
        If c.HasFormula Then
            frm = c.Formula
            OtherSheet = False
            If InStr(1, frm, "!") Then
                OtherSheet = True
                If InStr(1, frm, "[") Then
                    OtherSheet = False
                End If
            End If
            If Not OtherSheet Then
                c.Value = c.Value
            End If
        End If
    Next c
End Sub

لازم به ذکر است که اصلاح فرمول استفاده شده در این ماکرو نسبتاً آسان خواهد بود به طوری که از شر تمام مراجع خارجی خلاص شود و در عین حال مراجع به کاربرگ فعلی دست نخورده باقی بماند. در واقع، تنها کاری که باید انجام دهید این است که از بررسی براکت خلاص شوید و سپس از شر کلمه کلیدی "نه" در ساختاری که متغیر OtherSheet را بررسی می کند خلاص شوید.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

98 نفر آنلاین
0 عضو و 98 مهمان در سایت حاضرند
بازدید امروز: 12641
بازدید دیروز: 25459
بازدید کل: 15240157
...