VBA - working with data videos | How do I loop through worksheets in a closed workbook with VBA?

Posted by Andrew Gould on 09 April 2021


Looping through the collection of worksheets in a workbook is a standard technique in Excel VBA and easy to accomplish when the workbook is open. Did you know that you can do the same thing when the workbook is closed? This video explains how to do this using the ActiveX Data Objects library. You'll learn how to create a connection object and construct a connection string to talk to the closed Excel file. You'll learn how to query the schema of the workbook to return a list of the worksheets and loop through this list to read the name of each sheet. You'll also learn how to create a recordset object and populate it with data using an SQL Select statement. As a bonus you'll learn about the SQL Union All statement to select data from multiple tables at the same time and how to add criteria to a query using the Where clause.

This video has the following accompanying files:

File name Type Description
Loop Through Worksheets in a Closed Workbook.xlsm Excel workbook with macros
Movies By Year.xlsx Excel workbook

Click to download a zipped copy of the above files.

There are no exercises for this video.

Making a  video bigger

You can increase the size of your video to make it fill the screen like this:

View full screen

Play your video (the icons shown won't appear until you do), then click on the full screen icon which appears as shown at its bottom right-hand corner.

 

When you've finished viewing a video in full screen mode, just press the Esc key to return to normal view.

Improving the quality of a video

To improve the quality of a video, first click on the Settings icon:

Settings icon

Make sure you're playing your video so that the icons shown appear, then click on this gear icon at the bottom right-hand corner.

 

Choose to change the video quality:

Video quality

Click on Quality as shown to bring up the submenu.

 

The higher the number you choose, the better will be your video quality (but the slower the connection speed):

Connection speed

Don't choose the HD option unless you have a fast enough connection speed to support it!

 

Is your Wise Owl speaking too slowly (or too quickly)?  You can also use the Settings menu above to change your playback speed.

This page has 1 thread Add post
27 Jun 21 at 21:23

Hey Andrew!

I started following you on YouTube, but finally found your site. I really enjoy what you've been able to produce so far. It's helped me a ton in my current role. 
 

My question is...how do I reference an excel table in the sql select statement part of the code?  I also tried a name range, but was unsuccessful. Any help would be appreciated!  
 

Thanks! 

28 Jun 21 at 07:00

Hi there, what an Excel-lent user name!

Sadly you can't reference Excel table names in an SQL query, but you can reference a range name like so:

SELECT * FROM [MyRangeName]

Make sure not to use the $ sign as you're not referencing a worksheet.

You might find this YouTube playlist useful https://youtube.com/playlist?list=PLNIs-AWhQzckUd5i0E1xeSFeBAonYIurK  Part 58.1 includes information on referencing range names.

I hope that helps!

29 Jun 21 at 23:56

Thank you very much!  I'm also trying to use an input box result in my sql query. It's a number, but when I step through the process my input box value shows it at "123456789". Would the quotation cause an issue in the query?  
 

Thanks!

Andrew G  
30 Jun 21 at 07:58

Hi there,

When you say that the value is showing with quotes do you mean in the Locals window? A VBA inputbox always returns a string value so it will always be displayed with " " around it in tools like the Locals window. The quotes won't be included if you concatenate that value into your query string (I assume that's what you're trying to do?). Remember that you can always print your SQL string to the Immediate window to check that it's correct before you run it.

Just in case it helps, we have a module on working with VBA input boxes which you can find here