excel - 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
解决方案
您发布的代码在以下情况下有效:
- 第 2 行是在输入代码之前设置的。
- 代码放在工作表代码区
因为它是工作表代码,所以非常容易安装和自动使用:
- 右键单击 Excel 窗口底部附近的选项卡名称
- 选择查看代码 - 这将打开一个 VBE 窗口
- 粘贴这些东西并关闭 VBE 窗口
如果您有任何疑虑,请先在试用工作表上进行尝试。
如果您保存工作簿,宏将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx
要删除宏:
- 如上所述调出 VBE 窗口
- 清除代码
- 关闭 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
必须启用宏才能使其正常工作!
推荐阅读
- c# - 按下和释放按钮时如何传递两个不同的字符串值?
- python - ImportError:pandas pyinstaller 中没有名为“distutils”的模块
- vb.net - 如何使用 UserPrinciple.ChangePassword() 显示来自 AD 的错误消息?
- r - 创建相对频率直方图并叠加正态分布曲线
- url - JMeter 提取重定向请求正文 URL
- python - 如何使用apply将pandas数据框列拆分为多个?
- vue.js - 谷歌翻译无法在 vue 上运行,它在 TranslateElement 上出现错误
- php - 如何在foreach中只获得一条相同的记录
- angular - 如何在 Angular 7 中将 HTTP 请求超时时间延长 2 分钟以上?
- vb.net - 在vb.net的屏蔽文本框中插入空数据时如何创建条件