Swapping User Names

I have a client who wants the user name that appears in my Microsoft Word comments and revisions to match the level of editing being done. For example, in a document I am copyediting my user name should read “copyeditor” and in a document I am proofreading it should read “proofreader.” Manually changing the user name when I switch between documents doesn’t take a lot of time, but it is a bit of a pain to do repeatedly. The manual change also creates the opportunity for misspellings and inconsistencies to creep in.

Figure 1: Each time the macro is run, Word’s user name is set to the next name in the series

To automate changing the user name, I created a macro that steps through a series of names and assigns the next name in the series each time the macro is run. (It also changes the user initials.) After the last name has been assigned, the macro starts again with the first name in the series. Editing the user names in the series involves a little adjustment of the macro’s code but is not too complicated.

Using the Macro

The version of the macro presented below has four user-name-and-initial options. Each time the macro is run, the user name will be updated to the next name in the series and this new user name will appear in the Word status bar (in the lower left corner of the screen) until a key or mouse button is pressed. If you would also like to have a pop-up dialogue box display the updated name, delete the apostrophe in the second to last line, before “MsgBox.”

Manually entering a user name in Word will not affect the way the macro works. If a user name that is not part of the series has been manually entered, the first user name in the series (in this case, “Dev Editor”) will be substituted when the macro is run. While the macro sets user initials, it doesn’t check to see if they have been manually edited. Any manual edits of user initials will be overwritten when the macro is run.

I assign this macro to the keyboard shortcut Alt + u to make it easier to run. If you would like to have this macro automatically add that shortcut, delete the apostrophe in the second line, before “KeyBindings.” You will have to run the macro once manually before the shortcut will be set.

Customizing the User Names

You will likely want to edit the series of user names. This involves a little adjustment of the “case” commands in the macro but is not too complicated of a process. The steps are as follows.

Determine how long of a series you want. To remove a name from the series, delete one set of three lines: a line beginning with “Case” and the following two lines that begin “NewName” and “NewInitials.” Don’t delete the final “Case Else” statement, though. To add a name to the series, duplicate the three lines mentioned above and place them before the final “Case Else” section.

Adjust the user names and initials. On the lines beginning  with “NewName” and “NewInitials” change the text in quotes to the desired user name and initials. Then set the name in the first line that starts with “Case” to match the “NewName” field in the “Case Else” section. Finally, change the name in each of the other “Case” lines to match the “NewName” field in the section that precedes it.


 The Code

Sub Swap_User_Names()
     'KeyBindings.add wdKeyCategoryMacro, "Swap_User_Names", BuildKeyCode(wdKeyAlt, wdKeyU)
     OldName = Application.UserName
     Select Case OldName
         Case "Dev Editor"
             NewName = "Copyeditor"
             NewInitials = "CE"
         Case "Copyeditor" 
             NewName = "Proofreader"
             NewInitials = "PR"
         Case "Proofreader" 
             NewName = "Cold Reader"
             NewInitials = "CR"
         Case Else
             NewName = "Dev Editor"
             NewInitials = "DE"
     End Select
     Application.UserName = NewName
     Application.UserInitials = NewInitials
     StatusBar = "User Name is now " & NewName
     'MsgBox ("User Name is now " & NewName)
 End Sub

Tools for Style Setters

Word users commonly adjust the formatting of text in four ways:

  • Assigning a paragraph style such as No Spacing or Block Text
  • Assigning a character style such as Strong or Emphasis
  • Applying manual paragraph formatting such as indenting and line spacing
  • Applying manual character formatting such as italics or underlining

Users can easily make all of these format adjustments using the ribbon or shortcut keys. However, figuring out after the fact which styles have been applied or where a particular bit of formatting comes from can take some work. The ribbon can indicate some of the formatting that has been applied, but not all of it and not consistently. For example, the Styles section of the ribbon and the Styles pane indicate at most one applied style. If both a paragraph style and a character style have been applied, the field will only indicate the character style. The ribbon also doesn’t disclose whether the indicated style has been overridden by manual adjustments.

A solution to this problem is available via the Style Inspector pane the Reveal Formatting pane. Unfortunately, Microsoft has hidden the former—neither a button on the ribbon nor a built-in shortcut is provided. And access to the latter is only slightly better.

Style Inspector

Figure 1: The Style Inspector Pane

The Style Inspector pane (Figure 1) provides a summary of the formatting applied at the current cursor location, indicating the names of assigned paragraph and character styles (in white fields) and manually applied paragraph and character formatting (in gray fields). Beside each field is a button that allows the user to reset that particular type of formatting. And included at the bottom of the pane are buttons to launch the Reveal Formatting pane, create a new style, and clear all formatting at one time.

While the interface clearly lays things out for the user, more is available if you poke around. If you want to see what formatting the styles provide, you need to hover your cursor over the respective fields. (Or you can bring up the Reveal Formatting pane). The paragraph and character style fields are also drop-down menus that provide access to additional commands. Some of these duplicate the functions of other easier-to-access buttons, though.

Another not-immediately-obvious quirk of this pane is that it provides clearer information if you have placed your cursor within the text you want to analyze rather than selected the text. If you select text that contains more than one paragraph style, the paragraph formatting field will appear empty; the same happens if your selection contains two character styles. But seeing a blank field at least indicates a problem. If, however, you select text containing two or more manual character format changes or paragraph format changes, the field will identify only the first one in the selection. However, the buttons will still remove formatting, whether or not the fields identify it.

Given the usefulness of this pane, why doesn’t it have a predefined shortcut or button to provide access to it? The easiest built-in path is to use the shortcut CTRL + ALT + SHIFT + S to bring up the Styles pane and then press the Style Inspector button (the middle button in the lower left corner of the pane). If you find yourself using Style Inspector frequently, you can create a keyboard shortcut to the “FormattingPaneCurrent” command. Or you can create a quick access toolbar button or ribbon button for the “Style Inspector” command. (Why two different names? Apparently to make things even more complicated.)

NOTE: Microsoft Office Word 2007 Essential Reference for Power Users by Matthew Strawbridge indicates two additional lurking issues. The first is that the manual paragraph styling field does not indicate all types of paragraph formatting. Unfortunately Strawbridge doesn’t state which ones. The second is that the text-level field will not indicate that any formatting has been applied if you place the cursor at either end of a stretch of formatted text.

Reveal Formatting

Figure 2: The Reveal Formatting Pane

The Reveal Formatting pane (Figure 2) provides a detailed list of formatting at the font, paragraph, and section levels and acts as a nice supplement to the Style Inspector. The “Distinguish style source” toggle, located at the bottom of the pane, adds headings to the list to clarify which formats have been manually applied and which are applied via a style. This is particularly useful because it indicates when a paragraph style includes character-level formatting. The “selected text” field is also a drop-down menu providing access to a few additional commands.

Another useful feature is the “Compare to another selection” option that indicates how the format of two selections differ. This tool is toggled on and off using the control near the top of the pane.

Unlike Style Inspector, Reveal Formatting does have a predefined shortcut key: Shift + F1. Unfortunately, it does not include a button to launch the Style Inspector. (This is another reason to set up a Style Inspector shortcut).

As with all Word features, Reveal Formatting isn’t perfect:

  • The “Show all formatting marks” toggle at the bottom on the page simply duplicates the “show/hide ¶” toggle on the ribbon.
  • This pane doesn’t provide any way to adjust styles, though there is a Clear Formatting option under the Selected Text drop-down menu.
  • If the selected text contains more than one character or paragraph style, the field only identifies the first style. Multiple applications of manually applied styling also causes this misreporting.
  • The drop-down menu commands “Apply formatting of surrounding text” and “Clear formatting” really only work as expected when applied to selections.

Who’s Afraid of “Bad, Big Wolf”? (Part 1)

While recently reading Mary Norris’s Between You & Me: Confessions of A Comma Queen, I was overjoyed to see that she discusses comma use related to adjacent adjectives, which seems to be an underdiscussed topic. The rules of thumb provided in popular style and usage guides work well in a lot of cases, but the basis for these rules isn’t ever explained, and I seem to be forever coming across exceptions. For example, Garner’s Modern American Usage states:

When two adjectives modifying the same noun are related in sense, they should be separated by a comma (or else and). So we say a big, sprawling house and a poignant, uplifting film. But when the consecutive adjectives are unrelated, there shouldn’t be a comma—hence a big white house and a poignant foreign film. (19)

This makes sense as long as you don’t need clarification regarding what related in sense means. A search of the Corpus of Historical American English identifies thirteen published uses of big, sprawling and seven uses of big sprawling, so there may be some disagreement about how related the terms are. Big white does somewhat better: it appears 501 times in the Corpus while big, white only appears 58 times.

Adjective Categories

Although none of the major style guides provide a definition of related in sense, linguists long ago developed a list—or, more accurately, different versions of a list—that does just this. The following list (from Adjective Order in English: A Semantic Account with Cross-linguistic Applications by Enrica Rosato) identifies eight classes of adjective. To Rosato’s eight classes I have added a ninth category (attributive noun/qualifying adjective) that some other sources mention as important to consider.

 

Category Example
1. General opinion: Adjectives that can apply to any noun ugly
2. Specific opinion: Adjectives to describe particular kinds of noun derelict
3. Size large
4. Shape rectangular
5. Age fifty-year-old
6. Color black
7. Origin (nationality) Malaysian
8. Material steel
9. Attributive noun/qualifying adjective oil
    Noun being described tanker

 

This list provides a good starting point for determining the relationships between adjectives. In Garner’s example of a big white house, big falls under the category Size and white falls under Color. Since these adjectives aren’t in the same category and are therefore unrelated, no comma would be needed. In the case of a big, sprawling house one could argue that sprawling is not necessarily related to size: Merriam-Webster’s Collegiate Dictionary defines it as to spread or develop irregularly or without restraint, which suggests that it would fall into the Shape category. Based on this guidance, the adjectives again fall into two categories, and a comma would not be required.

Adjective Order

The list also indicates the order in which adjectives typically appear. That a regular order exists helps explain a second rule of thumb for comma use, which appears in Morson’s English Guide for Court Reporters as “If reversing the order of the adjectives does not affect the naturalness of the sentence, use the comma.” That is, poignant, uplifting film sounds as natural as uplifting, poignant film, so a comma should be used. But white big house sound decidedly awkward, so a comma would be out of place.

The Chicago Manual of Style phrases the rule slightly differently, stating that coordinate adjectives (those that should be separated by commas) “can also usually be reversed in order and still make sense.” Phrased in this way, this rule seems to be of limited usefulness: both black ugly tanker and ugly black tanker are perfectly understandable, if not both perfectly natural sounding. Chicago’s rule seems best suited for resolving relatively uncommon situations, such as where an attributive noun could be misidentified as an adjective: for example, ornery fur trapper makes sense while fur ornery trapper doesn’t.

With naturalness, as with related in sense, we have rely on an intuitive sense of what the undefined term means. Mary Norris alludes to this problem in Between You & Me, in a passage in which she also applies the rule “if you can substitute ‘and’ for the comma it belongs there”:

Then it happened again: “She smiled that stunning, wide smile.” The phrase “stunning and wide” doesn’t make it for me, and neither does “wide and stunning” (although I would have read right over “wide, stunning smile”). (106)

Applying the naturalness rule also requires a familiarity with the adjectives being used: venerable, lofty redwoods probably sounds more natural to most people than does old, tall trees. Using the adjective list (as well as a good dictionary) removes the necessity of relying on an innate sense of naturalness for decision making.

The problem with all of this is that there are idioms that don’t adhere to this logic (big bad wolf is a common example) as well as author preferences (as Mary Norris discovered). So in part 2, I will try to address a more important question: Does any of this really matter?

Counting Words by Chapter

When starting a new project I have found it very useful to develop a chapter-by-chapter word count for the manuscript: this lets me make sure my pace isn’t too fast or too slow and helps me develop a schedule for how many chapters per day I should cover. Developing this count by hand isn’t particularly efficient, so I recently decided to hunt down a macro to handle this work for me.

After a bit of online searching I found a macro posted by onesecondglance that did what I wanted. However it took a long time to analyze book-length Word documents, even after extensive rewriting. To replace it I developed new a macro using code by CuberChase as a starting point.

This macro queries the user for the name of the Word style applied to chapter headings (“Heading 1” is the default) and then counts words from the start of one heading to the start of the next. It also counts any words that appear before the first heading. It then creates a new word document and inserts into it the name of each chapter followed by that chapter’s word count. A tab character is inserted between each chapter name and word count so that the contents can be easily cut and pasted into an Excel spreadsheet.

As written the macro does have a few limitations, which I may get around to addressing if they present a problem:

  • It considers anything formatted using the heading style to be a heading, including blank lines, so make sure that the style is only applied to actual headings.
  • It does not count text in footnotes, endnotes or text boxes.
  • It does not like hidden track changes in headings and has been written to display all revisions before running. Because of this it will extract both the original and revised heading text.

 


The Code

Sub Chapter_Word_Count()
'Based on code from: http://stackoverflow.com/questions/17218587/how-to-parse-ms-word-document-by-style-with-vba

	Dim iCount As Integer
	Dim iArrayCount As Integer
	Dim bFound As Boolean
	Dim rParagraphs As Range
	Dim lCurPos As Long
	Dim iParNum As Integer
	Dim iOffset As Integer
	Dim rBody As Range
	Dim sMyStyle As String

        With ActiveWindow.View.RevisionsFilter
            .Markup = wdRevisionsMarkupAll
            .View = wdRevisionsViewFinal
        End With

	'Initialize 100-entry array
	Dim sArray() As String
	iArrayCount = 100
	iOffset = 0
	ReDim sArray(1 To 3, 1 To iArrayCount)

	'Collect name of style type
	sMyStyle = InputBox("What is the name of the Word style used for chapter headings?", "Count Chapter Words", "Heading 1")
	Application.ScreenUpdating = False

	'Move to top of the document
	Selection.HomeKey Unit:=wdStory

	'Set search parameters and look for the first instance
	With Selection.Find
		.ClearFormatting
		.Text = ""
		.Replacement.Text = ""
		.Forward = True
		.Wrap = wdFindContinue
		.Format = False
		.MatchCase = False
		.MatchWholeWord = False
		.MatchKashida = False
		.MatchDiacritics = False
		.MatchAlefHamza = False
		.MatchControl = False
		.MatchByte = False
		.MatchAllWordForms = False
		.MatchSoundsLike = False
		.MatchFuzzy = False
		.MatchWildcards = True
		.Style = sMyStyle
		.Execute
	End With

	'If found start loop to check for entries
	'counter added to avoid endless loops
	Do While Selection.Find.Found = True And iCount < 1000
	iCount = iCount + 1
	'Add results to array 
	If Selection.Find.Found Then 

		bFound = True
		lCurPos = ActiveDocument.Bookmarks("\EndOfSel").Start
		Set rParagraphs = ActiveDocument.Range(Start:=0, End:=lCurPos) 
		iParNum = rParagraphs.Paragraphs.Count 

		'Check array size and resize if necessary 
		If ii Mod iArrayCount = 0 Then ReDim Preserve sArray(1 To 3, 1 To UBound(sArray, 1) + iArrayCount) 
		'add an initial entry if doc doesn't start with a heading 
			If iCount = 1 And iParNum > 1 Then
				sArray(2, iCount) = "[Before first heading] "
				sArray(3, iCount) = 1
				iOffset = 1
			End If

			sArray(2, iCount + iOffset) = Selection.Text
			sArray(3, iCount + iOffset) = iParNum

			'Reset the find parameters
			Selection.Find.Execute
		End If
	Loop

	If bFound Then
		'Finalise the array to the actual size
		ReDim Preserve sArray(1 To 3, 1 To iCount + iOffset)

		'Calculate chapter lengths, including length of chapter heading
		For ii = LBound(sArray, 2) To UBound(sArray, 2) - 1
			'Select range of paragraphs to measure
			Set rBody = ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(CInt(sArray(3, ii))).Range.Start, _
                        End:=ActiveDocument.Paragraphs(CInt(sArray(3, ii + 1)) - 1).Range.End)
			sArray(1, ii) = rBody.ComputeStatistics(wdStatisticWords)
		Next ii
			Set rBody = ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(CInt(sArray(3, UBound(sArray, 2)))).Range.Start, _
                        End:=ActiveDocument.Bookmarks("\EndOfDoc").Range.End)
			sArray(1, UBound(sArray, 2)) = rBody.ComputeStatistics(wdStatisticWords)

		'Output results to a new document
		Application.ScreenUpdating = True
		Documents.Add
		For ii = LBound(sArray, 2) To UBound(sArray, 2)
			Selection.Text = Left(sArray(2, ii), Len(sArray(2, ii)) - 1) & Chr(9) & sArray(1, ii) & Chr(10)
			Selection.MoveRight wdCharacter, 1
		Next ii
		'If no headings found, return alternate message
		Else
			MsgBox "This document does not use the style " & sMyStyle, vbExclamation + vbOKOnly, "Bad Style Name"
	End If
End Sub

 

An Inline Commenting Macro

Inline comments—that is, comments inserted within the body of a document—can be a very useful alternative to Word’s built-in Comments tool (in a previous post I discuss their pros and cons). However, formatting them so that they stand out from the text requires a few extra keystrokes for each comment.

To make formatting less labor intensive, I cooked up a short macro (presented below) that automates the process. Its operation is very simple. If the user types a comment, selects it, and runs the macro, the comment will be reformatted: braces will be placed on either end of the comment, and the braces and comment will have the built-in Word style Strong applied to them. If the macro is run without any text being selected, a set of braces will be inserted, the Strong style will be applied to them, and the cursor placed between the braces, allowing a comment to be easily entered. For the macro to really save you work, you will need to assign it a keyboard shortcut (I use Ctrl+Alt+q).

Using a Word style allows all comments to be quickly reformatted by changing the definition of the style. It also allows all comments to be quickly selected using the Select All option in the Styles toolbar; this can be handy if you want to quickly delete or copy all comments. The macro’s use of the predefined Strong style can be a problem if you are using that style for other content in your document, but this can be fixed by changing the name of the style referenced in the macro. Since the macro applies one style to all comments, color-coding isn’t supported. However, if you prefer to color-code comments, one option is to replace the line in the macro stating

Selection.Range.Style = wdStyleStrong

with

Selection.Range.HighlightColorIndex = Options.DefaultHighlightColorIndex

to apply the current highlighting color, rather than a text style, to each inline comment as it is created.

Note: While poking around on the internet recently, I came across a similar but more elaborate set of macros, created by Professor Benjamin L. Read, for working with inline notes. If you are interested in color-coding your notes, his macros might be useful to try out.

 


The Code

Sub InsertInlineComment()
'Written by Michael Schuler, 2014.
'Recommended shortcut: CTRL+ALT+q
    Set myRange = Selection
    myRange.InsertBefore " {"
    myRange.InsertAfter "} "
    Selection.Range.Style = wdStyleStrong
    Selection.MoveLeft Count:=1
    Selection.MoveRight Count:=2
End Sub