Introduction to VBA

69 downloads 107047 Views 3MB Size Report
Excel VBA Programming for the Absolute Beginner, 3rd Edition. Thomson Course ... the VBA context. †J. Walkenbach, Excel 2010 Power Programming with VBA.
Computational Finance and Risk Management

Financial Data Access with SQL, Excel & VBA

Guy Yollin Instructor, Applied Mathematics University of Washington Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

1 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

2 / 50

Lecture references John Walkenbach Excel 2010 Power Programming with VBA Sams, 2010 Chapter 7 - 11 J. Green, S. Bullen, R. Bovey, M. Alexander Excel 2007 VBA Programmer’s Reference Wiley, 2007 Chapter 1 Duane Birnbaum and Michael Vine Excel VBA Programming for the Absolute Beginner, 3rd Edition Thomson Course Technology, 2007 Chapter 1 Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

3 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

4 / 50

VBA VBA VBA (Visual Basic for Applications) is a scripting language built into Microsoft Office applications

MS Office applications that support VBA: Excel Access Word Powerpoint Outlook

Almost anything you can do with an office application, you can automate through VBA Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

5 / 50

Usefulness of VBA Excel is a common tool for quantitative data analysis, review, and storage VBA can enhance Excel in the following ways: Automation of labor-intensive tasks Formatting tables Creating graphs Updating data from databases or the web

Advanced analytics Custom worksheet function development Analysis requiring sophisticated workflows Analysis requiring an interface to external software

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

6 / 50

Logistics of VBA programming

VBA Coding† : The VBA code that you write (or record) is stored in a VBA module VBA modules are stored in an Excel workbook You use the Visual Basic Editor (VBE) to view and edit VBA code You can use the Macro Recorder to record a sequence of user actions and create a VBA procedure to reproduce them The terms macro and procedure are synonymous in the VBA context



J. Walkenbach, Excel 2010 Power Programming with VBA

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

7 / 50

Logistics of VBA programming VBA Code† : VBA Code is structured as procedures A VBA Sub procedure is a series of statements than can be executed in a number of ways macro button of the developer tab Visual Basic Editor shortcut key quick access toolbar another procedure form control embedded on a worksheet

A VBA Function procedure returns a single value (or an array) and can be called from another VBA procedure or used in a worksheet formula †

J. Walkenbach, Excel 2010 Power Programming with VBA

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

8 / 50

First VBA program

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

9 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

10 / 50

The Developer ribbon

Make sure you can access the Developer ribbon Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

11 / 50

Macro recording example Problem

A common problem is that the column width is not properly adjusted when CSV files are first opened

Solution

Record a macro to adjust the column widths place the macro in the PERSONAL.XLSB file (this is a place to store macros that can be shared across workbooks) create an button for the macro on the quick launch toolbar

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

12 / 50

Turn on macro recorder Click Record Macro to begin the process

In the Record Macro dialog, provide a macro name and description, a shortcut key assignment (if desired), and a location to store the macro

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

13 / 50

Adjust column width Perform Excel tasks

Click Stop Recording when finished

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

14 / 50

Add macro to the Quick Access Toolbar Right click the Quick Access Toolbar and select customize

Select macros from the dropdown list, choose the desired macro, modify the button, and click OK Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

15 / 50

Launch macro from Quick Access Toolbar Click the button on the Quick Access Toolbar to run macro

Macro can also be run via the assigned shortcut key Ctrl+Shift+C for the AutoAdjustColumns macro Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

16 / 50

The recorded macro

1 2 3

selects all cells in the worksheet select all columns and autofit the width selects cell A1 Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

17 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

18 / 50

Typical table formating

Bold column names

Border around table cells

First row shaded background

Column width adjusted

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

19 / 50

Macro Recorder workflow

The basic process for getting started with VBA with the aid of the Macro Recorder is as follows† : 1

Record the actions that you want to code

2

Review the code and find the lines that perform those actions

3

Delete the rest of the code

4

Modify the recorded code

5

Add variables, control structures, and other code that the Macro Recorder cannot record

† Getting Started with VBA in Excel 2010 http://msdn.microsoft.com/en-us/library/ee814737.aspx Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

20 / 50

Border code from macro recorder S e l e c t i o n . Borders ( xlDiagonalDown ) . L i n e S t y l e = xlNone S e l e c t i o n . Borders ( xlDiagonalUp ) . L i n e S t y l e = xlNone With S e l e c t i o n . B o r d e r s ( x l E d g e L e f t ) . LineStyle = xlContinuous . ColorIndex = xlAutomatic . TintAndShade = 0 . Weight = x l T h i n End With With S e l e c t i o n . B o r d e r s ( x l E d g e T o p ) . LineStyle = xlContinuous . ColorIndex = xlAutomatic . TintAndShade = 0 . Weight = x l T h i n End With With S e l e c t i o n . B o r d e r s ( x l E d g e B o t t o m ) . LineStyle = xlContinuous . ColorIndex = xlAutomatic . TintAndShade = 0 . Weight = x l T h i n End With With S e l e c t i o n . B o r d e r s ( x l E d g e R i g h t ) . LineStyle = xlContinuous . ColorIndex = xlAutomatic . TintAndShade = 0 . Weight = x l T h i n End With With S e l e c t i o n . B o r d e r s ( x l I n s i d e V e r t i c a l ) . LineStyle = xlContinuous . ColorIndex = xlAutomatic . TintAndShade = 0 . Weight = x l T h i n End With With S e l e c t i o n . B o r d e r s ( x l I n s i d e H o r i z o n t a l ) . LineStyle = xlContinuous . ColorIndex = xlAutomatic . TintAndShade = 0 . Weight = x l T h i n End With ...

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

21 / 50

Significant border code

' remove any d i a g o n a l l i n e S e l e c t i o n . Borders ( xlDiagonalDown ) . L i n e S t y l e = xlNone S e l e c t i o n . Borders ( xlDiagonalUp ) . L i n e S t y l e = xlNone ' box o u t s i d e o f s e l e c t i o n S e l e c t i o n . Borders ( xlEdgeLeft ) . LineStyle = xlContinuous S e l e c t i o n . B o r d e r s ( xlEdgeTop ) . L i n e S t y l e = x l C o n t i n u o u s S e l e c t i o n . B o r d e r s ( xl EdgeBottom ) . L i n e S t y l e = x l C o n t i n u o u s S e l e c t i o n . Borders ( xlEdgeRight ) . LineStyle = xlContinuous ' box i n t e r i o r o f s e l e c t i o n S e l e c t i o n . Borders ( x l I n s i d e V e r t i c a l ) . LineStyle = xlContinuous S e l e c t i o n . Borders ( x l I n s i d e H o r i z o n t a l ) . LineStyle = xlContinuous

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

22 / 50

Title bold/background from macro recorder Sub TestMacro ( ) ' ' TestMacro Macro ' ' With S e l e c t i o n . I n t e r i o r . Pattern = x l S o l i d . PatternColorIndex = xlAutomatic . ThemeColor = x l T h e m e C o l o r D a r k 1 . TintAndShade = −0.14996795556505 . PatternTintAndShade = 0 End With S e l e c t i o n . Font . Bold = True End Sub

Note, top row was already selected for the macro recording Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

23 / 50

Significant title bold/background code Sub TestMacro ( ) ' ' TestMacro Macro ' ' Selection . I n t e r i o r . Pattern = x l S o l i d S e l e c t i o n . TintAndShade = −0.14996795556505 S e l e c t i o n . Font . Bold = True End Sub

set interior pattern to solid set TintAndShade (-1=darkest, 1=lightest) set Bold property of Font object to True

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

24 / 50

Final table formatting procedure Sub F o r m a t T a b l e ( ) ' s e l e c t the current region Act iveCell . CurrentRegion . Select ' draw b o r d e r a r o u n d a l l c e l l s S e l e c t i o n . Borders ( xlDiagonalDown ) . L i n e S t y l e = xlNone S e l e c t i o n . Borders ( xlDiagonalUp ) . L i n e S t y l e = xlNone S e l e c t i o n . Borders ( xlEdgeLeft ) . LineStyle = xlContinuous S e l e c t i o n . B o r d e r s ( xlEdgeTop ) . L i n e S t y l e = x l C o n t i n u o u s S e l e c t i o n . B o r d e r s ( xl EdgeBottom ) . L i n e S t y l e = x l C o n t i n u o u s S e l e c t i o n . Borders ( xlEdgeRight ) . LineStyle = xlContinuous S e l e c t i o n . Borders ( x l I n s i d e V e r t i c a l ) . LineStyle = xlContinuous S e l e c t i o n . Borders ( x l I n s i d e H o r i z o n t a l ) . LineStyle = xlContinuous ' s e l e c t t h e t o p row o f t h e c u r r e n t r e g i o n S e l e c t i o n . Rows ( 1 ) . S e l e c t ' make column t i t l e s b o l d w i t h a l i g h t g r a y b a c k g r o u n d S e l e c t i o n . Font . Bold = True Selection . I n t e r i o r . Pattern = x l S o l i d S e l e c t i o n . I n t e r i o r . TintAndShade = −0.15 ' a d j u s t t h e column w i d t h s C a l l AutoAdjustColumns End Sub Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

25 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

26 / 50

Object-oriented, event-driven paradigm Excel VBA is based on an object-oriented, event-driven paradigm Objects

Object represents elements of an application a worksheet, a chart, a range

Properties

Objects have properties that you can get and set; properties are attributes of an object that describe its characteristics Range("A1").Font.Bold = True Note that a property can return an object

Methods

Objects have methods or actions they can perform Range("A1").ClearContents

Events

Events are actions recognized by an object and can be responded to by an event procedure

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

27 / 50

Object-oriented, event-driven paradigm Object hierarchy

Excel object classes are arranged in a hierarchy Application Workbooks collection Workbook Worksheets collection Worksheet Range

Object collections

Objects of the same class are grouped together in an collection object Workbooks Worksheets Charts Sheets QueryTables

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

28 / 50

Simplified Excel object model

The Excel VBA object model largely emulates the user interface Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

29 / 50

Referencing items in the hierarchy To reference items in the object hierarchy, a period (dot) is used as a separator character parent.child

Application.Workbooks("Book1.xlsx") Workbooks("Book1.xlsx").Worksheets(1)

object.property

Worksheets("Sheet1").Range("A1").Value

object.method

Range("A1").ClearContents

If you omit a specific reference to an object, Excel uses the appropriate active object (note: it is the programmers responsibility to make sure an appropriate object is active) To refer to a member in a collection, use the member’s name or its index number

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

30 / 50

Illustration of VBA object hierarchy

The Excel VBA object model largely emulates the user interface Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

31 / 50

Abbreviated references

Note the following line of code: Range ( "A1" ) = 42

Is interpreted as: A p p l i c a t i o n . A c t i v e W o r k b o o k . A c t i v e S h e e t . Range ( "A1" ) . V a l u e = 42

Because: The Value property is the default property of the Range object ActiveSheet is assumed ActiveWorkbook is assumed Application is assumed

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

32 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

33 / 50

Important Application object properties (∼300) ActiveCell

Returns a Range object that represents the active cell

ActiveSheet

Returns an object that represents the active sheet (the sheet on top)

ActiveChart

Returns a Chart object that represents the active chart

ActiveWorkbook

Returns a Workbook object that represents the workbook in the active window (the window on top)

ActiveWindow

Returns a Window object that represents the active window (the window on top)

RangeSelection

Returns a Range object that represents the selected cells

Selection

Returns the selected object in the active window (Range object or chart object)

see Developer’s Guide to the Excel 2010 Application Object http://msdn.microsoft.com/en-us/library/office/gg192737 Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

34 / 50

Important properties and methods of the Range object Properties Value Get/set cell values (default property for Range object) Text

Returns formatted text in a cell

Formula

Get/Set formula in a cell

Address

Returns text string of cell address

Font

Returns a Font object

Methods Select Selects a range Copy

Copy a range

Clear

deletes contents and formatting

ClearContents

deletes contents but leaves formatting

see Developer’s Guide to the Excel 2010 Range Object http://msdn.microsoft.com/en-us/library/office/gg192736 Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

35 / 50

Other important properties

Cells

Returns a Range object that represents the cells in the specified range Worksheets("Sheet2").Cells(2, 3)

Offset

Returns a Range object that represents a range that’s offset from the specified range Range("A1").Offset(1, 2)

Both the Cells and Offset properties are useful in looping statements where the row and column inputs (offsets) could be based on loop counters

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

36 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

37 / 50

Object Browser From the VBE, you can press F2 to open the Object Browser

Search or browser for classes, methods, properties, and events Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

38 / 50

Developer Reference From the Object Browser, you can click the question mark to open the Developer Reference to the selected section

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

39 / 50

Developer Reference

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

40 / 50

Help on methods, properties, and events

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

41 / 50

The Visual Basic Editor (VBE)

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

42 / 50

Immediate window From the VBE, you can press Ctrl+G to make the immediate window visible

The Immediate window is extremely useful for executing VBA statements directly and for debugging code Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

43 / 50

Outline 1

Introduction to VBA

2

VBA macro recorder: simple example

3

VBA macro recorder: extending the simple example

4

The Excel VBA object model

5

The Application object, the Range object, the Cells property

6

The VBE, the Object Browser, the Developers Reference

7

The Colorful Stats project

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

44 / 50

The Colorful Stats project The Colorful Stats project is an introductory VBA exercise developed in chapter 1 of Excel VBA Programming for the Absolute Beginner Colorful Stats is implemented as an event procedure Event procedures are self-contained blocks of code that require some type of stimulus in order to run. The stimulus often comes directly from the user (for example, a mouse click), but may also result from another piece of code† †

D. Birnbaum, Excel VBA Programming for the Absolute Beginner

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

45 / 50

Add a control to a worksheet Click the Insert Controls button on the developer ribbon Select a control (in this case an ActiveX command button) Note the Design Mode button is now depressed

Click and drag on the worksheet to set the control’s size and location Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

46 / 50

Edit control properties Click the Controls Property button (or double click on the control) to open the Properties dialog

Edit the desired properties like Caption, Name, etc. Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

47 / 50

Edit event procedure Click View Code (or double click the control) to open the VBE Select the type of event to respond to (e.g. click) and edit the code for the event procedure

Exit Design Mode and test the application Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

48 / 50

Colorful Stats source code P r i v a t e Sub c m d C a l c u l a t e _ C l i c k ( ) − ' −−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ' Add f o r m u l a s f o r summary s t a t s − ' −−−−−−−−−−−−−−−−−−−−−−−−−−−−−− With A c t i v e S h e e t ' These f o r m u l a s a r e e n t e r e d i n t o t h e new w o r k s h e e t . . r a n g e ( "D2" ) . F o r m u l a = "=COUNT( " & ActiveWindow . S e l e c t i o n . A d d r e s s & " ) " . r a n g e ( "D3" ) . F o r m u l a = "=MIN( " & ActiveWindow . S e l e c t i o n . A d d r e s s & " ) " . r a n g e ( "D4" ) . F o r m u l a = "=MAX( " & ActiveWindow . S e l e c t i o n . A d d r e s s & " ) " . r a n g e ( "D5" ) . F o r m u l a = "=SUM( " & ActiveWindow . S e l e c t i o n . A d d r e s s & " ) " . r a n g e ( "D6" ) . F o r m u l a = "=AVERAGE( " & ActiveWindow . S e l e c t i o n . A d d r e s s & " ) " . r a n g e ( "D7" ) . F o r m u l a = "=STDEV( " & ActiveWindow . S e l e c t i o n . A d d r e s s & " ) " − ' −−−−−−−−−−−−−−−−−−−−− ' Add l a b e l s and s t a t s − ' −−−−−−−−−−−−−−−−−−−−− . r a n g e ( " C2 " ) . V a l u e = " Count : " . r a n g e ( " C3 " ) . V a l u e = " Min : " . r a n g e ( " C4 " ) . V a l u e = "Max : " . r a n g e ( " C5 " ) . V a l u e = "Sum : " . r a n g e ( " C6 " ) . V a l u e = " A v e r a g e : " . r a n g e ( " C7 " ) . V a l u e = " S t a n ␣Dev : " . r a n g e ( " C2 : D7" ) . S e l e c t End With − ' −−−−−−−−−−−−−−−−−−−−−−−−−−−− ' Format t h e l a b e l s and s t a t s . − ' −−−−−−−−−−−−−−−−−−−−−−−−−−−− With S e l e c t i o n . Font . S i z e = 16 . Font . B o l d = True . Font . C o l o r = RGB( 2 3 2 , 2 1 1 , 1 6 2 ) ' Husky G o l d . Font . Name = " A r i a l " . Columns . A u t o F i t . I n t e r i o r . C o l o r = RGB( 5 4 , 6 0 , 1 1 6 ) ' Husky P u r p l e . B o r d e r s . Weight = x l T h i c k . B o r d e r s . C o l o r = RGB( 2 1 6 , 2 1 7 , 2 1 8 ) ' Husky Gray End With r a n g e ( "A1" ) . S e l e c t End Sub

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

49 / 50

Computational Finance and Risk Management

http://depts.washington.edu/compfin

Guy Yollin (Copyright © 2012)

Data Access with SQL, Excel & VBA

Introduction to VBA

50 / 50