This page allows you to understand the Workbook object and the Workbooks collection in VBA macro programming.
In Excel, each workbook can contain several sheets which contain many cells.
If you use ThisWorkbook property of the Application object, the object return is the workbook where the Visual Basic code is running. Most of the time, this is the same as the active workbook.
There are a lot of methods, properties and events attached to the workbook object. The workbook object is, in fact, an element of the workbooks collection.
Below, several useful codes around the workbooks collxection and workbook object. You will find the main tools for handling workbooks. Knowing the object means being able to automatically create workbooks, save them, open them, protect them, delete them.

Create a new workbook
The first thing to know about workbook is how can you create a new workbook using a VBA macro.
To create a workbook, we begin by declaring new objects as binders. Then, we can use the Add method of the Workbooks collection and finally use the Set tool to match this new workbook to our declared variable.

The following procedure will show you how to create a new workbook, and how can you copy a sheet from a workbook to another using the Copy method of the sheet object.
In order not to see the execution of your screen, do not forget the good practices by deactivating the setting of your screen.
Sub CreateNewWorkbook()
'Deactivated
Application.AskToUpdateLinks = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim WbMacro, WbNew As Workbook
Set WbMacro = ActiveWorkbook
Workbooks.Add 'Create a new workbook
Set WbNew = ActiveWorkbook
'Copy Paste the tab Weather Data to the new wbk
WbMacro.Sheets("Weather Data").Copy after:=WbNew.Sheets(1)
WbNew.Sheets(1).Delete 'Remove the Sheet1
'Activated
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Open an existing workbook
The main method to know about the workbook are how you can create, open and save.
To open a workbook you just have to use the Open method with the path of the file as an argument.
In the example below, we write all the path of the file to open it :
Sub OpenWorkbook()
Dim FilePath As String
FilePath = "C:\Desktop\VBASKILLS\Startup.xls"
Workbooks.Open (FilePath)
End Sub
In the example below, we use the GetOpenFilename method to select a file. This reduces the risks of the bug code because the user will choose his file in the system. This procedure works for Mac Os and Windows users.
Sub OpenWorkbook()
Dim FilePath As String
FilePath = Application.GetOpenFilename
Workbooks.Open (FilePath)
End Sub
As seen in the article Project Explorer, you can also use the Application.FileDialog(msoFileDialogOpen) object to choose a file in the system, but it will work only for windows users.
Sub OpenWorkbook()
'works only for windows
Dim FilePath As String
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False ' To select only one file
.Show 'Display the dialog box
'Write the path of the file selected on B2
FilePath = .SelectedItems(1)
End With
Workbooks.Open (FilePath)
End Sub
A good practice is to let the users select the file needed before the launching of the macro.
Open a text file as workbook
It is also possible to open a “.txt” file using the OpenText method if your data to analyse are in a text file.
Sub OpenWorkbookTxt()
Workbooks.OpenText filename:="Thesaurus.txt", dataType:=xlDelimited, tab:=True
End Sub
Loop on workbooks
To loop on all workbooks open you just have to use a For Each loop on the Workbooks collection.
Sub LoopWorkbooks()
'Loop on all workbooks
Dim Wbki As Workbook 'The counter
For Each Wbki In Workbooks
'... your instructions ...
Next Wbki
End Sub
Save a workbook for the first time
After your macro is created a workbook, retrieved data reworked this data for your analyzes and reports, your need will be to save your work for the first time. For this, use the SaveAs method.
In the arguments of the method, you can even protect your workbook with a password.
Below the list of arguments available : FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local.
You can use all Excel type of file format such as xlAddIn (*.xla), xlCSV (*.csv), xlCSVMac (*.csv), xlOpenXMLWorkbook (*.xlsx), xlOpenXMLWorkbookMacroEnabled (*.xlsm), xlTextMac (*.txt),xlTextMSDOS (*.txt), xlXMLSpreadsheet (*.xml)…
Sub SaveWorkbook()
'Save a workbook
Dim WbkAnalyis As Workbook 'The counter
Set WbkAnalyis = ActiveWorkbook
WbkAnalyis.SaveAs Filename:="Finance.xlsm" FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
Save changes of a workbook
To save the change of workbook already in the computer you can just use the Save method.
Sub SaveChangesWorkbook()
'Save the changes of a workbook
Dim WbkAnalyis As Workbook 'The counter
Set WbkAnalyis = ActiveWorkbook
WbkAnalyis.Save
End Sub
Save all changes of workbooks
To save the change of several workbooks already open in the computer use the Save method with a For Each loop.
Sub SaveAllWorkbooks()
Dim wb As Workbook
For Each wb In Workbooks
wb.Save
Next wb
End Sub
Save all workbooks and check the ReadOnly status
The code below uses a loop For Each Next on open Excel workbooks and checks the status of read-only.
If the file is not read-only, then it saves the workbook. When the workbook is read-only, you can’t do any changes. To override the read-only, simply re-save the workbook in a different location, thus creating a copy.
Sub SaveWorkbookNotReadOnly()
'Save all workbooks which are not in read-only
Dim Wbk As Workbook
'Loop on all workbooks
For Each Wbk In Application.Workbooks
If Not Wbk.ReadOnly Then ' Condition on Read Only
Wbk.Save 'Save the workbook
End If
Next Wbk
End Sub
Close the workbook and choose to save or not
To close a workbook, already save in a path location of your compute, nothing easier, use the Close method. As argument, the close method can save the workbook if needed using the boolean value True on the parameter SaveChanges.
If you are working on a VBA code which needs to open other Excel workbooks to retrieve data, if you do not change anything in the Excel workbook opened previously, then it is better to close this workbook without saving it, so you will save execution time especially if the latter is a big file.
As seen in good practices, it is also necessary to deactivate Excel alerts, doing that your code is not interrupted by a message indicating if you are sure that you do not want to save your workbook.
Sub CloseWorkbookWithoutSave()
'Close all workbooks without save
Application.DisplayAlerts = False
Dim WbNew As Workbook
Workbooks.Add
Set WbNew = ActiveWorkbook
WbNew.Close SaveChanges:=False 'The False cancelled the saving
Application.DisplayAlerts = True
End Sub
Protect & unprotect the workbook
The read-only file restricts changes being made, but this can easily be counteracted by saving it again.
The best security method is to use a password on a workbook with the VBA Protect method. As the Excel sheet, you can use a password to protect all the workbook.
Sub ProtectWorkbook()
'Lock the workbook with a password
Dim WbkMacro As Workbook
Set WbkMacro = ActiveWorkbook
WbkMacro.Protect Password:="azerty123", _
Structure:=True, Windows:=True
End Sub
To unprotect the file, use the method Unprotect and the password.
Sub UnprotectWorkbook()
'UnLock the workbook with a password
Dim WbkMacro As Workbook
Set WbkMacro = ActiveWorkbook
WbkMacro.UnProtect Password:="azerty123"
End Sub

Protect all workbooks
To protect all workbooks, we just need to add a For Each… Next loop in the procedure above.
Sub ProtectAllWorkbooks()
'Lock all workbooks with a password
Dim Wbki As Workbook
For Each Wbki In Workbooks
Wbki.Protect Password:="azerty123", _
Structure:=True, Windows:=True
Next Wbki
End Sub
Test if the workbook has a password
When you work on a workbook, it can be useful to test if the workbook is protected or not by a password using the property HasPassword of the object.
Sub CheckIfPasswordOnWorkbook()
'Check if the workbook has a password
Dim WbkMacro As Workbook
Set WbkMacro = ActiveWorkbook
If WbkMacro.HasPassword = True Then
MsgBox "The Workbook is protected by a password."
End If
End Sub
Print the workbook
To print the entire workbook, use the PrintOut method. This method take has arguments the following values : From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFilename, IgnorePrintAreas.
Sub PrintWorkbook()
'Print all the workbook
Dim Wbki As Workbook 'The counter
Set Wbki = ActiveWorkbook
Wbki.PrintOut
End Sub
Divided each sheet in a new workbook
Based on filters, sometimes you need to divide your work with one sheet by workbook for the analysis required. It can be due to a perimeter, a location, an activity sector or other criteria.
So after having made your analysis, you can split the file into several files.
Sub CreateOneWorkbookforOneSheet()
Dim Sh As Sheet
Dim Wbk As Workbook
'Loop on all sheets in your workbook using ThiWorkbook property
For Each Sh In ThisWorkbook.Worksheets
Set Wbk = Workbooks.Add
'... others instructions ...
Sh.Copy Before:= Wbk.Sheets(1) 'Copy your data
Wbk.Sheets(1).Delete 'Delete a sheet
Wbk.SaveAs "C:\Users\Desktop\Accounting\" & Sh.Name & ".xlsx" 'Save
Wbk.Close 'Close the workbook already saved
Next Sh
End Sub
Launch automatically a procedure with workbook action
Some specific macros can launch automatically depending on the actions.
These are called events.
For example, the instructions written in a macro having the name App_WorkbookOpen will automatically launch the instructions of the procedure when the file is opened. For more details, see the Automatic Sub article in the Tips category.