In older versions of Word one could select a sentence, or a group of words, and then ask Word to change the case. You can still do this except with title case, which has been changed to "Capitalize Each Word," so users can no longer quickly change to
title case. You either have to do the capitalization manually, or go back and un-capitalize all the words, such as articles and prepositions, that should not be capitalized in a title.
Is there someone out there who could provide some enlightenment into this bizarre loss of functionality, and possibly a workaround? Thanks.
Your discription of the issue isn't exactly accurate. "Capitalize Each Word" replaced "Title Case" in Word 2007. Both Word 2007 and 2010 are "older versions" of Word.
The change basically reflects what was happening in even older versions of Word i.e., if you type, select and apply "Title Case" to "a tale of two cities" in Word 2003, you end up with "A Tale Of Two Cities" or each word is capitalized.
Here is a macro you can run on selected text which does a decent job:
Sub MyTitleCase()
Dim oRng As Range
Dim oRng2 As Range
Dim arrFind As Variant
Dim arrReplace As Variant
Dim i As Long
Dim m As Long
Set oRng = Selection.Range
If Selection.Type = wdSelectionIP Then
MsgBox "Select the text you want to process.", vbOKOnly, "Nothing Selected"
Exit Sub
End If
'Format the selected text using title case.
oRng.Case = wdTitleWord
'Create exceptions
arrFind = Split("A,An,And,As,At,But,By,For,If,In,Of,On,Or,The,To,With", ",")
'Create replacements
arrReplace = Split("a,an,and,as,at,but,by,for,if,in,of,on,or,the,to,with", ",")
With oRng
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Wrap = wdFindStop
.MatchWholeWord = True
.MatchCase = True
For i = LBound(arrFind) To UBound(arrFind)
.Text = arrFind(i)
.Replacement.Text = arrReplace(i)
.Execute Replace:=wdReplaceAll
Next i
End With
'Ensure first word is a capitalized.
oRng.Characters.First.Case = wdUpperCase
'Ensure first word after a colon is capitalized.
Set oRng2 = oRng.Duplicate
oRng2.Start = oRng.Start + InStr(1, oRng, ":")
'Move to character following colon.
oRng2.MoveStartWhile Cset:=" ", Count:=wdForward
If oRng.Start <> oRng2.Start Then
Beep
'Cap word following colon.
oRng2.Characters.First.Case = wdUpperCase
End If
End With
End Sub