安全时间戳 - VBA

时间:2015-02-11 12:08:53

标签: vba excel-vba excel

我想在Excel工作表上创建一个安全的时间戳。我正在使用的VBA将自动添加当前用户的用户名,时间和用户将信息放入A列的日期。因此,如果用户将某些内容放入单元格A1,则B1会自动填充其用户名并且C1将被填充随着时间和日期。唯一的问题是此方法不安全,因为用户可以在自动填充信息后更改信息。我想在此VBA中添加代码,以便在填充信息后锁定所有三个单元格。

我计划使用“保护表”功能,只允许用户“选择未锁定的单元格”。因此,如果VBA可以自动锁定单元格,则用户将无法更改信息。

此外,我在更换单元格之前使用了Me.Unprotect,之后使用Me.Protect仍然无法正常工作

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

假设我们从工作表解锁上的所有单元格开始,并使用密码保护密码表:

<强> 6LgSdHjc2uOssv0e1LDI

以下事件宏将:

  1. 取消保护工作簿
  2. 检测 A
  3. 列中的条目
  4. 将用户名放在 B 列中,将日期/时间戳放在 C
  5. 列中
  6. 锁定 A,B,C
  7. 列中的条目
  8. 重新保护工作表。
  9. 这可以在工作表代码区域中找到:

    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. 选择查看代码 - 这会打开一个VBE窗口
    3. 粘贴内容并关闭VBE窗口
    4. 如果您有任何疑虑,请先在试用工作表上试用。

      如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

      删除宏:

      1. 按上述方式调出VBE窗口
      2. 清除代码
      3. 关闭VBE窗口
      4. 要了解有关宏的更多信息,请参阅:

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

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

        要了解有关事件宏(工作表代码)的更多信息,请参阅:

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

        必须启用宏才能使其生效!