Как перемещаться только по незаблокированным ячейкам — Visual Basic(Бейсик)

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

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

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

Leave a Comment