Вот другой подход. Я поместил два флажка ActiveX на листе. Причина, по которой я использовал элементы управления ActiveX, заключается в том, что они имеют события, то есть код запускается при нажатии на них без назначения им макроса. Я удалил их подписи и назвал их ChkOwner и ChkManager . Они размещаются в столбце слева от поля Имя , которое, в свою очередь, находится слева от поля Дата / Время (легко настроить: ищите Смещение в коде ).
Код должен быть размещен на листе кодов, принадлежащем вкладке, на которой вы хотите выполнить действие. Убедитесь, что вы выбрали правильный лист, потому что в остальном код не будет иметь никакого эффекта.
Option Explicit
Private Sub Worksheet_Activate()
SetProtection
End Sub
Private Sub ChkOwner_Click()
SignTheDocument ChkOwner
End Sub
Private Sub ChkManager_Click()
SignTheDocument ChkManager
SetProtection
End Sub
Private Sub SignTheDocument(Chk As MSForms.CheckBox)
Chk.TopLeftCell.Offset(0, 1).Value = IIf(Chk.Value, Application.UserName, vbNullString)
Chk.TopLeftCell.Offset(0, 2).Value = IIf(Chk.Value, Now(), vbNullString)
End Sub
Private Sub SetProtection()
With ActiveSheet
If ChkManager.Value = True Then
.Protect Password:="Secret", _
Contents:=True, _
UserInterfaceOnly:=True
Else
Unprotect "Secret"
End If
End With
End Sub
Первая процедура запускается, когда рабочий лист активирован. Вызывает процедуру SetProtection
. Здесь вы можете указать объект защиты в деталях. Элемент, который я добавил - UserInterfaceOnly = True
. Это означает, что код может вносить изменения, которые пользователь не может сделать из интерфейса рабочего листа. Если вы хотите сохранить пароль в секрете, добавьте защиту паролем в ваш проект VBA. Это отличается от защиты рабочего листа и рабочей книги и устанавливается в окне редактора VB.
Следующие две процедуры отвечают на щелчки по флажкам на рабочем листе. Они оба называют суб SignTheDocument
, с которым они идентифицируют себя. Подпись добавляется или удаляется в зависимости от значения флажка. Если щелчок был на защите ChkManager , она также будет рассмотрена.
Просто и легко. Я думаю, что вы можете справиться с этим.