Для того, чтобы в нужном рабочем листе можно было перемещаться только по незаблокированным/незащищённым ячейкам, можно проделать следующее:
Выделите все ячейки рабочего листа и в меню Формат выберите команду Ячейки. Затем, в появившемся диалоговом окне выберите закладку Защита и установите "флажок" напротив Защищаемая ячейка. После этого выделите все ячейки, в которых предполагается разрешить изменения (при этом разрешается выделение несмежных ячеек/диапазонов) и в меню Формат опять выберите команду Ячейки. После чего, снимите "флажок" напротив Защищаемая ячейка и:
Вариант 1 (Актуально для MS Excel 95, 97, 2000, XP):
Скопируйте следующий код в модульный лист (стандартный модуль)
Private Sub Auto_Open()
Worksheets(1).OnSheetActivate = "EnabledSelection" 'Or
'Worksheets("Sales").OnSheetActivate = "EnabledSelection"
End Sub
Private Sub EnabledSelection()
With Application
.ScreenUpdating = False
.Goto Reference:=.Cells
.DataEntryMode = xlOn 'xlStrict
.ScreenUpdating = True
End With
End Sub
Предполагается, что:
1 - это индекс рабочего листа
Sales - это имя рабочего листа
Вариант 2 (Актуально для MS Excel 97, 2000, XP)
Скопируйте следующий код в модуль нужного рабочего листа
Private Sub Worksheet_Activate()
If ActiveWindow.SelectedSheets.Count = 1 Then
With Application
.ScreenUpdating = False
.Cells.Select
.DataEntryMode = xlOn 'xlStrict
.ScreenUpdating = True
End With
Else: MsgBox "Выделите только один лист", , ""
End If
End Sub
Событие Worksheet_Activate() не будет выполнено, если:
при открытии рабочей книги нужный лист уже будет активным
переход будет осуществлён с использованием гиперссылки (актуально только для MS Excel 97, 2000)
переход к ячейке/диапазону ячеек этого рабочего листа, будет осуществлён с помощью поля со списком Имя, которое находится в строке формул, или с использованием стандартного диалогового окна Переход (актуально только для MS Excel 97, 2000)
Комментарий:
Если использовать константу xlStrict, то блокировку нельзя будет снять используя клавишу ESC
Вместо всех ячеек рабочего листа Cells можно указать вполне опредёленный диапазон, например, Range("A1:K20")
Используя этот способ, Вы теряете возможность взаимодействия с большинством стандартных команд