![]() |
|
![]() |
|
Thread Tools | Display Modes |
#1
|
|||
|
|||
![]()
Hello.
I modified a code that was posted earlier to highlight a list of items that I keep in a separate spreadsheet. The code works fine. However, I was hoping to tweak it to do the items listed below as well: 1. Do shading instead of highlighting. I prefer to do this, since it highlights the whole row in my Word document instead of highlighting just the one word. I want each row where the word is listed to be shaded. Currently, I am doing a work around where I go back and change the highlights to shading via "replace". This workaround is okay: however, I have to change all my highlights to shade regardless of color. Therefore, I can't change a specific color highlight to a shading. Bonus question: Is there a way to select a specific highlighted color and change to shading? If it can't be done via VBA, is there a separate way to do it using the "replace" function? 2. If a word appears multiple time, highlight (or shading) the first instance differently than all subsequent instances. For example, the word "home30" appears in my document 6 times. I want to highlight (or shading) the first instance as "green" and the subsequent instances as "orange". I would like to do this as part of my VBA code for all the items listed in my spreadsheet. Thanks to anyone who is able to assist. I appreciate it very much. Happy holidays. The VBA code that I am using is below: Code:
Sub Highlight() Const strWorkbook As String = "C:\Users\me\Highlights.xlsx" Const strSheet As String = "Sheet1" Dim strFind As String Dim oRng As Range Dim i As Long Dim Arr() As Variant Arr = xlFillArray(strWorkbook, strSheet) For i = 0 To UBound(Arr, 2) strFind = Arr(0, i) Set oRng = ActiveDocument.Range With oRng.Find Do While .Execute(FindText:=strFind, _ MatchCase:=True, _ MatchWholeWord:=True, _ MatchWildcards:=False, _ Forward:=True, _ Wrap:=wdFindStop) = True oRng.HighlightColorIndex = wdRed oRng.Collapse wdCollapseEnd Loop End With DoEvents Next i Set oRng = Nothing lbl_Exit: Exit Sub End Sub Private Function xlFillArray(strWorkbook As String, _ strRange As String) As Variant 'Graham Mayor - Graham Mayor - Home Page - 24/09/2016 Dim RS As Object Dim CN As Object Dim iRows As Long strRange = strRange & "$]" 'Use this to work with a named worksheet 'strRange = strRange & "]" 'Use this to work with a named range Set CN = CreateObject("ADODB.Connection") 'Set HDR=NO for no header row CN.Open ConnectionString:="Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & strWorkbook & ";" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" Set RS = CreateObject("ADODB.Recordset") RS.Open "SELECT * FROM [" & strRange, CN, 2, 1 With RS .MoveLast iRows = .RecordCount .MoveFirst End With xlFillArray = RS.GetRows(iRows) If RS.State = 1 Then RS.Close Set RS = Nothing If CN.State = 1 Then CN.Close Set CN = Nothing lbl_Exit: Exit Function End Function Last edited by macropod; 12-07-2024 at 08:12 PM. Reason: Added code tags |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Remove shading of specific color from document with multiple shading colors | eg0n | Word VBA | 2 | 08-11-2022 12:42 AM |
![]() |
karkey | Word VBA | 3 | 01-05-2021 02:13 PM |
![]() |
Nanaia | Word VBA | 3 | 09-07-2018 02:13 PM |
How to find (highlight) two and more words in a list of 75k single words in Word 2010 | Usora | Word | 8 | 05-29-2018 03:34 AM |
![]() |
JSC6 | Word VBA | 1 | 09-30-2014 08:22 PM |