Как перемещаться только по незаблокированным ячейкам?

Для того, чтобы в нужном рабочем листе можно было перемещаться только по незаблокированным/незащищённым ячейкам, можно проделать следующее:

Выделите все ячейки рабочего листа и в меню Формат выберите команду Ячейки. Затем, в появившемся диалоговом окне выберите закладку Защита и установите "флажок" напротив Защищаемая ячейка. После этого выделите все ячейки, в которых предполагается разрешить изменения (при этом разрешается выделение несмежных ячеек/диапазонов) и в меню Формат опять выберите команду Ячейки. После чего, снимите "флажок" напротив Защищаемая ячейка и:

Вариант 1 (Актуально для MS Excel 95, 97, 2000, XP):

Скопируйте следующий код в модульный лист (стандартный модуль)

code: #vba
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)

Скопируйте следующий код в модуль нужного рабочего листа

code: #vba
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")
  • Используя этот способ, Вы теряете возможность взаимодействия с большинством стандартных команд
Поделиться:

Похожие статьи: