Excel VBA - Basics videos | Excel VBA Part 7 - Working with Workbooks

Posted by Andrew Gould on 17 January 2014

This video explains the basics of working with Workbooks in Excel VBA. You'll lean several techniques for referring to workbooks, including the difference between ActiveWorkbook and ThisWorkbook. You'll also find out how to open existing workbooks and create new ones, including how to create a workbook based on a template. Finally, the video looks at various techniques for saving files, including how to provide a filename and a location, and how to change the file type.

You can increase the size of the video:

Full screen mode for YouTube

You can view the video in full screen mode as shown on the left, using the icon at the bottom right of the frame.

You can also increase the quality of the video:

Changing resolution

You can improve the resolution of the video using another icon at the bottom right of the frame. This will slow down the connection speed, but increase the display and sound quality. This icon only becomes visible when you start playing the video.

Finally, if nothing happens when you play the video, check that you're not using IE in compatibility view.

This page has 9 threads Add post
01 Aug 18 at 12:17


In this video, you mentioned the singular is usually the object in the collection, eg worksheet is an object of the collection of worksheets (plural).

You mentioned usually.

What are the exceptions?



03 Aug 18 at 08:41

The most notable one, I think, is Range.  A range can be a single cell as well as a collection of other cells.

Using the For Each loop to process a range works differently.  In most cases, to process a collection with a For Each loop, you declare a variable whose type is the singular object, e.g. Dim c As Chart.  You then use the plural name of the collection in the loop, e.g. For Each c in Charts.  The relationship holds true for most examples - Worksheet:Worksheets, Workbook:Workbooks, Shape:Shapes, PivotTable:PivotTables, etc.

To process a range with a For Each loop, you would use the singular object to declare the variable, e.g. Dim r As Range.  You would not, however, use Ranges as the name of the collection.  Instead, you must specify the range of cells you wish to loop over.  This provides a large amount of flexibility, as many properties and methods return a reference to a range object.  Any of the examples below are valid:

For Each r In Range("A1:A10")

For Each r In Range("A1").CurrentRegion

For Each r In ActiveSheet.Cells

For Each r In Selection


04 Aug 18 at 15:25

One thing I noticed from watching your collections video is this.  Normally to loop over a collection, you define a variable of the same type as the collection.  For example:

Dim ws as Worksheet
For Each ws In ThisWorkbook.Worksheets

Next ws

So assuming that's a "rule" I tried this, which obviously failed:

Dim MyColl As Collection
Dim MyCollElement As Collection

For Each MyCollElement In MyColl

Next MyCollElement

thinkg that since I'm looping over a collection (MyColl), I must define a variable of the same type, MyCollElement, as a Collection too!

04 Aug 18 at 15:21

Thanks for the examples.

07 Jun 18 at 01:04

Hi, I have created a custom ribbon and attached a macro to this item in excel. My question is how do I make this custom ribbon/button available on each end user's terminal? The macro-enabled document is located on a shared folder through which all users have equal access. However, the custom ribbon/button is not available to all users when opening the same workbook.

Can you kindly help or instruct accordingly please?

07 Jun 18 at 07:21

Hi, you can share your custom ribbon configuration with other users as described here.

I hope that helps!


07 Jun 18 at 15:03

Thanks for the quick response. 

I am aware of the importation method but I was wondering if there was anything more versatile and dynamic. The end product would target many users on various terminals and it would be inefficient to have everyone import custom tools everytime a change, improvement or alteration is made .

Is it possible to have implicitly included in the code the ability to have real time updates for the custom toolbar or ribbon?

Thanks a lot for your help. 

Andrew G  
08 Jun 18 at 07:42

Hi,  I think that the bottom answer on this page may help!

16 Nov 17 at 16:38

Hai Andrew G,

I just want to encrypt my VBA code. Apart from using password protection from tools menu, Is there any possible way to do that? If the user tries to open tne module then the code should be at an encrypted state. I do not think, using password is an effective way to protect my code because there is a way to break the password and to view the code.

16 Nov 17 at 19:14

Hi Abishek, there are commercial tools available such as http://www.lockxls.com/product.asp and https://www.ozgrid.com/excel-add-ins/encrypt-VBA.htm

I haven't used either of them so can't comment on their effectiveness.

I hope that helps!

17 Nov 17 at 02:13

Thanks Andrew G

I will try those...

15 Nov 17 at 10:26

Hai Andrew G,

Thankyou so much for your help. Is there any alternative ways to use firefox as a web browser in Excel VBA instead of IE. If any tutorial available for this case, kindly give me that link.

15 Nov 17 at 10:36

Hi Abishek, other than Selenium there's a commercial tool available here https://imacros.net/ but I haven't used it so don't know how useful it will be!

15 Nov 17 at 13:45

Hi Andrew G, thank you so much. 

14 Nov 17 at 09:07

Hai Andrew G,

Firstly, I would like to thankyou for this woderfull playlist of ExcelVBA. I have a request for you. Is it possible to view the progress status of the ongoing Macro through a status window. It should show the status as percentage.


14 Nov 17 at 10:42

Hi Abishek,

The VBE doesn't have a feature like the one you've described.  You could create your own progress indicator with a User Form and Progress Bar as shown in this video https://www.wiseowl.co.uk/videos/excelvbauserforms/progress-bar.htm

I hope that helps!

15 Nov 17 at 03:29

Hai Andrew G,

Thanks Andrew that helps.... Also i have a lot of doubts in using selenium for webpage scraping. Currently i have installed SeleniumBasic- in my Windows 10 device. for example

{sub Frfox()

Dim SLNM As New WebDriver    

SLNM.Start "firefox", "http://www.google.com"

end sub}

The above code only opens a new firefox window but the URL is not getting loaded. Please help me with this issue.



Andrew G  
15 Nov 17 at 08:22

Hi Abishek, I'm sorry but I don't have any experience with using Selenium so I can't help you with this.

15 Jun 17 at 01:36


I have gone through your vba videos and they all were awesome. i have one request if you can create one more video that shows dynamic auto filter. .


15 Jun 17 at 07:32

Hi Surjit,

I have a list of videos that I'd love to find the time to make - I'll add this one to it!

11 Mar 17 at 19:55

First of all I would like to congratulate you for this incredible series of videos about VBA.
Through you, I have been able to improve and learn more and more my knowledge in Excel and VBA.
I would like to know if you are going to, or intend to release, any video about Regular Expressions (RegExp) for Excel / VBA?
It is a very interesting and very powerful subject for queries, validations, ect. But little used or demonstrated by the communities.
Again, thank you for the dedication and high quality of your teaching.
A hug from Brazil!

Maux :)

12 Mar 17 at 17:29

That's the second question on Regular Expressions I've had this week! The topic has been on my list for some time, I simply haven't had time to plan and create a video on the subject yet. Perhaps I should move this topic a little further up the list and aim to create something in the near future.

Thank you for the kind comments and for watching!

13 Mar 17 at 15:59

Thank you and congratulations again for the work you have done!

09 Mar 17 at 00:03

I'm developing an Excel VBA program, but I'm having a problem. I need to download a Captcha image from this site

09 Mar 17 at 10:37

I think the answer is to use the URLDownloadToFile function, which you can see our video on here

06 Dec 16 at 13:30

I have a workbook with 4 sheets.  Three of these sheets have employees that are scheduled daily, the fourth is the actual schedule.  What I would like to accomplish is when I schedule that person he or she is highlighted on the other sheets to help identify who we can and cannot use. I am fairly new to VBA, but extremely excited to learn something new.  Thank you so much for you time and any assistance woould be greatly appreciated. 

06 Dec 16 at 18:02

The question is a bit vague, and I suspect this answer won't help much.  What I'd do is follow through the videos or blogs on our website for now. 

However, here's a macro to colour in all the cells in range A1:A3 which contain the name Bill.  You could obviously modify this to work with any range and any name. 

Sub ColourPeople()

    Dim PersonCell As Range
    Dim PersonRange As Range
    'set a variable to refer to the range where people can be found
    Set PersonRange = Range("A1:A3")
    'colour in all the people with the right name
    For Each PersonCell In PersonRange.Cells
        If PersonCell.Value = "Bob" Then
            PersonCell.Interior.Color = vbGreen
        End If
    Next PersonCell
End Sub

Exactly when and how you'd call this macro would depend on exactly what you were trying to achieve.