+ All Categories
Home > Documents > VBA Excel Basis

VBA Excel Basis

Date post: 23-Aug-2014
Category:
Upload: paolo84vi
View: 160 times
Download: 6 times
Share this document with a friend
Popular Tags:
31
VBA & Excel.ppt 1 VBA Excel Basis
Transcript
Page 1: VBA Excel Basis

VBA & Excel.ppt 1

VBA Excel Basis

Page 2: 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

Page 3: VBA Excel Basis

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.

Page 4: VBA Excel Basis

VBA & Excel.ppt 4

VB Edit WindowPr

ojec

t Exp

lore

rPr

oper

ty In

spec

tor

Code Window

Page 5: VBA Excel Basis

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

Page 6: VBA Excel Basis

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

Page 7: VBA Excel Basis

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)

Page 8: VBA Excel Basis

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

Page 9: VBA Excel Basis

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

Page 10: VBA Excel Basis

VBA & Excel.ppt 10

Control Structures

• Decisions

If anyDate < Now ThenanyDate = Now

End If

Next, consider If … Then … Else

Page 11: VBA Excel Basis

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

Page 12: VBA Excel Basis

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

Page 13: VBA Excel Basis

VBA & Excel.ppt 13

Loops/Iterations

Do {While|Until} …conditionstatements…

Loop

-------------------------------------------

Dostatements…

Loop {While|Until} …condition

Page 14: VBA Excel Basis

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

Page 15: VBA Excel Basis

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

Page 16: VBA Excel Basis

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

Page 17: VBA Excel Basis

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)

Page 18: VBA Excel Basis

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

Page 19: VBA Excel Basis

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

Page 20: VBA Excel Basis

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)

Page 21: VBA Excel Basis

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.

Page 22: VBA Excel Basis

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

Page 23: VBA Excel Basis

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

Page 24: VBA Excel Basis

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

Page 25: VBA Excel Basis

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)

Page 26: VBA Excel Basis

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)

Page 27: VBA Excel Basis

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)

Page 28: VBA Excel Basis

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

Page 29: VBA Excel Basis

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

Page 30: VBA Excel Basis

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

Page 31: VBA Excel Basis

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.


Recommended