Build an Automatic Document Template for Word
An Introduction to Microsoft Word UserForms
Part 2: Building the UserForm
Introduction
This project will make use of a custom-built dialog box to
collect information from the user. Such a custom dialog box, called
a UserForm, is created and powered by VBA. This second part of the
tutorial deals with building a UserForm to collect all the necessary
information needed to complete the document created in the first
part of the tutorial.
The document, the UserForm and its accompanying VBA code are
contained within the same file. The work of building and coding the
UserForm is done using in Word's Visual Basic Editor.
The Visual Basic Editor
For this step you need your document open in Word although the job
of building the UserForm will be done in the Visual Basic Editor.
Open the Visual Basic Editor by going to Tools > Macro >
Visual Basic Editor or use the keyboard shortcut Alt+F11.
Unless you have previously made changes here, the Visual Basic
Editor opens with an empty code window, with Project Explorer
and Properties panes displayed on the left of the main
window. If they are not displayed, you can switch on the Project
Explorer and Properties panes from the View menu.
The Project Explorer pane is used to navigate through the various
objects that you will be working with. It works a bit like Windows
Explorer with items grouped into a hierarchy of folders. Here you
can see a reference to the documents currently open: the Normal template
(which opens and is hidden whenever Word opens) and the letter you
are working on. In this example the letter has been given the file
name InterviewLetter.doc. Any other open documents will be
listed here too.
In the Project Explorer pane click on the name of your letter
document to select it and go to Insert > UserForm. This
opens a blank UserForm in the code window, and an entry for the
UserForm in the Project Explorer pane, and displays the Toolbox...
You will use the blank UserForm to build a custom dialog box to
help your user complete the letter automatically. The Toolbox
contains all the objects you might need to put on your form. If it
does not appear either click the Toolbox button on the Visual
Basic Editor toolbar or go to View > Toolbox.
Name and Caption the UserForm
In the Project Explorer click UserForm1 to select it and
then move to the Properties Window below. The Properties Window
shows a list of the properties of the currently selected object, in
this case the UserForm itself.
Change the Name property to something more meaningful
(object names must not contain spaces and it is customary to prefix
form names with the code frm). This example uses the name frmInterviewInvitation.
Change the Caption property to what you would like to see
on the form's header bar (the coloured bar at the top of each dialog
box and window). This is what the user will see on the dialog box so
choose something suitable. This example uses the caption Invitation
to Interview.
When you make these changes you will see corresponding changes to
the form itself and to the entries in the Project Explorer pane...
NOTE: You can save your work at any time by going to
File > Save or clicking the Save button in either
the Visual Basic Editor window or in the Word document window. The
UserForm is saved as part of your letter document so, whilst you are
still developing your new template, remember to save your changes
whenever you close the document.
The next step is to add objects, called Controls to the
form. Controls can take the form of a TextBox (used to enter
free text), a ComboBox (which offers the user a drop-down
list of options, an Option Group (where the user can make a
choice by clicking Radio Buttons), a Check Box (where the
user places a tick to select an item) or a Command Button (that
the user clicks to give an instruction).
There are several other controls in the Visual Basic Editor
toolbox and more can be added (such as a Calendar) in the
form of ActiveX Controls.
Adding a Text Box
If
you require only text input from the user, a TextBox control
will suffice. Click the TextBox tool on the toolbox then
click somewhere on the UserForm. A selected textbox control appears
on the UserForm. You can move the control by dragging one of its
edges, or change its size by dragging one of the white rectangles
around its border. Resize the textbox and drag it to a suitable
position on the UserForm, leaving enough room for a label if you
plan to add one.
The Visual Basic Editor automatically assigns a name to each
control you create (e.g. TextBox1). You can make the job of
code writing much easier by giving each control a meaningful name.
It would be sensible to give the textbox the same name as the
bookmark it is related to. It is also conventional, but not
essential, to prefix the name with a code that indicates the type of
control. In this example, the first textbox will supply text to the RecipientName
bookmark so it has been given the name txtRecipientName.
With the textbox selected use the Properties pane to change its Name
property to something more relevant.
Adding a Label
Most
controls need a label. Click the Label tool on the toolbox
and click on the UserForm to create a label. The label's name is not
really important in this instance but its content is. You can add
content to a label either by clicking inside the label and typing
directly into it, or by changing the label's Caption property
in the Properties pane.
NOTE: Avoid the temptation to double-click on an
object on the UserForm. The Visual Basic Editor interprets this as
an instruction to open a code event procedure for the object - handy
when you are writing the form's code but you don't need it right
now. If you do it accidentally just press Ctrl+Tab until you
return to the form design window (or use the Window menu to
find it), or double-click the form's name in the Project Explorer
pane.
The label can be resized in the same way as the textbox and can
contain large amounts of text if necessary. Text will wrap and flow
within the label as its shape and size are changed. Make sure that
your label is big enough to display all your text. A quick way to
resize a label to fit its caption exactly is to double-click one of
the resizing handles.
Move the label to its correct position and deselect it so you can
see how it looks. You can check its final appearance by pressing F5
to preview the form.
Text Box Variations
By default a textbox permits only one line of text. This is fine
for most cases (such as the Recipient Name) but sometimes you
want the user to be able to enter several lines, as will be the case
with the Recipient Address textbox. The control is drawn in
the same way but this time set the MultiLine property to True.
Normally you would also want to provide a scrollbar so set the ScrollBars
property to 2-fmScrollBarsVertical. When entering
data into this type of textbox the user should press Ctrl+Enter or
Shift+Enter to create a new line. Another option is to set
the EnterKeyBehaviour property of the textbox to True. When
you do this the user can create a new line in the textbox just by
pressing the Enter key.
NOTE: You can offer users hints by making use of a
control's ControlTipText property. Enter a short message that
you would like to appear as a tool tip when the user pauses their
mouse over the control...
Offer Choices with a Combo Box
A
combo box provides a simple way to offer a familiar drop-down list
of entries from which the user can make a choice. Draw a combo box
in the same way as you would a textbox, using the ComboBox
tool.
When using a combo box you can choose whether or not to allow the
user to make any entry, using the control like a textbox, or to
limit their entries to those on your list. If you want to limit the
user to the list you must set the MatchRequired property of
the combo box to True.
Use the Name property to give your combo box a meaningful
name. It is customary to use the prefix cbo when naming combo
boxes. This one is called cboInterviewLocation.
NOTE: Most controls have many different property
options available. The most commonly used properties are set as
defaults. To find out more about any property, click on the property
in the Properties pane and press the F1 key.
The task of creating the list itself is performed by a code
procedure when the form opens. That will be dealt with later.
Offer Choices with an Option Group
Combo boxes can offer a large list of choices, but when you want
to offer the user just a few choices sometimes an option group is
more appropriate. An Option Group is a collection of Option
Buttons (sometimes called Radio Buttons) placed within a Frame
(in fact option buttons on a VBA UserForm do not need to be
placed within a frame to work as a group, but it helps the user to
understand that they work together).
When building an option group you can choose whether to use Option
Buttons, Checkboxes or Toggle Buttons all of which
will work the same way. Most commonly option buttons are used. When
working as a group the user may only select one option. If they
select another the previous choice is deselected.
In this example an option group is used to offer the user a
choice of greetings with which to end the letter.
First, draw a frame on the UserForm. Don't worry too much about
its exact size and shape - you can adjust that later. Use its Caption
property to add a label to the top of the frame.
Now use the OptionButton tool to draw the required number
of option buttons inside the frame, filling the descriptive label of
each one by entering text into the Caption property or by
typing directly into the label.
Use the Name property to give each option button a
meaningful name. In my example I have called them optGreeting1
to optGreeting4. If you have chosen to place your option buttons
inside a frame they will automatically behave together as a group.
If you prefer not to use a frame - or wish to have more than one
group of buttons - make use of the GroupName property of each
option button. Controls with the same GroupName will work together
as a group even if they are not enclosed inside a frame.
Add the Command Buttons
Finally, the form needs some buttons to initiate the various
tasks the form has to perform. First, an OK button that will
result in the data being transferred to the standard letter; a Cancel
button to close the form and throw away the letter if the user
changes their mind; and (optionally) a Clear Form button to
reset the form to its original values if the user wants to start
again.
In
VBA these are known as Command buttons. Like the other controls they
can be drawn on the form using the toolbox Command Button tool.
Use the Properties pane to give the buttons meaningful names and
captions. The convention is to prefix the name of a command button
with cmd (e.g. cmdClear, cmdOK and cmdCancel).
Three additional properties are useful when creating command
buttons:
The Accelerator property allows you to specify a letter
that the user can type as an alternative to clicking the button.
This letter should be one of those included in the button's caption.
That letter then appears underlined on the caption. To assign an
accelerator to a different sort of control, such as a combo box or
text box, set the Accelerator property of its label.
The Default property, if set to True, causes that
button to be 'clicked' if the user presses the Enter key on
their keyboard. This property should only be set on one of the
buttons, and would normally be applied to the OK button.
Whilst generally useful, you might want to omit this feature if you
think the user is likely to press Enter before they have completed
the form as it might result in the form closing prematurely. The
'default' button also remains highlighted to indicate its purpose
unless the user tabs to a different button.
The Cancel property, if set to True, has the effect
of 'clicking' the button to which it is applied when the user
presses the Escape (or Esc) key on their keyboard.
This feature could usefully be applied to the Cancel button.
That completes the design of the form. Before proceeding any
further check its appearance to the user by selecting the form and
pressing the F5 key. You may want to alter the form's layout
or size before adding the VBA code (although the form's design can
be modified at any time).
NOTE: When arranging controls on a form, you can
move several controls together, retaining their relative positions,
by performing a multiple select. The easiest way to do this is to
use the mouse to draw a selection rectangle enclosing the controls
you want to select. When you release the mouse all the enclosed
controls are selected and can be moved as one.
 |
> > > |
 |
Set the Tab Order
A final but important step in setting up the form is to check the
Tab Order. This is the order in which the various controls
will be visited when a user moves around the form by pressing their Tab
key. An illogical order can be extremely frustrating for the user.
Go to View > Tab Order to display a dialog box listing all
the controls on the form in their current order. Use the buttons to
rearrange the order if necessary. You can ignore the Label controls
because, although they are listed here, they will be ignored by the
tab order.
The completed form is shown below:
The Next Step...
In the next step of the tutorial we write the VBA code that will
power the form.
>>>GO TO THE NEXT
STEP>>> |