Excel VBA
Notes for Professionals
Excel® VBA
Notes for Professionals
100+ pages
of professional hints and tricks
GoalKicker.com
Free Programming Books
Disclaimer
This is an unocial free book created for educational purposes and is
not aliated with ocial Excel® VBA group(s) or company(s).
All trademarks and registered trademarks are
the property of their respective owners
Contents
About
...................................................................................................................................................................................
1
Chapter 1: Getting started with Excel VBA
Section 1.1: Opening the Visual Basic Editor (VBE)
Section 1.2: Declaring Variables
Section 1.3: Adding a new Object Library Reference
Section 1.4: Hello World
Section 1.5: Getting Started with the Excel Object Model
...................................................................................................................................
.................................................................................................
..............................................................................................................................................
10
........................................................................................
12
.......................................................................................................
.....................................................................................................
Chapter 2: Arrays
........................................................................................................................................................
16
Section 2.1: Dynamic Arrays (Array Resizing and Dynamic Handling)
Section 2.2: Populating arrays (adding values)
Section 2.3: Jagged Arrays (Arrays of Arrays)
Section 2.4: Check if Array is Initialized (If it contains elements or not)
Section 2.5: Dynamic Arrays [Array Declaration, Resizing]
.................................................................
.......................................................................................................
........................................................................................................
................................................................
17
...................................................................................
17
Chapter 3: Conditional statements
...................................................................................................................
19
Section 3.1: The If statement
Chapter 4: Ranges and Cells
......................................................................................................................................
19
................................................................................................................................
21
Section 4.1: Ways to refer to a single cell
Section 4.2: Creating a Range
Section 4.3: Oset Property
Section 4.4: Saving a reference to a cell in a variable
Section 4.5: How to Transpose Ranges (Horizontal to Vertical & vice versa)
...................................................................................................................................
.......................................................................................................................................
.................................................................................................................
............................................................................................
......................................................
23
Chapter 5: Named Ranges
.....................................................................................................................................
25
Section 5.1: Define A Named Range
Section 5.2: Using Named Ranges in VBA
Section 5.3: Manage Named Range(s) using Name Manager
Section 5.4: Named Range Arrays
Chapter 6: Merged Cells / Ranges
..........................................................................................................................
................................................................................................................
...............................................................................
26
............................................................................................................................
.....................................................................................................................
Section 6.1: Think twice before using Merged Cells/Ranges
..................................................................................
29
Chapter 7: Locating duplicate values in a range
.......................................................................................
30
Section 7.1: Find duplicates in a range
......................................................................................................................
30
Chapter 8: User Defined Functions (UDFs)
....................................................................................................
32
Section 8.1: Allow full column references without penalty
Section 8.2: Count Unique values in Range
Section 8.3: UDF - Hello World
......................................................................................
32
..............................................................................................................
...................................................................................................................................
Chapter 9: Conditional formatting using VBA
.............................................................................................
36
Section 9.1: FormatConditions.Add
Section 9.2: Remove conditional format
Section 9.3: FormatConditions.AddUniqueValues
Section 9.4: FormatConditions.AddTop10
Section 9.5: FormatConditions.AddAboveAverage
Section 9.6: FormatConditions.AddIconSetCondition
............................................................................................................................
..................................................................................................................
....................................................................................................
.................................................................................................................
..................................................................................................
..............................................................................................
38
Chapter 10: Workbooks
...........................................................................................................................................
41
Section 10.1: When To Use ActiveWorkbook and ThisWorkbook
Section 10.2: Changing The Default Number of Worksheets In A New Workbook
Section 10.3: Application Workbooks
Section 10.4: Opening A (New) Workbook, Even If It's Already Open
...........................................................................
41
..............................................
41
........................................................................................................................
....................................................................
2
3
5
6
16
16
17
21
21
23
23
25
25
28
29
33
33
36
37
37
Publicité
38
38
41
42
Section 10.5: Saving A Workbook Without Asking The User
...................................................................................
43
Chapter 11: Working with Excel Tables in VBA
..............................................................................................
44
Section 11.1: Instantiating a ListObject
Section 11.2: Working with ListRows / ListColumns
Section 11.3: Converting an Excel Table to a normal range
..................................................................................................
....................................................................................
44
.......................................................................................................................
Chapter 12: Loop through all Sheets in Active Workbook
Section 12.1: Retrieve all Worksheets Names in Active Workbook
Section 12.2: Loop Through all Sheets in all Files in a Folder
Chapter 13: Use Worksheet object and not Sheet object
.........................................................................
..................................................................................
......................................................................
.....................................................................
45
Section 13.1: Print the name of the first object
..........................................................................................................
47
Chapter 14: Methods for Finding the Last Used Row or Column in a Worksheet
.....................
48
Section 14.1: Find the Last Non-Empty Cell in a Column
Section 14.2: Find the Last Non-Empty Row in Worksheet
Section 14.3: Find the Last Non-Empty Column in Worksheet
Section 14.4: Find the Last Non-Empty Cell in a Row
Section 14.5: Get the row of the last cell in a range
Section 14.6: Find Last Row Using Named Range
Section 14.7: Last cell in Range.CurrentRegion
Section 14.8: Find the Last Non-Empty Cell in Worksheet - Performance (Array)
..............................................................................................
.................................................................................................
...................................................................................................
........................................................................................................
.........................................................................................
.....................................................................................
................................................................................
...............................................
51
Chapter 15: Creating a drop-down menu in the Active Worksheet with a Combo Box
..........
54
Section 15.1: Example 2: Options Not Included
Section 15.2: Jimi Hendrix Menu
Chapter 16: File System Object
Section 16.1: File, folder, drive exists
Section 16.2: Basic file operations
Section 16.3: Basic folder operations
Section 16.4: Other operations
.........................................................................................................
54
.................................................................................................................................
............................................................................................................................
...........................................................................................................................
..............................................................................................................................
.........................................................................................................................
...................................................................................................................................
Chapter 17: Pivot Tables
..........................................................................................................................................
60
Section 17.1: Adding Fields to a Pivot Table
Section 17.2: Creating a Pivot Table
Section 17.3: Pivot Table Ranges
Section 17.4: Formatting the Pivot Table Data
..............................................................................................................
..........................................................................................................................
...............................................................................................................................
.........................................................................................................
63
Chapter 18: Binding
....................................................................................................................................................
64
Section 18.1: Early Binding vs Late Binding
...............................................................................................................
64
Chapter 19: autofilter ; Uses and best practices
........................................................................................
66
Section 19.1: Smartfilter!
..............................................................................................................................................
66
Chapter 20: Application object
............................................................................................................................
70
Section 20.1: Simple Application Object example: Display Excel and VBE Version
Section 20.2: Simple Application Object example: Minimize the Excel window
..............................................
70
....................................................
70
Chapter 21: Charts and Charting
.........................................................................................................................
71
Section 21.1: Creating a Chart with Ranges and a Fixed Name
Section 21.2: Creating an empty Chart
Section 21.3: Create a Chart by Modifying the SERIES formula
Section 21.4: Arranging Charts into a Grid
.....................................................................................................................
................................................................................................................
75
.............................................................................
73
..............................................................................
Chapter 22: CustomDocumentProperties in practice
..............................................................................
79
Section 22.1: Organizing new invoice numbers
........................................................................................................
79
Chapter 23: PowerPoint Integration Through VBA
Section 23.1: The Basics: Launching PowerPoint from VBA
....................................................................................
82
....................................................................................
82
44
44
45
45
47
48
48
49
50
50
50
51
55
57
57
57
58
58
60
60
63
71
72
Publicité
Chapter 24: How to record a Macro
Section 24.1: How to record a Macro
.................................................................................................................
83
.........................................................................................................................
83
Chapter 25: SQL in Excel VBA - Best Practices
Section 25.1: How to use ADODB.Connection in VBA?
............................................................................................
85
.............................................................................................
85
Chapter 26: Excel-VBA Optimization
.................................................................................................................
87
Section 26.1: Optimizing Error Search by Extended Debugging
Section 26.2: Disabling Worksheet Updating
Section 26.3: Row Deletion - Performance
Section 26.4: Disabling All Excel Functionality Before executing large macros
Section 26.5: Checking time of execution
Section 26.6: Using With blocks
.............................................................................
...........................................................................................................
...............................................................................................................
.................................................................................................................
.................................................................................................................................
...................................................
89
Chapter 27: VBA Security
.......................................................................................................................................
93
Section 27.1: Password Protect your VBA
.................................................................................................................
93
Chapter 28: Debugging and Troubleshooting
.............................................................................................
94
Section 28.1: Immediate Window
Section 28.2: Use Timer to Find Bottlenecks in Performance
Section 28.3: Debugger Locals Window
Section 28.4: Debug.Print
Section 28.5: Stop
Section 28.6: Adding a Breakpoint to your code
............................................................................................................................................
........................................................................................................................................................
.....................................................................................................
...............................................................................................................................
94
...................................................................................................................
................................................................................
95
Chapter 29: VBA Best Practices
...........................................................................................................................
98
..............................................................................................................
98
.................................................................................................
................................................................................
....................................................................................................
....................................................................................................
Section 29.1: ALWAYS Use "Option Explicit"
Section 29.2: Work with Arrays, Not With Ranges
Section 29.3: Switch o properties during macro execution
Section 29.4: Use VB constants when available
Section 29.5: Avoid using SELECT or ACTIVATE
Section 29.6: Always define and set references to all Workbooks and Sheets
Section 29.7: Use descriptive variable naming
Section 29.8: Document Your Work
Section 29.9: Error Handling
Section 29.10: Never Assume The Worksheet
Section 29.11: Avoid re-purposing the names of Properties or Methods as your variables
Section 29.12: Avoid using ActiveCell or ActiveSheet in Excel
Section 29.13: WorksheetFunction object executes faster than a UDF equivalent
....................................................................................................................................
........................................................................................................................
........................................................................................................
......................................................................................................
...............................................................................
..................................................
............................................
..............................
109
Chapter 30: Excel VBA Tips and Tricks
Section 30.1: Using xlVeryHidden Sheets
Section 30.2: Using Strings with Delimiters in Place of Dynamic Arrays
Section 30.3: Worksheet .Name, .Index or .CodeName
Section 30.4: Double Click Event for Excel Shapes
Section 30.5: Open File Dialog - Multiple Files
.............................................................
114
.........................................................................................
................................................................................................
.......................................................................................................
..........................................................................................................
................................................................................................................
Chapter 31: Common Mistakes
Section 31.1: Qualifying References
Section 31.2: Deleting rows or columns in a loop
Section 31.3: ActiveWorkbook vs. ThisWorkbook
Section 31.4: Single Document Interface Versus Multiple Document Interfaces
...........................................................................................................................
.........................................................................................................................
...................................................................................................
...................................................................................................
................................................
120
Credits
............................................................................................................................................................................
122
You may also like
......................................................................................................................................................
124
87
88
88
90
91
95
96
97
97
100
101
102
103
105
105
106
107
109
110
111
113
113
114
116
117
118
118
119
119
About
Please feel free to share this PDF with anyone for free,
latest version of this book can be downloaded from:
https://goalkicker.com/ExcelVBABook
This Excel® VBA Notes for Professionals book is compiled from Stack Overflow
Documentation, the content is written by the beautiful people at Stack Overflow.
Text content is released under Creative Commons BY-SA, see credits at the end
Publicité
of this book whom contributed to the various chapters. Images may be copyright
of their respective owners unless otherwise specified
This is an unofficial free book created for educational purposes and is not
affiliated with official Excel® VBA group(s) or company(s) nor Stack Overflow. All
trademarks and registered trademarks are the property of their respective
company owners
The information presented in this book is not guaranteed to be correct nor
accurate, use at your own risk
Please send feedback and corrections to [email protected]
GoalKicker.com – Excel® VBA Notes for Professionals
1
Chapter 1: Getting started with Excel VBA
Microsoft Excel includes a comprehensive macro programming language called VBA. This programming language
provides you with at least three additional resources:
1.
Automatically drive Excel from code using Macros. For the most part, anything that the user can do by
manipulating Excel from the user interface can be done by writing code in Excel VBA.
2.
3.
Create new, custom worksheet functions.
Interact Excel with other applications such as Microsoft Word, PowerPoint, Internet Explorer, Notepad, etc.
VBA stands for Visual Basic for Applications. It is a custom version of the venerable Visual Basic programming
language that has powered Microsoft Excel's macros since the mid-1990s.
IMPORTANT
Please ensure any examples or topics created within the excel-vba tag are specific and relevant to the use of VBA
with Microsoft Excel. Any suggested topics or examples provided that are generic to the VBA language should be
declined in order to prevent duplication of efforts.
on-topic examples:
✓ Creating and interacting with worksheet objects
✓ The WorksheetFunction class and respective methods
✓ Using the xlDirection enumeration to navigate a range
off-topic examples:
✗ How to create a 'for each' loop
✗ MsgBox class and how to display a message
✗ Using WinAPI in VBA
VB
Version Release Date
VB6
VB7
1998-10-01
2001-06-06
WIN32 1998-10-01
WIN64 2001-06-06
MAC 1998-10-01
Excel
Version Release Date
16
15
14
12
11
10
9
2016-01-01
2013-01-01
2010-01-01
2007-01-01
2003-01-01
2001-01-01
1999-01-01
GoalKicker.com – Excel® VBA Notes for Professionals
2
8
7
5
2
1997-01-01
1995-01-01
1993-01-01
1987-01-01
Section 1.1: Opening the Visual Basic Editor (VBE)
Step 1: Open a Workbook
Step 2 Option A: Press Alt + F11
This is the standard shortcut to open the VBE.
Step 2 Option B: Developer Tab --> View Code
First, the Developer Tab must be added to the ribbon. Go to File -> Options -> Customize Ribbon, then check the
box for developer.
GoalKicker.com – Excel® VBA Notes for Professionals
3
Then, go to the developer tab and click "View Code" or "Visual Basic"
Step 2 Option C: View tab > Macros > Click Edit button to open an Existing Macro
All three of these options will open the Visual Basic Editor (VBE):
GoalKicker.com – Excel® VBA Notes for Professionals
4
Section 1.2: Declaring Variables
To explicitly declare variables in VBA, use the Dim statement, followed by the variable name and type. If a variable is
used without being declared, or if no type is specified, it will be assigned the type Variant.
Use the Option Explicit statement on first line of a module to force all variables to be declared before usage (see
ALWAYS Use "Option Explicit" ).
Always using Option Explicit is highly recommended because it helps prevent typo/spelling errors and ensures
variables/objects will stay their intended type.
Option Explicit
Sub Example()
Dim a As Integer
a = 2
Debug.Print a
'Outputs: 2
Dim b As Long
b = a + 2
Debug.Print b
'Outputs: 4
Dim c As String
c = "Hello, world!"
Debug.Print c
'Outputs: Hello, world!
End Sub
Multiple variables can be declared on a single line using commas as delimiters, but each type must be declared
individually, or they will default to the Variant type.
Dim Str As String, IntOne, IntTwo As Integer, Lng As Long
GoalKicker.com – Excel® VBA Notes for Professionals
5
Debug.Print TypeName(Str) 'Output: String
Debug.Print TypeName(IntOne) 'Output: Variant <--- !!!
Debug.Print TypeName(IntTwo) 'Output: Integer
Debug.Print TypeName(Lng) 'Output: Long
Variables can also be declared using Data Type Character suffixes ($ % & ! # @), however using these are
increasingly discouraged.
Dim this$ 'String
Dim this% 'Integer
Dim this& 'Long
Dim this! 'Single
Dim this# 'Double
Dim this@ 'Currency
Other ways of declaring variables are:
Static like: Static CounterVariable as Integer
When you use the Static statement instead of a Dim statement, the declared variable will retain its value
between calls.
Public like: Public CounterVariable as Integer
Public variables can be used in any procedures in the project. If a public variable is declared in a standard
module or a class module, it can also be used in any projects that reference the project where the public
variable is declared.
Private like: Private CounterVariable as Integer
Private variables can be used only by procedures in the same module.
Source and more info:
MSDN-Declaring Variables
Type Characters (Visual Basic)
Section 1.3: Adding a new Object Library Reference
The procedure describes how to add an Object library reference, and afterwards how to declare new variables with
reference to the new library class objects.
The example below shows how to add the PowerPoint library to the existing VB Project. As can be seen, currently
the PowerPoint Object library is not available.
GoalKicker.com – Excel® VBA Notes for Professionals
6
Step 1: Select Menu Tools --> References…
Step 2: Select the Reference you want to add. This example we scroll down to find “Microsoft PowerPoint 14.0
Object Library”, and then press “OK”.
GoalKicker.com – Excel® VBA Notes for Professionals
7
Publicité
Note: PowerPoint 14.0 means that Office 2010 version is installed on the PC.
Step 3: in the VB Editor, once you press Ctrl+Space together, you get the autocomplete option of PowerPoint.
After selecting PowerPoint and pressing ., another menu appears with all objects options related to the PowerPoint
Object Library. This example shows how to select the PowerPoint's object Application.
GoalKicker.com – Excel® VBA Notes for Professionals
8
Step 4: Now the user can declare more variables using the PowerPoint object library.
Declare a variable that is referencing the Presentation object of the PowerPoint object library.
Declare another variable that is referencing the Slide object of the PowerPoint object library.
GoalKicker.com – Excel® VBA Notes for Professionals
9
Now the variables declaration section looks like in the screen-shot below, and the user can start using these
variables in his code.
Code version of this tutorial:
Option Explicit
Sub Export_toPPT()
Dim ppApp As PowerPoint.Application
Dim ppPres As PowerPoint.Presentation
Dim ppSlide As PowerPoint.Slide
' here write down everything you want to do with the PowerPoint Class and objects
End Sub
Section 1.4: Hello World
1.
2.
Open the Visual Basic Editor ( see Opening the Visual Basic Editor )
Click Insert --> Module to add a new Module :
GoalKicker.com – Excel® VBA Notes for Professionals
10
3.
Copy and Paste the following code in the new module :
Sub hello()
MsgBox "Hello World !"
End Sub
To obtain :
4.
Click on the green “play” arrow (or press F5) in the Visual Basic toolbar to run the program:
5.
Select the new created sub "hello" and click Run :
GoalKicker.com – Excel® VBA Notes for Professionals
11
6.
Done, your should see the following window:
Section 1.5: Getting Started with the Excel Object Model
This example intend to be a gentle introduction to the Excel Object Model for beginners.
1.
2.
Open the Visual Basic Editor (VBE)
Click View --> Immediate Window to open the Immediate Window (or ctrl + G ):
3.
You should see the following Immediate Window at the bottom on VBE:
GoalKicker.com – Excel® VBA Notes for Professionals
12
This window allow you to directly test some VBA code. So let's start, type in this console :
?Worksheets.
VBE has intellisense and then it should open a tooltip as in the following figure :
Select .Count in the list or directly type .Cout to obtain :
?Worksheets.Count
4.
Then press Enter. The expression is evaluated and it should returns 1. This indicates the number of
Worksheet currently present in the workbook. The question mark (?) is an alias for Debug.Print.
Worksheets is an Object and Count is a Method. Excel has several Object (Workbook, Worksheet, Range, Chart ..)
and each of one contains specific methods and properties. You can find the complete list of Object in the Excel VBA
reference. Worksheets Object is presented here .
This Excel VBA reference should become your primary source of information regarding the Excel Object
Model.
5.
Now let's try another expression, type (without the ? character):
Worksheets.Add().Name = "StackOveflow"
6.
Press Enter. This should create a new worksheet called StackOverflow.:
To understand this expression you need to read the Add function in the aforementioned Excel reference. You will
find the following:
Add: Creates a new worksheet, chart, or macro sheet.
The new worksheet becomes the active sheet.
Return Value: An Object value that represents the new worksheet, chart,
GoalKicker.com – Excel® VBA Notes for Professionals
13
or macro sheet.
So the Worksheets.Add() create a new worksheet and return it. Worksheet(without s) is itself a Object that can be
found in the documentation and Name is one of its property (see here). It is defined as :
Worksheet.Name Property: Returns or sets a String value that
represents the object name.
So, by investigating the different objects definitions we are able to understand this code Worksheets.Add().Name =
"StackOveflow".
Add() creates and add a new worksheet and return a reference to it, then we set its Name property to
"StackOverflow"
Now let's be more formal, Excel contains several Objects. These Objects may be composed of one or several
collection(s) of Excel objects of the same class. It is the case for WorkSheets which is a collection of Worksheet
object. Each Object has some properties and methods that the programmer can interact with.
The Excel Object model refers to the Excel object hierarchy
At the top of all objects is the Application object, it represents the Excel instance itself. Programming in VBA
requires a good understanding of this hierarchy because we always need a reference to an object to be able to call
a Method or to Set/Get a property.
The (very simplified) Excel Object Model can be represented as,
Application
Workbooks
Workbook
Worksheets
Worksheet
Range
A more detail version for the Worksheet Object (as it is in Excel 2007) is shown below,
GoalKicker.com – Excel® VBA Notes for Professionals
14
The full Excel Object Model can be found here.
Finally some objects may have events (ex: Workbook.WindowActivate) that are also part of the Excel Object Model.
GoalKicker.com – Excel® VBA Notes for Professionals
15
Chapter 2: Arrays
Section 2.1: Dynamic Arrays (Array Resizing and Dynamic
Handling)
Due to not being Excel-VBA exclusive contents this Example has been moved to VBA documentation.
Link: Dynamic Arrays (Array Resizing and Dynamic Handling)
Section 2.2: Populating arrays (adding values)
There are multiple ways to populate an array.
Directly
'one-dimensional
Dim arrayDirect1D(2) As String
arrayDirect(0) = "A"
arrayDirect(1) = "B"
arrayDirect(2) = "C"
'multi-dimensional (in this case 3D)
Dim arrayDirectMulti(1, 1, 2)
arrayDirectMulti(0, 0, 0) = "A"
arrayDirectMulti(0, 0, 1) = "B"
arrayDirectMulti(0, 0, 2) = "C"
arrayDirectMulti(0, 1, 0) = "D"
'...
Using Array() function
'one-dimensional only
Dim array1D As Variant 'has to be type variant
array1D = Array(1, 2, "A")
'-> array1D(0) = 1, array1D(1) = 2, array1D(2) = "A"
From range
Dim arrayRange As Variant 'has to be type variant
'putting ranges in an array always creates a 2D array (even if only 1 row or column)
'starting at 1 and not 0, first dimension is the row and the second the column
arrayRange = Range("A1:C10").Value
'-> arrayRange(1,1) = value in A1
'-> arrayRange(1,2) = value in B1
'-> arrayRange(5,3) = value in C5
'...
'Yoo can get an one-dimensional array from a range (row or column)
'by using the worksheet functions index and transpose:
'one row from range into 1D-Array:
arrayRange = Application.WorksheetFunction.Index(Ra...