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