Post on 23-Aug-2014
transcript
VBA & Excel.ppt 1
VBA Excel Basis
VBA & Excel.ppt 2
Visual Basic for Applications
• VBA a significant subset of the stand-alone Visual Basic programming language
• It is integrated into Microsoft Office applications (and others, like Arena)
• It is the macro language of Excel• You can add
– Forms for dialog boxes with user input– Classes for object definitions– Modules containing procedures
VBA & Excel.ppt 3
Accessing VBA in Excel
• Tools Macros Visual Basic Editor• Enter VBA through the navigation buttons
in the top toolbars
VBA Design Mode
Visual Basic Editor
“Design mode” is the time during which no code from the project is running and events from Excel or your project will not execute.
VBA & Excel.ppt 4
VB Edit WindowPr
ojec
t Exp
lore
rPr
oper
ty In
spec
tor
Code Window
VBA & Excel.ppt 5
Structure of VBA Project
• Modules are collections of VBA code– Procedures (Subs) and Functions– Declarations before any Subs or Functions
that are global to the Module• UserForms are graphic objects for user
input and output; we will not work with UserForms
VBA & Excel.ppt 6
Variables• Declare by Dim• Better to use Data Types:
Dim amount As DoubleDim year As IntegerDim name As String
• Other data types: Boolean, Byte, Currency, Date
• Default (no type) is Variant• Option Explicit forces all variables to be
declared
VBA & Excel.ppt 7
Variables(cont’d.)
• Can declare type by appending a symbol:% - integer & - long integer! - single # - double@ currency$ - string
• Can modify scope (outside Subs & Fcns)– Private L As Integer
(only current module)– Public billsPaid As Currency
(available to any module)
VBA & Excel.ppt 8
Constants & Statics
• [Public|Private] Const constantName [As type] = expression– Value cannot be changed– Public Const PI = 3.1, NumPLANETS = 9
• Static causes variables in Subs and Functions to retain their values (normally lost when you exit Sub or Function)– Static yourName As String
VBA & Excel.ppt 9
Arrays
• Dim vect(1 to 100) as IntegerDim Elf(0 to 5, 0 to 20) as String
• You can also dynamically allocate and reallocate an array
Dim Calendar() as Integer
ReDim Calendar (1 to 31) as Integer
VBA & Excel.ppt 10
Control Structures
• Decisions
If anyDate < Now ThenanyDate = Now
End If
Next, consider If … Then … Else
VBA & Excel.ppt 11
Decisions(cont’d.)
If Index = 0 ThenX = X + 1Y = VBA.Sqr(X)Else If Index = 1 ThenY = VBA.Sqr(X)Else If Index = 2 ThenY = XElseX = 0End If
VBA & Excel.ppt 12
Decisions(cont’d.)
Select Case IndexVariableCase 0statements…Case 1 to 10statements…Case Is < 0statements…Case NumSteps statements…Case Elsestatements…End Select
Notice that the “cases” can be constants, ranges, conditions and variables; this is a powerful control structure that we will use to select events to execute
VBA & Excel.ppt 13
Loops/Iterations
Do {While|Until} …conditionstatements…
Loop
-------------------------------------------
Dostatements…
Loop {While|Until} …condition
VBA & Excel.ppt 14
Loops(cont’d.)
For counter = start To end [Step increment]…statements
Next counter
--------------------------------
For Each element In group…statements
Next element
VBA & Excel.ppt 15
Exiting Control StructuresFor J = 1 To 10 Step 2
[statement block]Exit For[statement block]
Next J-----------------------Do
[statement block]Exit Do[statement block]
Loop Until Check = False
Optional statements to allow early, graceful exit from the loop before the termination condition
VBA & Excel.ppt 16
Code Modules
• Excel Objects (ThisWorkbook, Sheet#)• Modules
– Typically we put our code here– A Module is a collection of Subs and
Functions– Insert Module
• More:– Class Modules (see “master” used for simlib)– User Forms
VBA & Excel.ppt 17
Procedures
• Sub (routines)– no value returned– Called when needed
Call mySub(param1, param2)• Function
– value returned– assign return value to function name
X = myFunction(2, 7, Z)
VBA & Excel.ppt 18
Subs
• Subs can also have Public or Private scope (default is Public)
• Basic syntax{Public|Private} Sub name(arguments)
statements…Exit Substatements…
End Sub
Optional way to leave the Sub before reaching the End statement
VBA & Excel.ppt 19
Functions
• Functions can also have Public or Private scope (default is Public)
• Basic syntax
{Public|Private} Function name(arguments) AS typestatements…name = return value Exit Functionstatements…
End Function Optional way to leave the Function before reaching the End statement
Value returned as the name of the function
VBA & Excel.ppt 20
Arguments for Procedures
• Pass by Reference (default) means that changes to the value of the variable will be returned
Sub stuff(item As String, price as Integer)
• Pass by Value means only the value is passed so the original variable is unchanged
Sub stuff(ByVal item As String, ByVal price as Integer)
VBA & Excel.ppt 21
Some Useful Code for Interacting with Excel
• The following are some pieces of code that are useful for doing VBA with Excel.
• See the code on the course web site for other examples.
VBA & Excel.ppt 22
Finding/Creating a Sheet Dim found As Boolean Dim sheetNext As Worksheet ' Set up mySheet sheet for output found = False For Each sheetNext In Worksheets If sheetNext.Name = “mySheet" Then found = True Exit For End If Next sheetNext If found = True Then Worksheets(“mySheet").Select ActiveSheet.UsedRange.Clear Else Worksheets.Add ActiveSheet.Name = “mySheet" End If
FYI –useful for exercise at end
VBA & Excel.ppt 23
This is how you address VBA intrinsic functions
Writing to a Sheet
• Put the absolute value of the variable Fudge in row 2 (or I), column 20 (or J) of the Worksheet named mySheet.
Worksheets(“mySheet”).Cells(2,20) = VBA.Abs(Fudge)
Worksheets(“mySheet”).Cells(I,J) = VBA.Abs(Fudge)
Worksheets(“mySheet”).Range(“T2”)=VBA.Abs(Fudge)
Range is general – see next page
VBA & Excel.ppt 24
Ways to use .Range MethodRange("A1") Cell A1Range("A1:B5") Cells A1 through B5
Range("C5:D9,G9:H16") A multiple-area selection
Range("A:A") Column ARange("1:1") Row 1Range("A:C") Columns A through CRange("1:5") Rows 1 through 5
Range("1:1,3:3,8:8") Rows 1, 3, and 8
Range("A:A,C:C,F:F") Columns A, C, and F
VBA & Excel.ppt 25
Reading from a Worksheet
• To do this you use the .Value method, applying the same ideas used for writing:
X = Worksheets(“mySheet”).Range(“T2”).Value
note: t = column 20 Excel likes the (column, row) order rather
than (row, column)
VBA & Excel.ppt 26
Use an Excel Function
• VBA has a limited number of built-in functions, but you can access any Excel worksheet function.
• This example uses the Excel Max function
W = WorksheetFunction.Max(0, W + S - a)
VBA & Excel.ppt 27
Running the Code
• Your modules will as appear as Macros that can be run from Excel under
Tools Macros Macros…• Perhaps the easiest way to run the code is
to place your cursor in the module you want to run and press the Run Sub/UserForm button. (there is a green play button on the toolbar, too)
VBA & Excel.ppt 28
DebuggingUseful tools in the Debug menu
Setting break points causes code to stop when the point is reached (F5 to continue)
Passing the cursor over variables shows their current value
VBA & Excel.ppt 29
Dim Clock As Double ' simulation clockDim NextFailure As Double ' time of next failure eventDim NextRepair As Double ' time of next repair eventDim S As Double ' system stateDim Tlast As Double ' time of previous eventDim Area As Double ' area under S curve
Public Function Timer() As String' Determine the next event and advance time If NextFailure < NextRepair Then Timer = "Failure" Clock = NextFailure NextFailure = 1000000 Else Timer = "Repair" Clock = NextRepair NextRepair = 1000000 End IfEnd Function
These variables are global since they are declared before any Sub or Function
Notice that Function must be typed
Value is returned as the name of the function
An apostrophe indicates a commentIN-CLASS EXAMPLE
VBA & Excel.ppt 30
Public Sub MainProgram()' Program to generate a sample path for the reliability example Dim NextEvent As String S = 2 Clock = 0 Tlast = 0 Area = 0 NextFailure = WorksheetFunction.Floor(6 * Rnd(), 1) + 1 NextRepair = 1000000 Do Until S = 0 NextEvent = Timer Select Case NextEvent Case "Failure" Call Failure Case "Repair" Call Repair End Select Loop MsgBox ("System failure at time " _ & Clock & " with average # components " & Area / Clock)End Sub
NextEvent is local to this Sub since it is declared within the Sub
Note use of an Excel function
An Until loop and a Select Case statement
VBA & Excel.ppt 31
Finishing Up
• Exercise: Write a Sub that inserts a worksheet named “Count” into the Workbook, then writes the numbers 1,2,…,10 in the first row, the first ten columns. Use a loop to do this.