Protect/Unprotecting Sheets with CmdButtons

N

NikkiBenz

My workbook has 14 worksheets (4 of them are data sheets and are hidde
to the user). Most of the sheets have command buttons to ope
userForms to capture data and run reports.

I want to protect all the sheets to prevent the user from messing wit
the formulas, etc. In all of the userform_Initialization events, I a
running a UnprotectSheets module and a ProtectSheets module o
UserForm_Terminate events.

The problem is that I'm getting 1004 Runtime errors when trying t
protect/unprotect certain sheets (does not happen on just one specifi
sheet). When I try to protect/unprotect manally on the sheet by goin
to Tools/Protection... the protect/unprotect option is greyed out. I
becomes available when I click somewhere in the worksheet and then
can proceed with the manual way or even the macro way. I think it ha
something to do with what's on focus in the sheet. I think the shee
loses the focus when the button is clicked. (If that makes sense)

So, I thought I could be clever by selecting or activating a cel
(range) in each worksheet before protecting/unprotecting, but I stil
get the runtime error. The sheets are password protected. I'
accessing the password via a constant field. But I know it's not
problem with the password.

Sub ProtectSheets()
Dim ws As Worksheet
For each ws in ActiveWorkbook.Worksheets
ws.Range("A1").Select
ws.Protect constPassword
Next ws
End Sub

The unprotectSheets looks the same other than ws.Unprotec
constPassword

Do you have any suggestions
 
T

Tom Ogilvy

If this is being run from a commandbutton, then

Set the takefocusonclick property of the commandbutton to false.

also note that you can only select on the activesheet, so activate the sheet
before trying to select a cell on it.

also, if this code is actually located in a sheet module, then you have
perhaps fortuitously stumbled into the requirement to qualify any offsheet
range with a sheet reference. You have used ws.Range("A1").Select - even if
ws is the activesheet (which you need to make it that), if you used

Range("A1").Select

it would have referred to the sheet that contained the code.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top