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

Bas سندی دارد که در آن از برجسته‌سازی‌های متنی زرد، سبز و خاکستری در سراسر آن استفاده می‌کند. او تعجب می کند که چگونه می تواند تنها یک رنگ را حذف کند. او می‌خواهد تمام برجسته‌سازی متن سبز را حذف کند اما زرد و خاکستری را حفظ کند.

Word به شما امکان می دهد متن را با استفاده از یکی از 16 رنگ برجسته کنید که با کلیک بر روی فلش رو به پایین در کنار ابزار Text Highlight Color (در زبانه Home نوار) ​​قابل مشاهده است. هیچ راهی برای استفاده از Find and Replace برای یافتن رنگ های برجسته وجود ندارد—ابزار Find and Replace با تمام هایلایت کردن متن یکسان رفتار می کند.

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

چرا این مهم است؟ از آنجا که من راه حل های مبتنی بر ماکرو برای این مشکل دیده ام که از ابزار Find and Replace (تحت کنترل ماکرو) برای جستجوی متن هایلایت شده استفاده می کنند، سپس اگر رنگ خاصی است، هایلایت را حذف می کنیم. در اینجا نسخه ای از آن وجود دارد. یک ماکرو:

Sub RemoveOneHighlight()
    Dim HLColor As WdColorIndex
    Dim rg As Range

    HLColor = Selection.Range.HighlightColorIndex
    If HLColor <> wdNoHighlight Then
        Set rg = ActiveDocument.Range
        With rg.Find
            .Highlight = HLColor
            .Wrap = wdFindStop
            While .Execute
                If rg.HighlightColorIndex = HLColor Then
                    rg.HighlightColorIndex = wdNoHighlight
                End If
                rg.Collapse wdCollapseEnd
            Wend
        End With
    Else
        MsgBox "Place the cursor on text that has the highlight to remove."
    End If  
End Sub

این ماکرو توسط Jay Freedman نوشته شده است و می توان آن را در صفحه وب با استفاده از این URL طولانی احمقانه پیدا کرد:

https://answers.microsoft.com/en-us/msoffice/forum/all/how-to-get-word-to-automatically-remove-or-apply-a/04df106d-7372-4c5d-916e-c4c876d8344d

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

به یاد داشته باشید که می توانید هر کاراکتر را در کلمه "هایلایت کردن" با رنگ متفاوتی برجسته کنید. اگر این کار را انجام دهید، ماکرویی که به تازگی نشان داده شده است روی چنین کلمه ای کار نمی کند. دلیل آن این است که ابزار Find and Replace هر بلوکی از متن را پیدا می کند که از هر برجسته سازی استفاده می کند. بنابراین، کل کلمه " برجسته کردن" یک کلمه در نظر گرفته می شود. زمانی که کد بررسی می کند که آیا ویژگی HighlightColorIndex با رنگ مورد نظر (HLColor) مطابقت دارد یا خیر، هرگز مطابقت نخواهد داشت زیرا، در آزمایش من، HighlightColorIndex حاوی یک مقدار پوچ مانند 999999 خواهد بود که برنده شد. با رنگی که باید بین 1 تا 16 باشد مطابقت نداشته باشد.

بنابراین، اگر متن شما هرگز رنگ‌های متفاوتی با هم ندارد، می‌توانید از ماکرو Jay استفاده کنید. (همانطور که گفتم، بسیار سریع است.) اگر ممکن است رنگ‌های درهم شده داشته باشید، پس ماکرو باید به آن نگاه کنید. هر یک از نویسه ها را ارزیابی کنید که آیا برجسته شده است یا خیر. سپس، اگر رنگ هایلایت رنگی است که می خواهید تغییر دهید، باید آن رنگ را حذف کنید. ماکرو زیر همه این عوامل را در نظر می گیرد:

Sub RemoveSingleHighlight()
    Dim sHLColors(16) As String
    Dim iHLColors(16) As Integer
    Dim c As Range
    Dim J As Integer
    Dim sTemp As String
    Dim iColWanted As Integer
    Dim iChanges As Integer
    Dim bFoundSome As Boolean

    sHLColors(1) = "Black"
    sHLColors(2) = "Blue"
    sHLColors(3) = "Turquoise"
    sHLColors(4) = "Bright Green"
    sHLColors(5) = "Pink"
    sHLColors(6) = "Red"
    sHLColors(7) = "Yellow"
    sHLColors(8) = "White"
    sHLColors(9) = "Dark Blue"
    sHLColors(10) = "Teal"
    sHLColors(11) = "Green"
    sHLColors(12) = "Violet"
    sHLColors(13) = "Dark Red"
    sHLColors(14) = "Dark Yellow"
    sHLColors(15) = "Dark Gray"
    sHLColors(16) = "Light Gray"

    For J = 1 To 16
        iHLColors(J) = 0
    Next J
    bFoundSome = False

    For Each c In Selection.Characters
        If c.HighlightColorIndex <> wdNoHighlight Then
            iHLColors(c.HighlightColorIndex) = 1
            bFoundSome = True
        End If
    Next c

    If bFoundSome Then
        sTemp = "The following highlighting colors are used "
        sTemp = sTemp & "in the selected text:" & vbNewLine & vbNewLine
        For J = 1 To 16
            If iHLColors(J) > 0 Then
                sTemp = sTemp & "     " & J & ": " & sHLColors(J) & vbNewLine
            End If
        Next J
        sTemp = sTemp & vbNewLine & "Please enter the color number "
        sTemp = sTemp & "for the color you want to remove:"

        iColWanted = Val(InputBox(sTemp))
        If (iColWanted < 1) Or (iColWanted > 16) Then iColWanted = 0

        iChanges = 0
        If iColWanted > 0 Then
            For Each c In Selection.Characters
                If c.HighlightColorIndex = iColWanted Then
                    c.HighlightColorIndex = wdNoHighlight
                    iChanges = iChanges + 1
                End If
            Next c

            sTemp = "There were " & iChanges & " characters using "
            sTemp = sTemp & "the " & sHLColors(iColWanted) & " color. "
            sTemp = sTemp & "These were all changed in the selected text."
        Else
            sTemp = "No changes made to the selected text."
        End If
    Else
        sTemp = "The selected text contained no highlighted text."
    End If
    MsgBox sTemp
End Sub

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

با فرض اینکه کاربر یک کد رنگ معتبر قرار داده است، سپس هر کاراکتر دوباره بررسی می شود و اگر برجسته بودن کاراکتر از رنگ مشخص شده استفاده کند، رنگ حذف می شود. در نهایت، ماکرو یک جعبه پیام را نشان می دهد که تعداد کاراکترهای تغییر یافته را نشان می دهد.

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

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

Sub RemoveOneSingleHighlight()
    Dim HLColor As WdColorIndex
    Dim rg As Range
    Dim c As Range

    HLColor = Selection.Range.HighlightColorIndex
    If HLColor <> wdNoHighlight Then
        Set rg = ActiveDocument.Range
        With rg.Find
            .Highlight = True
            .Wrap = wdFindStop
            While .Execute
                For Each c In rg.Characters
                    If c.HighlightColorIndex = HLColor Then
                        c.HighlightColorIndex = wdNoHighlight
                    End If
                Next c
                rg.Collapse wdCollapseEnd
            Wend
        End With
    Else
        MsgBox "Place the cursor on text that has the highlight to remove."  
    End If  
End Sub

نکته کلیدی در این نسخه این است که HighlightColorIndex کل محدوده (rg) بازگردانده شده توسط Find and Replace را بررسی نمی کند. درعوض، رنگ هایلایت هر یک از کاراکترهای منفرد در محدوده بازگشتی را بررسی می کند و اگر یک رنگ مطابقت پیدا کرد ، رنگ هایلایت حذف شده است. این ماکرو بسیار کندتر از ماکرو اصلی جی است، اما بسیار سریعتر از ماکرو من. همچنین هیچ گزارشی انجام نمی دهد و به دنبال بازخوردی از کاربر نیست - تا زمانی که نقطه درج را در کلمه ای که با استفاده از رنگ مورد نظر برجسته شده است قرار دهید، آن رنگ را از تمام برجسته سازی های سند حذف می کند.

یک تغییر دیگر در ماکرو اصلی جی ایجاد کردم. او در ابتدا ویژگی .Highlight شی .Find را برابر با HLColor قرار داده بود. این تصور اشتباهی را ایجاد می کند که ویژگی .Highlight را می توان روی یک برجسته سازی خاص تنظیم کرد. رنگ، اما نمی تواند. طبق اسناد Microsoft VBA، این ویژگی را فقط می توان روی True، False یا wdUndefined تنظیم کرد. همچنین توضیح می دهد که چرا Find and Replace فقط می تواند متن هایلایت شده را پیدا کند، نه متن با استفاده از رنگ هایلایت خاص. بنابراین، من کد جی را تغییر دادم تا منعکس کننده استفاده صحیح از ویژگی .Highlight باشد.

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

پاسخ شما

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

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

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

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 25 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 59 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 119 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 25 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

234 نفر آنلاین
0 عضو و 234 مهمان در سایت حاضرند
بازدید امروز: 22267
بازدید دیروز: 17853
بازدید کل: 20334447
...