How to protect sheets and allow filtering using VBA?

To protect sheets in Excel while still allowing users to filter data, you can use VBA (Visual Basic for Applications) to set specific protection options that enable filtering. Here are the step-by-step instructions to accomplish this:

Step 1: Prepare Your Worksheet

  • Unprotect the Worksheet (if already protected): If your worksheet is already protected, you must first unprotect it to make changes to your VBA project.
  • Set Up Filters: Ensure that your data is formatted as a table or has filters enabled on the column headers where you want users to filter data.

Step 2: Open the VBA Editor

  • Access the VBA Editor:
    • Press `ALT` + `F11` to open the Visual Basic for Applications editor.

Step 3: Insert VBA Code

Sub ProtectSheetWithFilter()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("YourSheetName") ' Replace with your sheet name

    ' Ensure the sheet is unprotected first
    ws.Unprotect Password:="yourpassword" ' If a password is applied, remove or replace as needed

    ' Protect the sheet with filter allowance
    ws.Protect Password:="yourpassword", _
                UserInterfaceOnly:=True, _
                AllowFiltering:=True
    
    ' Optional: If your workbook also allows selection of locked cells
    ' ws.EnableSelection = xlUnlockedCells
End Sub
  • Insert a Module:
    • In the VBA editor, right-click on any of the objects (for example, the workbook name) in the Project Explorer.
    • Click on `Insert` > `Module`. This will create a new module window where you can enter your VBA code.
  • Write the VBA Code:
    • Enter the following VBA code into the module:
  • Replace `”YourSheetName”` with the actual name of your sheet.
  • Set `”yourpassword”` to your desired protection password. If you do not want to use a password, simply omit `Password:=”yourpassword”`.

Step 4: Run the VBA Code

  • Execute the Macro:
    • You can run the macro by pressing `F5` when the module is active or by going to `Run -> Run Sub/UserForm`.
    • This macro will apply protection to your specified sheet while allowing users to use filters.

Additional Tips

  Private Sub Workbook_Open()
      ProtectSheetWithFilter
  End Sub
  • Automatically Trigger the Code: If you want this protection to be applied every time the workbook is opened, you can place the code inside a Workbook Open event.
  • Remember to Save: Save your workbook as a macro-enabled file (`.xlsm`) to ensure the VBA code is retained.

This VBA code will set your worksheet to be protected while specifically allowing filtering activities by users, without compromising other protection restrictions you might require.

Unlock Your Potential

Excel

Basic - Advanced

Access

Access Basic - Advanced

Power BI

Power BI Basic - Advanced

Help us grow the project