Есть 2 опции:
.
1. Без защиты листа - в каждом модуле листа, чтобы настроить "разблокировано" клеток (Ex. "C3")
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Column <> 3 Or .Row <> 3 Or .CountLarge > 1 Then Application.Undo
End With
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Column <> 3 Or .Row <> 3 Or .CountLarge > 1 Then Cells(3, 3).Select
End With
Application.EnableEvents = True
End Sub
.
2. Защита листа - в модуле ThisWorkbook
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
protectWS ws
Next
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
protectWS Sh
End Sub
Public Function protectWS(Optional ByRef ws As Worksheet = Nothing) As Boolean
If ws Is Nothing Then Set ws = Application.ActiveSheet
If Not isWSProtected(ws) Then
ws.Protect Password:=vbNullString, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
UserInterfaceOnly:=True, _
AllowFormattingCells:=False, _
AllowFormattingColumns:=False, _
AllowFormattingRows:=False, _
AllowInsertingColumns:=False, _
AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, _
AllowDeletingColumns:=False, _
AllowDeletingRows:=False, _
AllowSorting:=False, _
AllowFiltering:=False, _
AllowUsingPivotTables:=False
End If
End Function
Private Function isWSProtected(Optional ByRef ws As Worksheet = Nothing) As Boolean
isWSProtected = ws.ProtectContents Or _
ws.ProtectDrawingObjects Or _
ws.ProtectScenarios
End Function
Вариант 1 вынуждает пользователей к ячейке C3
- могут быть перемещены в модуль ThisWorkbook , с параметрами для строки и колонка
Вариант 2 используется пустой пароль, а также позволяет выполнять VBA (UserInterfaceOnly
)
Вы знаете, вы можете защитить и Снять защиту листа в пределах VBA? Возможно, вам будет проще заблокировать ваш листок для всех и разблокировать при выполнении вашего макроса! ;) – R3uK
Ну, я это знаю, но в моем коде много раз, когда я обращаюсь к этому листу, мне нужно было бы его блокировать и разблокировать несколько раз. –
Вы можете защитить диапазоны и просто оставить открытыми те, которые вам нужны. http://stackoverflow.com/questions/7763205/lock-certain-cells-in-a-range – MatthewD