Kris, actually the code unprotects the workbook momentarily so that the Pivot Table can be refreshed, and than it protects it again. The user will not have a chance to do anything before the protection takes effect!
The bigger issue seemed to be whether your version of Excel allows/recognizes the exceptions to the worksheets protection. If so, you can also use the following alternative:
Place this code in a Module and run the protection manually:
Public Sub ProtectAll()
Const PWORD As String = "hello"
Dim wsSheet As Worksheet
For Each wsSheet In Worksheets
wsSheet.Protect Password:=PWORD, DrawingObjects:=False, _
Contents:=True, Scenarios:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True, UserInterfaceOnly:=True, _
AllowFormattingCells:=True, AllowFormattingRows:=True
Next wsSheet
End Sub
As you can see, the code allows filtering in spite of the worksheet protection.
My workbooks typically contain a lot of worksheets therefore, before I make the workbook available to the "public," and while I am still editing it, I also insert a version of the module where "unprotect" replaces the word "protect" in its two occurrences. That way, I do not have to unprotect sheets manually. Just remember to protect the workbook again!
Good luck