VBA Excel 2003 защищает ячейки по клику

У меня есть электронная таблица, в которой есть столбец (скажем, столбец A). Идея состоит в том, что этот столбец заполняется пользователем с различными оценками. Как только пользователь доволен своими ответами в столбце A, я хочу, чтобы он подтвердил правильность ответов (в идеале, нажав кнопку). После нажатия этой кнопки я хочу использовать VBA для защиты столбца A от повторного редактирования. Я бы предпочел не использовать опцию защиты рабочего листа, так как в электронной таблице есть дополнительные данные, где мне нужно держать некоторые ячейки заблокированными, но редактируемыми (они используют списки проверки данных).

Я нашел этот бит VBA, но он основан на изменении рабочего листа - если бы я мог каким-то образом использовать это, но активировать его только после того, как пользователь подтвердит, что данные установлены, это было бы идеально:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)    
    If Intersect(Target, Range("A2:A14")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    MsgBox "Hey, leave me alone!", 48, "Sorry, I'm protected."
    Application.Undo
    Application.EnableEvents = True
End Sub

person bawpie    schedule 05.12.2012    source источник


Ответы (1)


Если то, что вы разместили, соответствует вашим потребностям, то:

В модуле примерно так:

Public active As Boolean
Sub Button1_Click()
   active = True
End Sub

И в вашем коде электронной таблицы:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If active Then
        If Intersect(Target, Range("A2:A14")) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        MsgBox "Hey, leave me alone!", 48, "Sorry, I'm protected."
        Application.Undo
        Application.EnableEvents = True
    End If
End Sub

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

If Range("A1") = "Locked" then
    ....
person Daniel    schedule 05.12.2012
comment
Спасибо, это работает отлично. Я согласился с вашим вторым предложением и заставил кнопку заполнить ячейку на скрытом листе, что означает, что я могу легко разблокировать ее для тестирования. - person bawpie; 06.12.2012