Looking for Word VBA code to highlight text using current default highlight color - vba

I have been searching off and on, high and low, for many months, to no avail, for VBA code that I can include in my macros to highlight text using the current default highlight color. I have looked through my personal resource books and all up and down the land of Google, including here.
I have a bazillion macros created that highlight text every which way to Sunday, in every possible (basic) color, and they all work great. But sometimes I have a scenario where I want to highlight random text in an ongoing manner, multiple times, in a particular color. Then I'll want to switch colors ... for a while. And switch again ... for a while.
I have keyboard shortcuts (many) for a lot of highlighting options, including the built-in command shortcut to highlight text that I have selected manually. So, for example, I can manually select three words to my left, and use Ctrl+Alt+H to invoke the built-in Highlight command, and it will use the current default color.
But I'm unable to automate that further with a macro. For example, I have used numerous different iterations of macros to highlight text as I'm typing it, or to automatically highlight X number of words to my left, or a line or sentence or paragraph. But with each of those macros, I'm forced to declare a specific color. That means that I then have to have voluminous series of macros to be able to do the same thing with each (basic) color variation. That's fine if I just want to infrequently highlight text in a specific color. But when I know I will be using a specific color for the next, say, 20 or 40 highlights, I'd love to set a default color and then just use a generic highlight command rather than a color-centric command (which is more steps).

After much experimentation, I've finally figured out a way to do it. I'm not sure if this is the most efficient way, but it works!
I have many highlight-centric macros that will use this feature, but here is an example of one of them using this feature. I declared the existing color as a string and then used the string rather than a specific color (which I erroneously thought was a requirement). The following macro allows me to highlight while I'm typing:
Sub honHighlightOnTypingSelectWord_DEFAULTCOLOR()
CurColor = Options.DefaultHighlightColorIndex
Application.ActiveDocument.Application.Options.DefaultHighlightColorIndex = CurColor
Selection.Words(1).Select
Selection.Range.HighlightColorIndex = CurColor
End Sub
Problem solved!

Related

Word 365 Markup/final view UI display problems

Because of lockdown measures, I've recently begun working from home. I work for an editing company, and I'm required to do a lot of reviewing of editor work (in addition to editing, re-editing). This requires me to quickly and frequently toggle between markup (tracked changes) view and final view. I have hotkey macros to do this, but unlike my 2016 version at my office, Word 365 does not retain the current position when I toggle views, but instead it (the display) jumps to the same page on the other view (the cursor does remain), making it so I lose my place and have to spend seconds finding it again. I need to be able to quickly toggle while keeping my eyes fixed on the current cursor position. I've adjusted my macro so it still keeps the cursor on the page, but it nevertheless jumps around within the page. I need the cursor and its displayed position on the page to remain fixed when switching views.
A secondary problem related to this is that when I select words in final view to comment on (or to edit/replace/highlight/etc.), these words are not actually selected as it jumps to markup view (instead seemingly just selecting the one single next word).
This may not be the appropriate place for a question like this, but I didn't know if some finagling with VBA might help me out here or maybe there were just some people with more Office expertise.
Thanks for any help!
Here is my macro. It's extremely basic, and I just did it from "record macro"; I've done very little actual VBA coding. I believe this is equivalent to clicking "all markup" and then pressing CTRL+RightArrow. The ones to show the final and original text are the same except for the .markUp.
Ideally, I wouldn't need any code because it would just be some setting I'm not aware of, but I know they love to change the fundamentals of how staple programs like Word operate between versions just to mess with people.
Sub markUp()
'
' markUp Macro
'
'
With ActiveWindow.View.RevisionsFilter
.markUp = wdRevisionsMarkupAll
.View = wdRevisionsViewFinal
End With
Selection.MoveRight Unit:=wdWord, Count:=1
End Sub

Set textbox line appearance to a gradient using Word VBA? (2016)

Context: I'm setting up a macro to format textboxes independently of current template or textbox defaults, in Word 2016. To be clear, No, I cannot depend on the "Set Textbox Defaults" option.
The design I have to replicate puts a linear gradient on the outer textbox's border, going from a dark color at the top to white at the bottom. Pretty simple, right? Except I can't figure out how to tell VBA to accomplish this.
Normally I record a macro to see which properties to change, but the Macro recorder isn't saving any edits to the Shape format.
Manually I got as far as outputting the .Pattern used on the textbox.Line object via Debug.Print: Word returns -2 (msoPatternMixed) which is "Not supported" according to Microsoft's reference docs.
I don't know how to get any further.
Could anyone share some example code that'd let me set the line gradient through VBA?
Or: tell me how to force the Macro Recorder to save the changes I'm making in the Format Shape dialog? It's incredibly annoying that it refuses to show me anything.
Thanks!

How to create a new custom style with specific heading

Please help as I am new to Vba and custom style in MS Word 2013.
I want to create a new custom style that provides heading as INTRODUCTION when a paragraph is been selected, and the rest of the text should come in normal style of paragraphs. Is this possible to make it in custom style or should Vba macro be used. If Vba macro is the only option then how can we add this into the particular custom file.
Styles are for formatting only, they don't contain text (such as INTRODUCTION). If I understand your request, you will need a simple macro you can write, or, actually, record.
So, let's say you have a paragraph in your document. You would like to make this paragraph have the "Normal" style. You would like to insert BEFORE this paragraph the word "INTRODUCTION", and give it the style "Heading 1".
Record the Word macro: InsertIntroduction
Position the cursor at the start of the paragraph.
Enable "Record a macro" - varies by release of Word, but, for 2010, View > Macro > Record. Be sure to specify a good name and a carefully thought out Description. Do NOT shirk this step! Put in the Description! If you are going to use it a lot, assign a keystroke to it also, that will save you a lot of time.
Type INTRODUCTION. Using cursor keys (not mouse), select it (perhaps up-arrow, Home, Shift-End). Apply style "Heading 1" (for this, you can use the mouse: Home > Style group > Heading 1 or a keystroke, usually Ctrl-Alt-1).
Arrow down to the next paragraph. Select the full paragraph using the keyboard, not the mouse (perhaps by hitting the F8 key four times, then ESC).
Apply the appropriate style (again, you can use the mouse, but the Normal style is usually linked to Ctrl-Shift-N).
You've completed the steps you wanted, based on your original request. Note that you can add a lot more, of course. But, let's say you're done.
View > Macro > Stop recording.
You've now written a program and it will be saved. Use it going forward. Cool, hunh? And you can write these things a lot faster yourself than asking others "how do I...?"
Like any other program, it can be modified to do more, or fix little errors. Let's say you misspelled INTRODuCTIoN. Tap Alt-F11 to see your program. Adjust.
9 steps seems like a lot, but, believe me, it's easier done than said. Give it a try. Do it carefully. In theory, if you make a mistake, you can simply modify the program to fix it. But, at your level of experience, you may find it easier to simply Stop recording and start over.
To Use Macro
Position cursor at start of relevant paragraph.
Execute macro. If you took my advice and assigned it to a keystroke, just tap the keystroke. If not, tap Alt-F8 to see a list of your macros. Select the one you want, and click Run.

VBA script to insert anchor position for autoshapes in Microsoft Word 2007

I'm beyond the limits of my kindergarten-level VBA skills so would like to ask if anyone here can help me write a VBA script to help me work stepwise through my Word document and adjust the anchoring position of all the AutoShapes in the document.
I have a 400-page book in Microsoft Word with at least one and sometimes several marginalia (sidenote) on each page in a thin column to the left of the main body text column. These sidenotes are a concise 'pointer' to a particular point made in the body text and need to appear directly to that point's left.
Each sidenote is in its own AutoShape (within a textbox in that shape). The AutoShapes were placed by the author in an inconsistent way. Mostly they are anchored to a position on the page.
However, I need to repaginate. This will cause the body text to flow differently and I need the sidenotes to flow with it (approximately or exactly)!
So before I repaginate I want to make sure I anchor each AutoShape to the paragraph it belongs to and not to the page it is currently on.
I don't know if that can be done automatically, since I don't know how Word could deduce a purely spatial relationship between an AutoShape and a paragraph.
So I'm guessing I have to make do with a "semi-automatic" process. Something like this:
Press a button to start VBA script
Select next AutoShape
Prompt for user to enter cursor in body text where anchor is to be placed
Resume macro
Place anchor for that AutoShape in that position
Change vertical position paramater of AutoShape to "relative to paragraph"
and "0 mm"
(Alternative, not 0 mm but another value deduced to more
accurately position AutoShape)
Change width parameter of AutoShape to
a particular fixed value 37 mm (some of them were a little
inaccurately drawn)
End cycle and go back to beginning to
Select next AutoShape
Hope that is all understandable.
I've tried to record a VBA script to do some of this but have no idea how to build in the user prompt.
Any help much appreciated!
Craig
You may be better off creating a macro that works on one shape at a time, or anchor all the shapes manually (which you're almost doing anyway) and then write a macro to take care of the various parameters and settings you want.
If you really want to prompt the user while the macro is running you'll need to look into modeless dialogs (not possible on the Mac). See this link: http://www.bettersolutions.com/vba/VXV113/SE846743531.htm
Basically, you'd have to create your own dialog and then show it modelessly so that the user could still place the cursor before hitting OK. If you're new to VBA, this could be difficult to set up.
While searching for solutions to this, I found a post on another forum from someone trying to do something very similar. He was developing a set of tools for editors using Word and until I find the ultimate solution I am using his "Shapes" tool which allows me to change parameters on each AutoShape I select at-a-click instead of opening up and closing a dialogue box each time, plus selecting a different tab each time... His tools can be downloaded at his Editors' Toolkit website.

How to assign themes and Quickstyles in Word VBA

Where I work a department has created several theme files and quickstyle colours they want used in different circumstances.
I am wanting to create a macro that when run would save the theme automatically, and then assign a quickstyle colour group.
I have tried the macro recorder does not provide any hints as the macro is blank after attempting to record the actions, this is using either the mouse or keyboard. Searched everwhere and no solutions.
I can create the ribbon tab and buttons where we will call the macros from, I have already created macros and forms to populate documents with addresses etc.
But I cannot find any where I can set and save a theme or quick style and or colours.
A good idea for VBA is always to look into the Object Explorer in the IDE. Just press F2 while in the VBA Editor and type in the search field "theme".
There are the methods ActiveDocument.ApplyDocumentTheme(Filename as string) and ActiveDocument.ApplyTheme(Name as string). For quick styles you'll find also methods.
I don't have the time to test it, but I guess here you can go on.