2017-02-13 3 views
0

У меня есть защищенный паролем лист, с некоторыми незапертыми ячейками, которые пользователь может использовать.Невозможно изменить значение ячейки с кодом в защищенном листе

Как только пользователь изменяет любое значение, он автоматически должен вносить изменения в другие разблокированные ячейки с помощью кода vba. Это отлично работает, если лист разблокирован, но не защищен.

пример кода:

В Workbook_Open() Я установил UserInterfaceOnly атрибут TRUE:

Sheets("Sheet Name").Protect Password:="123456", UserInterFaceOnly:=True, Contents:=True 

Лист Код: Set date.01 значение в date.01 если date.02 клетки изменения

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(Target, Range("date.01")) Is Nothing Then 
    Worksheets("Sheet Name").Range("date.02") = Target 
    End If 
End Sub 

клетки "date.01" и "date.02" разблокированы.

Почему я не могу их обновить?

EDIT:

ли SelectionChange событие лучший вариант, чтобы изменить значения ячеек? И это нормально, чтобы выполнить задание так:

Worksheets("Sheet Name").Range("date.02") = Target 

Я могу видеть, что изменения вступили в силу, когда исходная клетка получает фокус обратно.

Что я действительно хочу сделать, так это дать группе ячеек в разных листах одно и то же значение в любое время, когда любой из них будет изменен пользователем.

РЕШЕНИЕ.

Мой плохо, я использовал

Worksheet_SelectionChange 

вместо

Worksheet_Change 

Я также должен был использовать это, чтобы предотвратить какие-либо ошибки.

Application.EnableEvents = False 
<CODE> 
Application.EnableEvents = True 

Не нужно было использовать UserInterfaceOnly, так как все ячейки/диапазоны разблокированы.

+0

Попробуйте 'Sheets ("Sheet Name") Защитить Пароль:. = "123456", UserInterFaceOnly: = False, Содержание: = True ' – R3uK

+0

То же самое, это не меняется. Я забыл сказать, что у ячейки есть правило валидации для дат. – giorgiline

+0

Вызывает ли это какое-либо сообщение? Добавьте сообщение об ошибке для своего правила проверки, таким образом вы узнаете, исходит ли ошибка! – R3uK

ответ

0

метод события нам e - Рабочий лист.Изменить событие

https://msdn.microsoft.com/en-us/library/office/ff839775.aspx

А код был как:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("date.01")) Is Nothing Then 
    Application.EnableEvents = False 
    Worksheets("Sheet1").Range("date.01") = Target 
    Worksheets("Sheet2").Range("date.02") = Target 
    Worksheets("Sheet3").Range("date.03") = Target 
    Worksheets("Sheet4").Range("date.04") = Target 
    Worksheets("Sheet5").Range("date.05") = Target 
    Application.EnableEvents = True 
    End If 
End Sub 
0

вы можете просто проверить, что-то связано с защитой.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("date.01")) Is Nothing Then

Sheets("Sheet Name").unProtect Password:="123456"

`Worksheets("Sheet Name").Range("date.02") = Target` 
`Sheets("Sheet Name").Protect Password:="123456", UserInterFaceOnly:=True` 

End if 

End Sub

ли вы применить проверку с помощью VBA

+0

Это не работает. Проверка выполняется с помощью пользовательского интерфейса приложения. – giorgiline

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