2015-02-11 4 views
2

Я хочу создать безопасную метку времени на моем листе Excel. VBA, который я использую, автоматически добавит имя пользователя текущего пользователя, время и дату, когда пользователь помещает информацию в столбец A. Поэтому, если пользователи помещают что-то в ячейку A1, тогда B1 автоматически заполняется их именем пользователя, а C1 заполняется с указанием времени и даты. Единственная проблема заключается в том, что этот метод не является безопасным, поскольку пользователь может изменять информацию после ее автоматического заполнения. Я хотел бы добавить код в этот VBA, чтобы он заблокировал все три ячейки после заполнения информации.Безопасная отметка времени - VBA

Я планировал использовать функцию Protect Sheet и разрешал пользователям «выбирать разблокированные ячейки». Поэтому, если VBA может автоматически блокировать ячейки, пользователи не смогут изменять информацию.

Кроме того, я использовал Me.Unprotect перед сменой клеток и Me.Protect после этого еще не работает

Любая помощь будет высоко ценится!

+0

Привет, мне нужно заблокировать каждую ячейку после ввода данных в заданном диапазоне. Например, как только я вхожу в Y или N. не могу изменить его снова. ниже мой код – 3689

ответ

1

Предположим, что мы начинаем все ячейки на листе разблокирован и листовым защитой-паролем с паролем:

6LgSdHjc2uOssv0e1LDI

Следующая событие Macro будет:

  1. снять защитную книгу
  2. обнаружения записей в колонке A
  3. место имя пользователя в колонке B и даты/времени в колонке C
  4. блокировки записей в столбцах A, B, C
  5. повторно защитить рабочий лист.

Это идет в области рабочего листа Код:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A As Range, MyPass As String, sh As Worksheet 
    Dim unit As Range 
    Set A = Range("A:A") 
    MyPass = "6LgSdHjc2uOssv0e1LDI" 
    Set sh = ActiveSheet 
    If Intersect(Target, A) Is Nothing Then Exit Sub 

    Set unit = Union(Target, Target.Offset(0, 1), Target.Offset(0, 2)) 

    Application.EnableEvents = False 
    sh.Unprotect (MyPass) 
    unit.Locked = False 
     Target.Offset(0, 1) = Environ("Username") 
     Target.Offset(0, 2) = Now() 
    unit.Locked = True 
    sh.Protect (MyPass) 
    Application.EnableEvents = True 
End Sub 

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

  1. правой кнопкой мыши на название вкладки в нижней части окна Excel
  2. select Просмотреть код - это вызывает окно VBE
  3. вставьте материал и закройте окно VBE

Если у вас есть какие-либо проблемы, сначала попробуйте его на пробном листе.

Если вы сохраните книгу, макрос будет сохранен вместе с ней. Если вы используете версию Excel позже 2003 года, вы должны сохранить файл как .xlsm, а не.XLSX

Чтобы удалить макрос:

  1. воспитывать окна VBE как выше
  2. ясный код из
  3. закрыть окно VBE

Чтобы узнать больше о макросах в целом , см.:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

и

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Чтобы узнать больше о Event Macros (таблица кодов), см:

http://www.mvps.org/dmcritchie/excel/event.htm

Макросы должны быть разрешены для этой работы!

+0

Спасибо! Это сработало. Я внес некоторые изменения в выборку данных по мере необходимости. Очень ценю вашу поддержку. – 3689

+0

Спасибо за отзыв –

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