Get our FREE VBA eBook of the 30 most useful Excel VBA macros.

Automate Excel so that you can save time and stop doing the jobs a trained monkey could do.

Claim your free eBook

VBA code to Protect and Unprotect Workbooks

VBA Code Snippets

In a previous VBA Code Snippet, we covered protecting and unprotecting worksheets.  In this post, we will consider protecting and unprotecting workbooks.  The two topics are closely related, so if this post does not provide the information you need, then read that post too.

Before getting started, there is an important change in Excel 2013 to be considered.

The difference between Single & Multiple Document Interface

In Excel 2010 and prior Excel had a Multiple Document Interface (MDI), which means multiple workbooks opened within the same Excel window.  Excel 2013 introduced the Single Document Interface (SDI), where each document has its own window with its own Ribbon.

When protecting workbooks the Windows option is disabled within Excel 2013 and above.

Protect Workbook - Windows Disabled

The purpose of the Windows setting was to fix the size of the spreadsheet within the instance of Excel.  However, now that each spreadsheet behaves as if a separate instance, fixing the size of the window now serves no purpose.

The code below will work for both MDI and SDI, however protecting the Workbook window will have no use in Excel 2013 and above.

Basic Protecting and Unprotecting

'Protect a workbook

'Unprotect a workbook

Checking if a workbook is protected

'Show message box if the Structure is Protected
If ThisWorkbook.ProtectStructure = True Then MsgBox "Structure Protected"

'Show message box if the Window is Protected
If ThisWorkbook.ProtectWindows = True Then MsgBox "Windows Protected"

'Show message box if both the Structure or Window are Protected
If ThisWorkbook.ProtectStructure = True Or ThisWorkbook.ProtectWindows = True Then
    MsgBox "Windows and Structure Protected"
End If

Protecting and unprotecting with a password

'Protect with a password
ThisWorkbook.Protect Password:="myPassword"

'Unprotect with a password
ThisWorkbook.Unprotect Password:="myPassword"

If an incorrect password is provided the following error message will show.

Protect Workbook - Incorred Password

The code below will catch the error and provide a custom message.

'Catch the error caused by an incorrect password
On Error Resume Next
ThisWorkbook.Unprotect Password:="incorrectPassword"

If Err.Number <> 0 Then
    MsgBox "The Password provided is incorrect"
    Exit Sub
End If

On Error GoTo 0

Protect the Structure or the Windows

Protecting the structure prevents users from creating, moving, deleting, hiding and unhiding worksheets. Protecting windows is described above.

'Protecting the Structure or the Windows
ThisWorkbook.Protect Password:="myPassword", Structure:=True, Windows:=True

Other related VBA code snippets

The following VBA Code Snippets will be useful for applying this post in a wider context.

Headshot Round

About the author

Hey, I’m Mark, and I run Excel Off The Grid.

My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn't until I was 35 that my journey really began.

In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).

Do you need help adapting this post to your needs?

I'm guessing the examples in this post don't exactly match your situation. We all use Excel differently, so it's impossible to write a post that will meet everybody's needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.

But, if you're still struggling you should:

  1. Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
  2. Ask the 'Excel Ninja' in your office. It's amazing what things other people know.
  3. Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it's clear and concise.  List all the things you've tried, and provide screenshots, code segments and example workbooks.
  4. Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.

What next?
Don't go yet, there is plenty more to learn on Excel Off The Grid.  Check out the latest posts:

2 thoughts on “VBA code to Protect and Unprotect Workbooks

  1. Francis says:

    All the codes are helpful and provided description that are easily to understand. but, my concern is can you provide a specific location where should i put the block of codes. for example, this block of codes put it in module then this one for form load, and then this one is for workbook, etc. I’m frustrated to run the system because there are to many errors occurred. Please, I hope my suggestion will be accepted. Thank you more power.!

    • Excel Off The Grid says:

      Thank you for the feedback Francis. I will take this on board and include it as part of the next full site maintenance.

Leave a Reply

Your email address will not be published. Required fields are marked *