Private Sub Worksheet_Activate() OldVal = ActiveCell.Value End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) OldVal = Target.Cells(1, 1).Value End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If (Environ("USERNAME") <> Cells(Target.Row, 1)) Then Target.Cells(1, 1).Value = OldVal End If End Sub
[/vba]
Добрый день!
Написал простенький код для запрета редактирования пользователям отдельных строк. Открываю файл, начинаю тестировать. Всё ок, пока не решу редактировать пустую ячейку. Тогда вылазит ошибка:
"Run-time error '-2147417848 (80010108)': Method 'Value' of object 'Range' failed"
(Во-первых, конечно, интересует, как её побороть и чем ему так не нравится, что я ячейке присваиваю значение пустой строки (судя по дебагеру)).
Но и во-вторых, после этого код совершенно не хочет выполняться, никаких признаков "жизни" не подаёт, только после переоткрытия файла заново. Совершенно не догоняю, в чём проблема!
[vba]
Код
Public OldVal As String
Private Sub Worksheet_Activate() OldVal = ActiveCell.Value End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) OldVal = Target.Cells(1, 1).Value End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If (Environ("USERNAME") <> Cells(Target.Row, 1)) Then Target.Cells(1, 1).Value = OldVal End If End Sub
[/vba]
Добрый день!
Написал простенький код для запрета редактирования пользователям отдельных строк. Открываю файл, начинаю тестировать. Всё ок, пока не решу редактировать пустую ячейку. Тогда вылазит ошибка:
"Run-time error '-2147417848 (80010108)': Method 'Value' of object 'Range' failed"
(Во-первых, конечно, интересует, как её побороть и чем ему так не нравится, что я ячейке присваиваю значение пустой строки (судя по дебагеру)).
Но и во-вторых, после этого код совершенно не хочет выполняться, никаких признаков "жизни" не подаёт, только после переоткрытия файла заново. Совершенно не догоняю, в чём проблема!semuss
Private Sub Worksheet_Change(ByVal Target As Range) If (Environ("USERNAME") <> Cells(Target.Row, 1)) Then With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub
[/vba]
Как-то так и без остальных событий[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If (Environ("USERNAME") <> Cells(Target.Row, 1)) Then With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub
Он не одноразовый, он зацикленный на бесконечность. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) ' запускаем код If (Environ("USERNAME") <> Cells(Target.Row, 1)) Then Application.EnableEvents = False ' отключаем обработку событий Target.Cells(1, 1).Value = OldVal ' вызываем Worksheet_Change заново End If Application.EnableEvents = False ' включаем обработку событий End Sub
[/vba]
Он не одноразовый, он зацикленный на бесконечность. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) ' запускаем код If (Environ("USERNAME") <> Cells(Target.Row, 1)) Then Application.EnableEvents = False ' отключаем обработку событий Target.Cells(1, 1).Value = OldVal ' вызываем Worksheet_Change заново End If Application.EnableEvents = False ' включаем обработку событий End Sub