Although Word’s built-in capabilities are amazing, there isn’t a format for everything. And when those built-in features fall short, you might be inclined to turn to macros. But if you’re trying to achieve complex formatting, consider fields instead. Word fields are extremely powerful and if you combine them with switches, you can do just about anything with them. I’m going to introduce the switches I rely on the most to solve unique formatting requirements.

This article assumes that you understand Word fields — how to insert them, how to refer to them, and how to update them. If you don’t, here’s a crash course:

You can enter fields from the Field dialog box. In Word 2003, choose Field from the Insert menu. In Word 2007 and 2010, click the Insert tab and choose Field from the Quick Parts drop-down in the Text group. I find it easier to manually insert field expressions. In the examples we’ll be looking at, just type the text (such as PAGE \*Cardtext), then convert it to a field by selecting the text and pressing [Ctrl]+[F9]. Many of the examples combine fields. When this is the case, convert each field one at a time. Then, select the entire expression and convert it.

In addition, many of the expressions refer to a text field (for example, #1). To name such a field, right-click it, choose Properties, and enter the name in the Bookmark text box. These named fields are easy to spot in the examples, as they all begin with the tf prefix. Be sure to click the Calculate On Exit option when using this technique to update field expressions.

Note: This article is also available as a PDF download.

1: Suppressing 0 in a calculated field

If you need to do a little arithmetic in a Word form, you can use a calculated field. Even with its limitations, the feature is powerful and easy to implement. When the built-in formats for displaying the calculated results aren’t enough, use the switch \#. For instance, the switch shown in Figure A suppresses 0 in a calculated field. Figure B shows the results of using this switch. If the result of the calculation is 0, the field won’t display anything at all. In fact, this particular formatting switch won’t display a negative number either.

Figure A

This formatting switch suppresses the value 0.

Figure B

Item Total is a calculated field that, thanks to a formatting switch, won’t display 0.

2: Spelling out numbers

The \*Cardtext switch spells out values. For me, the most common use for this switch is with page numbering. Figure C shows a typical page-numbering scheme in a document header. Word combines two fields and some text to fulfill this arrangement:

Page { PAGE } of { NUMPAGES }

Figure C

This combination of regular text and fields creates a useful page-numbering scheme that’s adequate for almost any document.

The text components, Page and of, are regular text. The {PAGE} field returns the current page number, and {NUMPAGES} returns the number of total pages. Add the \*Cardtext switch to one or both fields as follows to display the current and total page numbers as words instead of digits (Figure D):

Page { PAGE \*Cardtext } of { NUMPAGES \*Cardtext }

Figure D

Adding the \*Cardtext switch displays words instead of digits.

What you see in Figure D might not be finished, depending on your needs. For instance, adding the \*Caps switch will force the converted word values to use proper case, as shown in Figure E.

Page { PAGE \*Cardtext \*Caps } of { NUMPAGES \*Cardtext \*Caps }

Figure E

A second switch displays the page numbers, now words, in proper case.

3: Formatting dates

Displaying dates is a common task and often, you’ll just enter the date manually. The date field displays the current date and is useful in templates and other automated processes. There are a number of formatting switches that you can use to control the results. For instance, the date in Figure F is the result of the following field and formatting switch:

{ DATE \@"dddd, MMMM d, yyyy" }

Figure F

A formatting switch displays this long date format instead of the default mm/dd/yy.

Table A displays the date format codes. You must use an uppercase M, as the lowercase m denotes  minute formats. Use commas or other appropriate punctuation to separate components.

Table A



d Displays the day as a number, without a leading zero for single-digit days
dd Displays the day as a number, with a leading zero for single-digit days
ddd Displays the day as a three-letter abbreviation
dddd Displays the day using its full name
M Displays the month as a number, without a leading zero for single-digit months
MM Displays the month as a number, with a leading zero for single-digit months
MMM Displays the month as a three-letter abbreviation
MMMM Displays the month using its full name
yy Displays the year as two digits, with a leading zero for single-digit years
yyyy Displays a year’s four digits

4: Converting text to title case

Sometimes, switches don’t have the desired effect and troubleshooting is more trouble than it’s worth. For instance, adding the \*Caps switch to convert a mixed-case string to title case doesn’t always work. Figure G shows an example where this switch alone just couldn’t get the job done.

Figure G

The \*Caps switch can’t convert all the characters in this string.

Of course, this example is a bit extreme, but if you’re not in control of the original data, you should take every precaution. When converting unknown case using \*Caps or \*FirstCap, convert the string to all lowercase first, as follows:

{ tfTitle \*lower \*Caps }

This combination first converts the string to lowercase. Then, the \*Caps switch will work consistently.

5: Spelling out dollar amounts

When you’re in a pinch, the \*Dollartext switch might be just what you need, but it’s far from perfect. This switch evaluates a value and returns the same type of text you’d write on a check — almost. Let’s take a quick look at this switch and then consider its limitations. You can decide whether it’s close enough for your needs. Figure H shows the following expression evaluating the value 133.98:

{  tfValue1 \*Dollartext \*FirstCap }

Figure H

The \*Dollartext switch evaluates a value as a dollar and cents amount.

Adding the \*FirstCap switch starts the first word with an uppercase character. There’s only one real limitation and that’s the absence of the word dollar. It’s a small detail and frankly, something you can probably live without.

6: Formatting ZIP codes

If you merge address data, you’ve probably run into a small problem. Some ZIP codes are nine digits and some just five. Neither format is mandatory, so you’ll often have a mix of both in the same dataset. A couple of number format switches can take care of this rather neatly using the following field expression:

{ IF { tfZIPCode } > 99999 { tfZIPCode \# "00000'-'0000" } {tfZIPCode \# "00000" }

This expression uses switches to format a ZIP code value: 12345-1234 or 12345. As long as the original ZIP value is only digits, this simple expression works fine. It does have one flaw: You must validate that the value has nine digits or only five digits before formatting. If there’s a data input error, such as a ZIP code with eight digits instead of nine, this expression will accommodate by inserting a leading zero. It would probably be easier to attach a validating UDF than to come up with a field expression that can handle that possibility.

7: Adding text

Depending on the circumstances, you don’t need a switch to add text. For instance, the following field expression displays the text The End on a document’s last page, and it does so without needing a special switch:

{ IF { PAGE } < { NUMPAGES } {PAGE } "The End"

While there isn’t an explicit switch character for text, it’s good to know that you can add text in this manner: Simply add the delimited string to the numeric format, as shown in Figure I. For example, the following expression would display a 6% sales tax and denote it as a tax:

{ tfSubtotal * .06 \# "$#.00 'tax' " }

Figure I

You can add text to a numeric format.

The rule of use is simple: Enclose the string in apostrophe characters within the format’s quotation marks.

8: Displaying ordinal values

You can display an ordinal value using the \* Ordinal switch, with one minor limitation: It won’t use superscript. It’s a small thing, and probably won’t matter to most. The combination of date fields displays a long date, shown in Figure J, using \* Ordinal to format the day of the month:

{ DATE \@ "dddd', the'" }{ CREATEDATE \@ "d" \* Ordinal }{ DATE \@ "' of' MMMM, yyyy" }

Figure J

Use the \* Ordinal switch to display ordinals without the superscript format.

Notice the use of the text switches (#7) to build the complete string.

9: Displaying text ordinal values

Figure K shows a result similar to Figure J in #8, but with one subtle difference. The ordinal is displayed as a text value. Everything’s the same except that I replaced the \* Ordinal switch with \*OrdText, as follows:

{ DATE \@ "dddd', the'" }{ DATE \@ "d" \* OrdText }{ DATE \@ "' of' MMMM, yyyy" }

Figure K

The \*Ordtext switch displays a text ordinal value.

10: Displaying alphabetic page numbers

It’s not unusual to find portions of complex documents numbered alphabetically instead of numerically. Using the \*alphabetic and \*ALPHABETIC switches, you can knock out this requirement quickly. Figure L shows the result of the following simple field expression in a document’s header:

{PAGE \*alphabetic }

Figure L

You can number pages alphabetically — it isn’t as odd as it sounds.

Use \* ALPHABETIC to return uppercase letters. Or use a combination of \* alphabetic and \* FirstCap to uppercase the first letter only.