Для того, чтобы в нужном рабочем листе можно было перемещаться только по незаблокированным/незащищённым ячейкам, можно проделать следующее:
Выделите все ячейки рабочего листа и в меню Формат выберите команду Ячейки. Затем, в появившемся диалоговом окне выберите закладку Защита и установите "флажок" напротив Защищаемая ячейка. После этого выделите все ячейки, в которых предполагается разрешить изменения (при этом разрешается выделение несмежных ячеек/диапазонов) и в меню Формат опять выберите команду Ячейки. После чего, снимите "флажок" напротив Защищаемая ячейка и:
Вариант
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")
Используя этот способ, Вы теряете возможность взаимодействия с большинством стандартных команд