ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4020|回复: 18

[求助] 请问如何让批注中自动记录变更记录

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-2-7 21:33 | 显示全部楼层 |阅读模式
本帖最后由 wtujcf123 于 2021-2-8 20:52 编辑

各位老师,请问如何让单元格的批注中自动记录本单元格修改的内容及时间呢?
1.在单元格变化时,自动将本单元格之前已存在的内容复制到批注中去,并记录变更时间及日期
2.批注框的大小随内容的多少而变化,
3.因表格涉及到多人修改,如果能加上修改人就最好了。


再次谢谢各位老师。

求助-如何让单元格的批注中自动记录本单元格修改的内容及时间.rar

8.28 KB, 下载次数: 21

求助-如何让单元格的批注中自动记录本单元格修改的内容及时间

TA的精华主题

TA的得分主题

发表于 2021-2-8 09:40 | 显示全部楼层
在sheet1模块中加入以下代码:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address = "$B$2" Then
  3.         Target.Comment.Text vbCrLf & Format(Now, "YYYY-MM-DD hh:mm") & "单元格内容被" & Application.UserName & "修改为:" & Target.Value, Len(Target.Comment.Text)
  4.         Target.Comment.Shape.TextFrame.AutoSize = True
  5.     End If
  6. End Sub
复制代码

注意这个代码记录的是每次修改之后的内容,也可以看作下次修改之前的

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-8 20:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 wtujcf123 于 2021-2-8 20:54 编辑
小fisher 发表于 2021-2-8 09:40
在sheet1模块中加入以下代码:

注意这个代码记录的是每次修改之后的内容,也可以看作下次修改之前的

老师,不知道怎么弄,放进去后,没动静。能麻烦再详细指导一下吗? image.png 显示的是这个东西。

TA的精华主题

TA的得分主题

发表于 2021-2-9 08:18 | 显示全部楼层
wtujcf123 发表于 2021-2-8 20:51
老师,不知道怎么弄,放进去后,没动静。能麻烦再详细指导一下吗?显示的是这个东西。
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address = "$B$2" Then
  3.         If Target.Comment Is Nothing Then
  4.             Target.AddComment Format(Now, "YYYY-MM-DD hh:mm") & "单元格内容被" & Application.UserName & "修改为:" & Target.Value
  5.         Else
  6.             Target.Comment.Text vbCrLf & Format(Now, "YYYY-MM-DD hh:mm") & "单元格内容被" & Application.UserName & "修改为:" & Target.Value, Len(Target.Comment.Text) + 1
  7.         End If
  8.         Target.Comment.Shape.TextFrame.AutoSize = True
  9.     End If
  10. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-9 16:57 | 显示全部楼层

谢谢老师了。可以运行了,能再麻烦一下您吗?想整个一列的单元格均能自动记录,并且,批注里记录的顺序是倒序的。

TA的精华主题

TA的得分主题

发表于 2021-2-18 11:01 | 显示全部楼层
Dim SelTxt$

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TT$, NewTxt$
With Target
     If .Count > 1 Or .Column <> 2 Or .Row < 2 Then Exit Sub
     NewTxt = .Text
     If NewTxt = SelTxt Then Exit Sub
     SelTxt = NewTxt
     If NewTxt = "" Then NewTxt = "<空白>"
     TT = Format(Now, "yyyy-mm-dd hh:mm:ss_") & NewTxt & "_(by." & Application.UserName & ")"
     .NoteText TT & IIf(.NoteText = "", "", vbCrLf & .NoteText)
     .Comment.Shape.TextFrame.AutoSize = True
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xR As Range
With Target
     If .Count = 1 And .Column = 2 And .Row > 1 Then SelTxt = .Text
End With
End Sub

1) 操作牽涉著其它問題--如複製粘貼, 多格操作, 下拉右拉--無法一一防止
2) 只能針對"單一格"處理, 在選取單元格時先取得原來內容, 有改變再記錄,
    例如:原來值是123, 重新輸入123, 則不算改變單元格
3) 原來有值, 被清除了, 記錄, 並標示<空白>

測試時, 先將原有的註解清除~~


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-18 16:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
准提部林 发表于 2021-2-18 11:01
Dim SelTxt$

Private Sub Worksheet_Change(ByVal Target As Range)

谢谢老师,您的三点意见我会注意。
经测试,
1.复制粘贴时,会将原来的批注内容清空,比较危险,我设想了两种解决方案:
    1)是参照我在csdn上下载了“幻欢子”制作的一个文件,他的想法是将每次的修改内容记录到另一个表格中,然后从对应单元格中提取信息,但他文件的弊端也很明显,就是单元格的操作会受影响。请见附件。
    2)是禁止该列的粘贴操作。以上两种方案能麻烦老师帮我修改一下吗?
2.我在测试的时候发现当变动超过6次时,批注的内容就不会再增加了,但从程序中看不到相关的限制,是因为excel本身的限制吗?

感谢老师的回答,祝老师新年快乐。我对计算机有些兴趣,但未系统学习相关知识,只能修改非常基础的东西,还请老师费心了。

历史记录批注显示.rar

22.71 KB, 下载次数: 20

历史记录批注显示

TA的精华主题

TA的得分主题

发表于 2021-2-20 10:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wtujcf123 发表于 2021-2-18 16:55
谢谢老师,您的三点意见我会注意。
经测试,
1.复制粘贴时,会将原来的批注内容清空,比较危险,我 ...

1) 文本都有文字長度的限制, 無法將所有輸入的記錄下來, 且經年累月, 資料太多, 佔空間,
    無論放在註解或另一工作表, 都一樣受限
2) 防止被粘貼或清除全部, 在單元格開放可輸入下, 是沒辦法防護的

也許去研究"追蹤修訂"或"文件共用"是否適用于你的情況,
但這要自己找使用方法~~我不會教


TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-20 14:20 | 显示全部楼层
准提部林 发表于 2021-2-20 10:33
1) 文本都有文字長度的限制, 無法將所有輸入的記錄下來, 且經年累月, 資料太多, 佔空間,
    無論放在註 ...

好的,谢谢老师了,我自己再找找了。

TA的精华主题

TA的得分主题

发表于 2021-2-20 15:06 | 显示全部楼层
B列数修改时自动增加批注记录信息
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   If Target.Column = 2 Then
  3.     If Target.Comment Is Nothing Then
  4.         Target.AddComment Format(Now, "YYYY-MM-DD hh:mm") & "单元格内容被" & Application.UserName & "修改为:" & Target.Value
  5.     Else
  6.         Target.Comment.Text Format(Now, "YYYY-MM-DD hh:mm") & "单元格内容被" & Application.UserName & "修改为:" & Target.Value & vbCrLf & Target.Comment.Text
  7.     End If
  8.     Target.Comment.Shape.TextFrame.AutoSize = True
  9.   End If
  10. End Sub
复制代码


评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 18:42 , Processed in 0.048204 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表