Submacros are like
subroutines in a programming module; they allow you to place more than
one routine in a macro. This means you can create many macro routines
without having to create several separate macros. You should include
submacros that perform related functions within one particular macro.
For example, you might build a macro that contains all the routines
required for form handling and another that has all the routines needed
for report handling.
Only two steps are needed to add submacros to a macro:
Click and drag a submacro from the Action Catalog onto the macro. A submacro appears as in Figure 7.
Figure 7. The submacro allows you to create subroutines within a macro.
Add macro actions to each submacro. Figure 8 shows a macro with three submacros: OpenCustomers, OpenOrders, and CloseForm. The OpenCustomers submacro opens the Customer List form, showing all customers. The OpenOrders submacro opens the OrderList form displaying only orders placed in March and April of 2006, and the CloseForm submacro displays a message to the user and then closes the active window.
Figure 8. A macro with three submacros.
At times, you want a macro
action to execute only when a certain condition is true. Fortunately,
Access allows you to specify the conditions under which a macro action
sure that the Action Catalog is visible. (If it isn’t, click the Action
Catalog tool in the Show/Hide group of the Macro Tools Design tab of
Click and drag the If statement to the macro. It will appear as in Figure 9.
Figure 9. You
can designate the condition under which a macro action executes by
selecting If from the Program Flow node of the Action Catalog.
The macro pictured in Figure 10
evaluates information entered on a form. The macro evaluates the date
entered in the txtBirthDate text box on the frmPersonalInfo form. Here’s
the expression entered in the first condition:
DateDiff("yyyy",[Forms]![frmPersonalInfo]![txtBirthDate],Date()) Between 25 And 49
Figure 10. An example of a macro containing conditions.
This expression uses the DateDiff
function to determine the difference between the date entered in the
txtBirthDate text box and the current date. If the difference between
the two dates is between 25 and 49 years, a message box is displayed
indicating that the person is over a quarter century old.
If the first condition isn’t satisfied, the macro continues evaluating each condition. The CheckBirthDate
subroutine displays an age-specific message for each person 25 years of
age and older. If the person is younger than 25, none of the conditions
are met, and no message is displayed.
The CheckGender macro works a little bit differently (see Figure 11). It evaluates the value of the fraGender
option group. One of the first two lines of the subroutine execute,
depending on whether the first or second option button is selected. The
third line of the subroutine executes regardless of the Option Group
value because it is after the End If.
Figure 11. An example of a macro containing conditions.