2016-03-19 9 views
0

У меня есть таблица с несколькими листами, которая защищена, за исключением случаев, когда я хочу, чтобы люди вносили изменения, и все они защищены паролем. Я пытаюсь сделать кнопку команды, чтобы другие могли просматривать данные, но не могут вносить изменения в ячейки. Вот что я имею (не работает совершенно правильно).Блокировка ячеек с VBA

Private Sub mdRead_Click()              
    Dim ws As Worksheet 
    For Each ws In ActiveWorkbook.Sheets 
     'To open wookbook as read only, while proctecting changes. 
     Worksheet.Unprotect = True 
     Worksheet.Range("C10:I23,L10:R23,C25:I36,L25:R36,C45:I58,L45:I58,C60:I71,L60:R71").Select 
     Selection.Locked = True 
    Next ws 
End Sub 
+1

ОК, поэтому вы выбираете несколько ячеек. Как это помогает * «другие могут просматривать данные» *? – Jeeped

+0

Вышеупомянутый код 'Снять защиту всех листов, а не защищать их. Возможно, вы захотите добавить 'ws.Protect yourPassword'. – Ralph

+0

Рассматривали ли вы изменение вашего метода [Worksheet.Protect] (https://msdn.microsoft.com/en-us/library/office/ff840611.aspx) для использования опции 'UserInterfaceOnly: = True'? При этом никакие действия не ограничены процессом VBA, но пользователь по-прежнему ограничен. – Jeeped

ответ

0

Установив свойство Locked, вы можете снова защитить лист.

+0

Я действительно придумал этот код, который делает большую часть того, что я хочу. Private Sub CmdRead_Click() Dim Sh As Variant «для каждого листа в книге, защищает клетки разблокированные For Each Sh В ActiveWorkbook.Sheets Если Sh.Visible = True Then Sh.Select ActiveSheet.unprotect Cells.Select Selection.Locked = True Selection.FormulaHidden = False Range ("C10") Выберите Sh.Select ActiveSheet.Protect DrawingObjects:. = False, Содержание: = True, сценарии: = _ Правда End If Next Sh Выгрузить меня MsgBox «Открыт для чтения». & vbCrLf & «Не для изменений!» End Sub –

Смежные вопросы