Special Offer
Advanced Excel VBA prorgrams in finance & statistics.

- open source code -

Visual Basic Collection
Learn to write Excel macros and get over 1200 macros.

Multiple Regression
The Multiple Regression Forecasting template provides a solid basis for identifying value drivers and forecasting data.

Excel VBA Basic Tutorial 2

This page contains the 2nd lesson on the Excel VBA Basic Tutorial series.  It covers topics in the most used Excel objects and collections.  Beginners in VBA programming are encouraged to go through the 1st lessons in this series if they had not already done so.  This document contains information about the following topics.
Microsoft Support site or the Excel VBA Help section on your computer contains comprehensive examples on most the issues covered on this page.  For more information, please refer to them.

Objects and Collections    Microsoft Support
Objects are the fundamental building blocks of Visual Basic.  An object is a special type of variable that contains both data and codes.  A collection is a group of objects of the same class.  The most used Excel objects in VBA programming are Workbook, Worksheet, Sheet, and Range.

Workbooks is a collection of all Workbook objects.  Worksheets is a collection of Worksheet objects.
The Workbook object represents a workbook, the Worksheet object represents a worksheet, the Sheet object represents a worksheet or chartsheet, and the Range object represents a range of cells.

The following figure shows all the objects mentioned.  The workbook (Excel file) is currently Book3.xls.  The current worksheet is Sheet1 as the Sheet Tab indicated.  Two ranges are selected, range B2 and B7:B11.

Workbook and Worksheet Object

A workbook is the same as an Excel file.  The Workbook collection contains all the workbooks that are currently opened.  Inside of a workbook contains at least one worksheet.   In VBA, a worksheet can be referenced as followed:


Worksheets("Sheet1") is the worksheet that named "Sheet1."
Another way to refer to a worksheet is to use number index like the following:


The above refers to the first worksheet in the collection. 

* Note that Worksheets(1) is not necessary the same sheet as Worksheets("Sheet1").

Sheets is a collection of worksheets and chart sheets (if present).  A sheet can be indexed just like a worksheet.  Sheets(1) is the first sheet in the workbook.

To refer sheets (or other objects) with the same name, you have to qualify the object.  For example:


If the object is not qualified, the active or the current object (for example workbook or worksheet) is used.

The sheet tab on the buttom the spreadsheet (worksheet) shows which sheet is active.  As the figure below shows, the active sheet is "Sheet1" (show in bold font and white background).

* You can change the color of the sheet tabs by right click the tab, choose Tab Color, then select the color for the tab.

The sub routine below shows the name of each sheet in the current opened workbook.  You can use For Each...Next loop to loop throgh the Worksheets collection. 

Sub ShowWorkSheets()
    Dim mySheet As Worksheet
    For Each mySheet In Worksheets
        MsgBox mySheet.Name
    Next mySheet

End Sub

Range Object and Cells Property

Range represents a cell, a row, a column, a selection of cells containing one or more contiguous blocks of cells, or a 3-D range.  We will show you some examples on how Range object can be used.

The following example places text "AB" in range A1:B5, on Sheet2.

Worksheets("Sheet2").Range("A1:B5") = "AB"


Note that, Worksheets.
Range("A1", "B5") = "AB" will yield the same result as the above example.

The following place "AAA" on cell A1, A3, and A5
on Sheet2.

Worksheets("Sheet2").Range("A1, A3, A5") = "AAA"

Range object has a Cells property.  This property is used in every VBA projects on this website (very important).  The Cells property takes one or two indexes as its parameters. 

For example,

Cells(index) or Cells(row, column)

where row is the row index and column is the column index.

The following three statements are interchangable:


The following returns the same outcome:

Range("A1") = 123    and    Cells(1,1) = 123

The following puts "XYZ" on Cells(1,12) or Range("L1") assume cell A1 is the current cell:

Cells(12) = "XYZ"

The following
puts "XYZ" on cell C3:

Range("B1:F5").cells(12) = "ZYZ"

* The small gray number on each of the cells is just for reference purpose only. They are used to show how the cells are indexed within the range.

Here is a sub routine that prints the corresponding row and column index from A1 to E5.

Sub CellsExample()
   For i = 1 To 5
        For j = 1 To 5
            Cells(i, j) = "Row " & i & "   Col " & j
        Next j
   Next i
End Sub

Range object has an Offset property that can be very handy when one wants to move the active cell around.  The following examples demostrate how the Offset property can be implemented (assume the current cell before the move is E5):

ActiveCell.Offset(1,0) = 1                       Place a "1" one row under E5 (on E6)

ActiveCell.Offset(0,1) =
1                       Place a "1" one column to the right of E5 (on F5)

ActiveCell.Offset(0,-3) =
                     Place a "1" three columns to the left of E5 (on B5)

Methods and Properties

Each object contains its own methods and properties.

A Property represents a built-in or user-defined characteristic of the object. 
A method is an action that you perform with an object.  Below are examples of a method and a property for the Workbook Object:

Close method close the active workbook

Count property returns the number of workbooks that are currently opened

Some objects have default properties. For example, Range's default property is Value.
The following yields the same outcome. 

Range("A1") = 1    and     Range("A1").Value = 1

Here are examples on how to set and to get a Range property value:
The following sets the value of range A1 or Cells(1,1)  as "2005".  It actually prints "2005" on A1.

Range("A1").Value = 2005

The following gets the value from range A1 or Cells(1,1).

X = Range("A1").Value

Method can be used with or without argument(s).  The following two examples demostrate this behavior.

Methods That Take No Arguments:

Methods That Take Arguments:

Worksheets("Sheet1").Range("A1:A10").Sort _
Worksheets("Sheet1").Range("A1") is the Key (or column) to sort by.

Assigning Object Variables and Using Named Argument

Sometime a method takes more than one argument.  For example, the Open method for the Workbook
object, takes 12 arguments.  To open a workbook with password protection, you would need to write the following code:

Workbooks.Open "Book1.xls", , , ,"pswd"

Since this method takes so many arguments, it is easy to misplace the password argument.  To
overcome this potential problem, one can use named arguments like the following example:

Workbook.Open fileName:="Book1.xls", password:="pswd"

You can also assign an object to an object variable using the Set Statement.

For example:

Dim myRange as Range
Set myRange = Range("A1:A10")