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