首页 > 解决方案 > Excel VBA - 更改单元格时插入用户名

问题描述

我在这个网站上找到了一些我认为可以解决我的问题的代码,但是当我将它添加到我的工作簿并对指定列中的单元格进行更改时,没有任何反应。我想看看是否有人能够告诉我我哪里出错了。我需要做的是当 X 列中的单元格发生更改时,在相应的单元格中添加用户名和时间戳(由 CAT 项目审核)。我已将此代码放入我的个人工作簿中,但我不知道这是否会成为问题?此外,我需要它在不指定名称的情况下处理任何工作表。这是我正在使用的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ThisRow As Long ' make sure to declare all the variables and appropiate types
ThisRow = Target.Row

'protect Header row from any changes
If (ThisRow = 2) Then

       Application.EnableEvents = False
       Application.Undo
       Application.EnableEvents = True
       MsgBox "Header Row is Protected."
       Exit Sub

End If


If Cells(2, Target.Column) = "Reviewed by CAT Project" Then

    Dim sOld As String, sNew As String
    sNew = Target.Value 'capture new value

    With Application
        .EnableEvents = False
        .Undo
    End With

    sOld = Target.Value 'capture old value
    Target.Value = sNew 'reset new value

    If sOld <> sNew Then

        ' time stamp corresponding to cell's last update
        Range("Z" & ThisRow).Value = Now
        ' Windows level UserName | Application level UserName
        Range("Y" & ThisRow).Value = Environ("username")
        Range("Y:Z").EntireColumn.AutoFit

    End If

    Application.EnableEvents = True

End If

End Sub

标签: excelvba

解决方案


您发布的代码在以下情况下有效:

  1. 第 2 行是在输入代码之前设置的。
  2. 代码放在工作表代码区

因为它是工作表代码,所以非常容易安装和自动使用:

  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

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


推荐阅读