2016-04-11 10 views
0

Я хочу, чтобы мой макрос блокировал только 3 ячейки [не разрешил пользователю редактировать] в строке 2, и для этого я написал ниже функцию.Блокировка ячеек в VBA

Private Sub MasterHeaderLock(wksMaster As Worksheet) 
    wksMaster.Activate 
    ActiveSheet.Unprotect 
    wksMaster.Range(wksMaster.Cells(2, 7), wksMaster.Cells(2, 9)).Locked = True 
    ActiveSheet.Protect 
End Sub 

Но эта процедура блокирует весь лист. Пожалуйста, дайте мне знать, что нужно изменить.

+2

Лист заблокирован по умолчанию, вы должны начать с cells.locked = ложным или что-то подобное –

+2

да, может быть, wksMaster.Cells.Lockes = ложь на линии 3 будет делать это –

+0

Вы оба правы. может один из вас опубликовать ваши комментарии в качестве ответа. – refactor

ответ

0
Sub Test() 
Call MasterHeaderLock(Worksheets("Sheet1")) 
End Sub 

Private Sub MasterHeaderLock(wksMaster As Worksheet) 
    wksMaster.Cells.Locked = False 
    wksMaster.Unprotect 
    wksMaster.Range(wksMaster.Cells(2, 7), wksMaster.Cells(2, 9)).Locked = True 
    wksMaster.Protect 
End Sub 
+0

Возможно, вы захотите обновить свое решение в строках 6, 8 и 10! Строка 6: 'wksMaster.Cells.Locked = False'. И в строках 8, 10 это должно быть 'wksMaster' вместо' ActiveSheet'. Наконец, вы должны удалить 'wksMaster.Activate'. В этом нет необходимости. – Ralph

+0

@ Ralph, Спасибо за исправление –

Смежные вопросы