|
|
|
 |
Using MacroButton fields
|
Article contributed by Graham
Mayor, Jonathan West and Hak-lok
Ng
The macrobutton field can be used as a text marker within a template, or, as
the name implies, it can be used to run a macro.
Using MacroButton fields as a text marker
You can use a MacroButton field that doesn't actually run a macro but simply displays a prompt and allows
the user to click on the prompt and type. To do this, insert a field like:
{ MACROBUTTON NoMacro [Click here and type name] }
Change “Click here and type name” to whatever text you
require. Press F9 to update the field, which will also display the display text instead of
the field code:

See Microsoft's fax templates (which are supplied
with Word) for examples of this. Also see:
How to create a template that makes it easy for users to
“fill in the blanks”, without doing any programming.
Using {MacroButton} fields to run a macro
For this, use a field like this:
{ MACROBUTTON MyMacroName [Double-click here to run macro] }
See: Run a macro when a user double-clicks a button in the document
for more details of how to create the field.
Macro button fields can make it very easy to set up fairly sophisticated
templates with very little programming effort. For example, see:
Using {Macrobutton} fields to insert information from the Outlook Address Book into documents such as letters.
But they can be useful for all sorts of things for some more examples, see:
Using hyperlinks in protected forms
Enable a user to double-click text in a document to change its value
Organizing your macros
Also see the checkboxes in the Microsoft Fax templates which are supplied
with Word, where the macros associated with the fields insert AutoText entries,
one AutoText entry being a MacroButton field containing a checked checkbox
symbol, the other being a MacroButton field containing an unchecked one. If you
copy those fields, and the macros and AutoText entries associated with them
(using the Organiser) into your own templates, you can use them unmodified.
Passing arguments to MacroButton fields
Macros assigned to MacroButton fields cannot take arguments. In fact if you
want to be semantic, macros cannot take arguments, ever, because a macro is
defined as a public subroutine that takes no arguments, which is why subroutines
that do take arguments are not shown in the list when you select Tools
+ Macro + Macros.
However, depending on your situation, you can get round this in a number of
ways, the best two (depending on the circumstances) being.
|
1.
|
Your macro can read the value from a Custom Document Property, or a
Document Variable.
|
|
2.
|
You can insert a Private field within your MacroButton field.
The first thing your macro should do is look for the code of the Private
field (which by definition will be the second field of the Selection) and
read the value that you want to pass
This method is especially good if you have more than one MacroButton
field in a single document which you want to call the same macro, but with
the macro operating on a different variable in each case.
For example, you could create a nested field as follows:
{ { Private Hello world }Macrobutton
TestMacro [Double-click to run macro]}
... which would display:

... and the macro could look like this:
Sub TestMacro()
Dim MyString As String
'Ignore first 9 characters
of the private field -
the word 'Private', and the spaces
MyString = Mid$(Selection.Fields(2).Code, 9)
MsgBox MyString
End Sub
|
|
3.
|
Instead of a Private field, you could use an Addin field within your MacroButton field.
An Addin field is very similar to a Private field but even more private -
see Using Addin Fields.
Note that the order matters; the following works as one would wish it
to:
{ Macrobutton
TestMacro [Double-click to run macro]{ Addin }}
... but the following makes the MacroButton field's display text
invisible:
{ { Addin }Macrobutton
TestMacro [Double-click to run macro]}
The macro could look like this:
Sub TestMacro()
Dim MyString As String
MyString = Selection.Fields(2).Data
MsgBox MyString
End Sub
|
|