introduction to vba programming

44
Introduction to VBA Programming

Upload: kasimir-steele

Post on 31-Dec-2015

64 views

Category:

Documents


4 download

DESCRIPTION

Introduction to VBA Programming. Many Types of Statements. VBA statements Access object model’s methods and properties Data Access Object’s methods and properties ActiveX Data Object. Example: To Open a Database. DAO command: Set db = OpenDatabase("c:\salesdb.mdb") - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Introduction to VBA Programming

Introduction to VBA Programming

Page 2: Introduction to VBA Programming

Many Types of Statements

• VBA statements

• Access object model’s methods and properties

• Data Access Object’s methods and properties

• ActiveX Data Object

Page 3: Introduction to VBA Programming

Example: To Open a Database

• DAO command:– Set db = OpenDatabase("c:\salesdb.mdb")

• Access Object Model’s Application Object methods:– CurrentDB method:

• Set db = CurrentDB()

– OpenCurrentDatabase method:• Set db = OpenCurrentDatabase("c:\salesb.mdb")

Page 4: Introduction to VBA Programming

VB Modules

• Standard modules:– Standard modules are separated database objects

containing one or many procedures. They most often contains utilities functions that are useful in many different circumstances.

– Create a standard module:• In the database window, click Modules and New.

• Form/Report modules: Containing procedures belong to a form/report– Create a form module:

• In the Form Design view, click the Code button

Page 5: Introduction to VBA Programming

Procedures

• Sub procedures– Private procedures: Can be called only by procedures

in the same module.– Public: Can be called by procedures in any module.– Public is the default declaration

• Functions– returns a value– Used in an expression– Public/Private

Page 6: Introduction to VBA Programming

To Invoke a Sub Procedure

• Use Call statement:– Arguments must be surrounded by

parentheses.– Call myProcedure(arg1, arg2, …)

• If call is not used, arguments are not surrounded by parentheses.– MyProcedure arg1, arg2, …

Page 7: Introduction to VBA Programming

Variable Declarations

• Option Explicit• Dim variableName as DataType• Variable naming rules:

– The first character must be a letter.– Use only letters, digits, and underscore.– Cannot contain spaces or periods.– No VB keywords

• Naming conventions:– Descriptive– Consistent lower and upper case characters.

• Ex. Camel casing: lowerUpper, employeeName

Page 8: Introduction to VBA Programming

VB Data Types

• Boolean (True/False):• Byte: Holds a whole number from 0 to 255.• Date: date and time, 8 bytes.• Double: real, 8 bytes• Single: real, 4 bytes• Integer: 2 bytes• Long: 4 bytes integer• Currency• String• Object: Holds a reference of an object• Variant

Page 9: Introduction to VBA Programming

Variable Declaration Examples

• Dim empName as String

• Declare multiple variables with one Dim:– Dim empName, dependentName, empSSN as String

• Dim X As Integer, Y As Single

• Initiatialization– Dim interestRate as Double

Page 10: Introduction to VBA Programming

Object Reference:Set

• Declare object variales:– Dim varName As Database– Set db = openCurrentDatabase("c:\salesb.mdb")

• Dereferencing objects:– Set varName = Nothing

Page 11: Introduction to VBA Programming

Variable Scope• Procedural-level scope: declared in a

procedure with the Dim statement• Module-level: declared in a module’s

declaration section (outside any procedure) with either Dim or Private keyword.

• Public level scope: a module variable declared with the Public statement.

Page 12: Introduction to VBA Programming

Constants

• User-defined constants:– Const NationalDay as date = #7/4/2005#

• Built-In constants:– VBA, Access, DAO, ADO

Page 13: Introduction to VBA Programming

Data Conversion

• Implicit conversion: When you assign a value of one data type to a variable of another data type, VB attempts to convert the value being assigned to the data type of the variable.

• Explicit conversion:– VB.Net Functions: CStr, Ccur, CDbl, Cint,

CLng, CSng, Cdate,Val, etc.

Page 14: Introduction to VBA Programming

Date Data Type

• Date literals: A date literal may contain the date, the time, or both, and must be enclosed in # symbols:– #1/30/2003#, #1/31/2003 2:10:00 PM#– #6:30 PM#, #18:30:00#

Page 15: Introduction to VBA Programming

Some Date Functions

• Now: Current date and time• Time• DateDiff• Demo:

– Days to Christmas• Dim myDate1, mydate2 As Date• myDate1 = Now• mydate2 = #12/25/2005#• MsgBox (DateDiff("d", myDate1, mydate2))

Page 16: Introduction to VBA Programming

Testing VBA Code with Immediate Window

• View/Immediate Window

Page 17: Introduction to VBA Programming

Arithmetic and String Operators

• +, -, *, /. \, ^

• String Concatenation: &, +

• No compound operator:• K=k+1,

– not k+=1

Page 18: Introduction to VBA Programming

IF Statement

• IF condition THEN

statements

[ELSEIF condition-n THEN

[elseifstatements]

[ELSE

[elsestatements]]]

End If

Page 19: Introduction to VBA Programming

Select Case Structure

• SELECT CASE testexpression

[CASE expressionlist-n

[Statements]

[CASE ELSE

[elsestatements]

END SELECT

Page 20: Introduction to VBA Programming

Select Case Example• SELECT CASE temperature

CASE <40Text1.text=“cold”

CASE < 60Text1.text=“cool”

CASE 60 to 80Text1.text=“warm”

CASE ELSEText1.text=“Hot”

End Select

Page 21: Introduction to VBA Programming

Loop

• FOR index – start TO end [STEP step]

[statements]

[EXIT FOR]

NEXT index

DO [{WHILE| UNTIL} condition]

[statements]

[EXIT DO]

LOOP

Page 22: Introduction to VBA Programming

Do While/Do UntilPrivate Sub Command1_Click()Dim counter As Integercounter = 0Do While counter <= 5 Debug.write(counter) counter = counter + 1LoopText1.Text = counterEnd Sub

Private Sub Command2_Click()Dim counter As Integercounter = 0Do Until counter > 5 Debug.write(counter) counter = counter + 1LoopText1.Text = counterEnd Sub

Page 23: Introduction to VBA Programming

With … End With

With Text4 .BackColor = vbYellow .FontSize = 20 .Text = "testtest"End With

Convenient shorthand to execute a series of statements on a single object. Within the block, the reference to the object is implicit and need not be written.

Page 24: Introduction to VBA Programming

Procedures

. Sub procedure:

Sub SubName(Arguments)

End Sub– To call a sub procedure SUB1

• CALL SUB1(Argument1, Argument2, …)• Or• SUB1 Argument1, Argument2, …

Page 25: Introduction to VBA Programming

Function

• Private Function tax(salary) As Double• tax = salary * 0.1• End Function

Page 26: Introduction to VBA Programming

Call by Reference Call by Value

• ByRef– The address of the item is passed. Any

changes made to the passing variable are made to the variable itself.

• ByVal– Default– Only the variable’s value is passed.

Page 27: Introduction to VBA Programming

ByRef, ByVal examplePrivate Sub Command2_Click()Dim myStr As StringmyStr = Text0Call ChangeTextRef(myStr)Text0 = myStrEnd Sub

Private Sub ChangeTextRef(ByRef strInput As String) strInput = "New Text"End Sub

Page 28: Introduction to VBA Programming

MsgBox

• MsgBox(prompt, other arguments)• MsgBox can return a value representing the

user’s choice of buttons displayed by the box.

– Use Help to find constants used with the MsgBox

Page 29: Introduction to VBA Programming

InputBoxInputBox(Prompt [,Title] [, Default] [, Xpos] [, Ypos])

Xpos is the distance from the left edge of the screen, and Ypos is the distance from the top of the screen. Both are measured in twips (1/1440 th of an inch).

Note: The arguments are positional and optional. Enter a comma to skip an argument.

cityName = InputBox("Please enter city name:“, , “SF”)

If cityName = vbNullString Then

MsgBox.Show ("customer click cancel")

Else

Text1 = cityName

End If

Note: vbNullString is a VB keyword representing null value.

Page 30: Introduction to VBA Programming

• Modeless form: Other forms can receive input focus while this form remains active.

• Modal form: No other form can receive focus while this form remains active.– DoCmd.OpenForm stDocName, , , stLinkCriteria, , acDialog

• Note: Macro/OpenForm/Window Mode

Page 31: Introduction to VBA Programming

VBA Functions

Page 32: Introduction to VBA Programming

Monthly Payment Form

Text6 = -Pmt(Text2 / 12, Text4 * 12, Text0)

Page 33: Introduction to VBA Programming

Conditional Required Field

Private Sub Form_BeforeUpdate(Cancel As Integer)If Year(Now) - Year(Birthdate) < 18 Then If IsNull(Text14) Then MsgBox ("You must enter guardian name! ") Cancel = True Text14.SetFocus End IfEnd IfEnd Sub

Page 34: Introduction to VBA Programming

Domain Aggregate FunctionsAggregate functions provide statistical information about sets of records (a domain). For example, you can use an aggregate function to count the number of records in a particular set of records or to determine the average of values in a particular field.The two types of aggregate functions, domain aggregate functions and SQL aggregate functions, provide similar functionality but are used in different situations. The SQL aggregate functions can be included in the syntax of an SQL statement but can't be called directly from Visual Basic. Conversely, the domain aggregate functions can be called directly from Visual Basic code. They can also be included in an SQL statement, but an SQL aggregate function is generally more efficient.

Page 35: Introduction to VBA Programming
Page 36: Introduction to VBA Programming

Examples

• From Student form, lookup Fname:– =DLookUp("[fname]","faculty","fid='" & [Forms]![student]![fid] & "'")

• From Faculty form, count number of students advised by the faculty:– =DCount("[FID]","Student","FID='" & [Forms]![Faculty]![Fid] & "'")

Page 37: Introduction to VBA Programming

Function Example

Function NumberOfStudents(FID) NumberOfStudents = DCount("sid", "student", "fid='" & Forms!faculty!FID & "'")End Function

Page 38: Introduction to VBA Programming
Page 40: Introduction to VBA Programming

Collection Structure

• Methods:– Count– Item(index), 0-based index– Add– Remove

Page 41: Introduction to VBA Programming

For Each … Next

• Dim formName As String• Dim obj As AccessObject• For Each obj In Application.CurrentProject.AllForms

• formName = formName + obj.Name + vbCrLf• Next• MsgBox (formName)• MsgBox ("Number of forms: " + CStr(Application.CurrentProject.AllForms.Count))

Page 43: Introduction to VBA Programming

Is the Faculty form open? If so, in which view?

Page 44: Introduction to VBA Programming

Dim intView As IntegerIf CurrentProject.AllForms("faculty").IsLoaded Then intView = CurrentProject.AllForms("faculty").CurrentView If intView = 0 Then MsgBox ("Design view") ElseIf intView = 1 Then MsgBox ("Form view") Else MsgBox ("Datasheet view") End IfElse MsgBox ("Not open")End If