Macros and Visual basic for applications

advertisement
Exploring Microsoft
Office Access 2007
Chapter 10
Customizing a Database with
Macros and Visual Basic for
Applications
1
Objectives
•
•
•
•
•
Understand the purpose of macros
Create embedded macros using Wizards
Create macros using the Macro Builder
Assign macros to events
Use SQL conditions to control macro
actions
2
Objectives
• Understand Visual Basic for Applications
(VBA)
• Use the Visual Basic Editor
• Create procedures
• Declare and use variables
• Manage data using SQL
3
Customization in Access
• Customization needed when additional
functionality required
• Access provides two methods of
Customization
• Visual Basic for Applications
– User creates code using VBA
• Macros
– Automates tasks
4
Macros
• Two types of Macros in
Access
– Embedded – belongs to a single
object or control
– Standalone – used with more
than one control
• Control – object in Access (textbox, list
box)
• Macro Group
• Group of macros stored in a single
macro object
5
Creating an Embedded Macro
Button
• Click Design tab
• Click Button
Command Button Wizard
– Controls Group
• Command Wizard begins
Creating an Embedded Macro
Choose a category
•
•
•
•
•
Choose an action
Choose object that the action will
be performed upon
Choose the appropriate category
Choose action that you want to perform
Click Next
Select the object you wish to use
Click Next
Creating an Embedded Macro
Specify how the button should work
open an object
Specify Text or graphic for the button
• Specify action when form is opened
– Screen varies by object and action
• Specify text or graphic
• Click Next
Creating an Embedded Macro
Completed button
Finish
• Provide a name for the button
• Click Finish
9
Creating Standalone Macros
using the Macro Builder
Macro
Macro Builder
• Click the Create tab
• Click Macro
– Other group
– Macro Builder launches
10
Creating Standalone Macros
using the Macro builder
2. Argument appears here
Select Action
1. Provide Argument
• Select Action
• Provide Arguments when necessary
– Value that provides information for action
• Run or Close and Save macro
11
Assigning Events
Property Sheet
Events
Choose object that the
event is assigned to
• Event
– Action triggered by user or system
• Assign an Event
– Right-click, select properties
– Choose property-Event tab, Control list
12
Running a Macro
• Design view
– Click the Run button
• Form, Report or
Button in Form
View
Table view
– Click button or
perform assigned
event
Navigation Pane
• Navigation Pane
– Double-click Macro
13
Structured Query Language
SQL statement
SELECT fname FROM customer;
Show (SELECT) me the records in the first name (fname) field
that are in (FROM) the customer table
• SQL
– Defines and process database
queries
– Industry standard query language
• Microsoft Access SQL
– Microsoft version of SQL
14
Database Analysis Tools
SELECT fname FROM customer
WHERE lname=“Smith”
ORDER BY fname
Returns records in the fname field only where the lname field is equal to
Smith. Records are sorted in ascending order by first name
• Clauses
– Added to statements to restrict/specify records
• WHERE clause
– Specifies which records to return
• ORDER BY clause
– Specifies sort order
15
Visual Basic for Applications
• Programming language
– Allows you to create/customize
applications
– It is a host application
• Resides in Office application
• Visual Basic Editor
– Workspace for writing/editing VBA
procedures
16
Launching the Visual Basic
Editor
VBA Editor
• Three ways to launch editor
– Macro group, Database Tools tab
– Event Property of an object/control
– Press Alt+F11
17
VBA Terminology
• Comment – explains the code’s purpose
• Keyword – recognized as part of a
language
• Syntax – rules for entering statements
• Standard Module – stores procedures
used by events
• Class module – contains procedures for
specific objects
• Option Explicit – helps eliminate common
errors
18
VBA Terminology (cont.)
• Event – action that triggers program instructions
• Sub procedure – performs an action
• Property procedure – creates or manipulates
custom properties
• Function procedure – performs action, returns
value
• Public Procedure – available to all objects
• Private Procedure – available to a specific object
19
Creating Procedures
Click Insert, Module
New Module
• Select Insert on menu bar
• Select Module
• New module opens
20
Creating Sub Procedures
Sub Procedure
•
•
•
•
Enter keyword Sub
Enter the name of the procedure
Enter a pair of parenthesis
Enter End Sub
21
Decision Structures
If Cost <=75 then purchase = 2
• Performs logical test to compare
statements
• Uses relations operators such as:
– = , < > equal to, not equal to
– <, > less than, greater than
– >= Greater than or equal to
– <= Less than or equal to
22
Variables
• Named storage location in memory
• A variable’s scope limits accessibility
• Three different scopes
– Local – available to a specific procedure
– Module-level – available to any procedure
within module
– Global – available to any procedure
23
Naming and Dimensioning
Variable name
Data type
Dim strName as string
Local or module variable
Public intCost as int
Global variable
• Dim (dimension) variables before using
– Use appropriate data type
• Name variables logically
• Use a meaningful name
– Variable12 not meaningful
– intQuantity meaningful
24
Assign Values to Variables
fname
John
lname
Doe
city
Valdosta
Memory
• Storage location named fname
– John = value
– Written fname = “John”
• Storage location named lname
– Doe = value
– Written lname= “Doe”
25
Call a Procedure
Call to CloseForm
Procedure
• Call keyword or procedure name
– Can be used to activate another procedure
26
Passing and “Catching”
Arguments
Argument passed to
CloseForm procedure
Passed to and “caught” here. Notice
the variable names you are passing
from and to do not have to match
27
Private Sub cmdHistoryForm_Click()
'Display the form
DoCmd.OpenForm("Employee"), , , , acFormEdit
End Sub
Private Sub cmdEmployeeForm_Click()
'Display the form
DoCmd.OpenForm("History"), , , , acReadOnly
End Sub
Private Sub cmdExit_Click()
'Exit the application
intResponse = MsgBox("Do you want to exit the Compensation" & _
"application?", vbYesNo + vbCritical, "Exit Application?")
If intResponse = vbYes Then
Application.Quit acQuitPrompt
End If
End Sub
Private Sub cmdSummaryReport_Click()
'This procedure defines an SQL query as the record source
'for the "Retirement Summary" report; the SQL statement
'returns all records
'Assign the report name to the strObjectName variable
strObjectName = "Retirement Summary"
'Declare a variable to store the SQL statement, define the
'SQL string
strSQL = "SELECT Employee.LastName, Employee.FirstName, " & _
"Office.Region, Contribution.PayDate," & _
"Contribution.[401KEmployee], " & _
"Contribution.[401KMatch], Contribution.[401KTotal], " & _
"FROM (Office INNER JOIN Employee ON Office.[OfficeNumber] = " & _
"Employee.[OfficeLocation])" & _
"INNER JOIN Contribution ON Employee.[SSN] = Contribution.[SSN];"
'Open the Address List Report
DoCmd.OpenReport strObjectName, acViewReport
'Assign the SQL query as the record source for the report
Reports(strObjectName).RecordSource = strSQL
'clean up the public strSQL variable
strSQL = ""
End Sub
Private Sub cmdContribByRegion_Click()
'Assign the report name to the strObjectName variable
strObjectName = "Retirement Summary"
strSQL = "SELECT Employee.LastName, Employee.FirstName, " & _
"Office.Region, Contribution.PayDate," & _
"Contribution.[401KEmployee], " & _
"Contribution.[401KMatch], Contribution.[401KTotal], " & _
"FROM (Office INNER JOIN Employee ON Office.[OfficeNumber] = " & _
"Employee.[OfficeLocation])" & _
"INNER JOIN Contribution ON Employee.[SSN] = Contribution.[SSN]" & _
"WHERE (((Office.Region) = [Enter Region Name]));"
'Open the Address List Report
DoCmd.OpenReport strObjectName, acViewReport
'Assign the SQL query as the record source for the report
Reports(strObjectName).RecordSource = strSQL
'clean up the public strSQL variable
strSQL = ""
End Sub
Sub cmdClose_Click()
strObjectName = "Employee"
strShortName = "Employee
Records"
CloseForm strObjectName,
strShortName
End Sub
Sub cmdClose_Click()
strObjectName = "Employee"
strShortName = "Employee Records"
CloseForm strObjectName, strShortName
End Sub
Private Sub cmdClose_Click()
strObjectName = "History"
strShortName = "Contribution History"
CloseForm strObjectName,
strShortName
End Sub
Private Sub cmdClose_Click()
strObjectName = "History"
strShortName = "Contribution History"
CloseForm strObjectName,
strShortName
End Sub
Option Explicit
'Declare global variables
Public strObjectName As String
Public strShortName As String
Public intResponse As Integer
Public strSQL As String
'General procedure to close a form
Sub CloseForm(ObjectName, ShortName)
intResponse = MsgBox("Do you want to close the" &ShortName & _
"form?", vbYesNo + vbCritical, "Close Form?")
If intResponse = vbYes Then
DoCmd.Close acForm, ObjectName
End If
End Sub
'General Procedure to close a report
Sub CloseReport(ObjectName, ShortName)
intResponse = MsgBox("Do you want to close the" &ShortName & _
"report?", vbYesNo + vbCritical, "Close Report?")
If intResponse = vbYes Then
DoCmd.Close acReport, ObjectName
End If
End Sub
Download