【问题标题】:Secure Timestamp - VBA安全时间戳 - VBA
【发布时间】:2015-02-11 12:08:53
【问题描述】:

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

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

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

任何帮助将不胜感激!

【问题讨论】:

  • 嗨,我需要在给定范围内的数据输入后锁定每个单元格。就像我在其中输入 Y 或 N 一样。不能再次编辑它。下面是我的代码

标签: vba excel


【解决方案1】:

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

6LgSdHjc2uOssv0e1LDI

以下事件宏将:

  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. 选择查看代码 - 这将打开一个 VBE 窗口
  3. 粘贴内容并关闭 VBE 窗口

如果您有任何疑虑,请先在试用工作表上进行尝试。

如果您保存工作簿,宏将与它一起保存。 如果您使用的是 2003 年以后的 Excel 版本,则必须保存 文件为 .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

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

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

必须启用宏才能正常工作!

【讨论】:

  • 谢谢!有效。我已根据需要对数据的选择进行了一些更改。非常感谢您对它的支持。
  • 感谢您的反馈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2011-01-02
  • 1970-01-01
  • 2013-07-31
相关资源
最近更新 更多