|
各位大神,
小生正在学习《别怕,excel vba其实很简单》。在本书5.2.7 用批注记录单元格中数据的修改情况部分,作者提供了两个子程序(见下附),放在记录修改情况的工作表中。若是每一张工作表都要记录,则每一个工作表中都要输入这两个程序。这个感觉有点冗余。我想把它改造一下,放在thisworkbook中,让这个工作簿里的任何工作表都能使用,不知如何修改,还请各位高手大神指点。
盼复,谢谢!
附:文中程序
dim rngvalue as string 在所有过程之前,定义模块级别变量,保存单元格中的数据,可被所有过程使用
建立两个过程,以下selectionchange过程首先用于记录被更改前单元格中的数据
Private Sub worksheet_selectionchange(ByVal target As Range)
If target.Cells.Count <> 1 Then Exit Sub '选中的单元格大于1,退出
If target.Formula = "" Then
rngvalue = "空" '如果单元格为空,此属性返回一个空字符串。
Else
rngvalue = target.text
End If
End Sub
Private Sub worksheet_change(ByVal target As Range)
If target.Cells.Count <> 1 Then Exit Sub '选中的单元格 大于1,退出
Dim cvalue As String '保存单元格修改后的内容
If target.Formula = "" Then '判断是否修改为空表格,
cvalue = "空" '若为空,则cvalue赋值为"空"
Else
cvalue = target.Formula '若为非空,则cvalue赋值为其内容
End If
If rngvalue = cvalue Then Exit Sub '若 修改前后一样,则离开程序
Dim rngcom As Comment '定义一个批注类型变量
Dim comstr As String '定义一个字符串变量
Set rngcom = target.Comment
If rngcom Is Nothing Then target.AddComment '若修改的单元没有备注则添加
comstr = target.Comment.text '将备注文本赋予comstr
target.Comment.text text:=comstr & chr(10) & _
format(now(), "yyyy-mm-ddhh:mm") & _
"原内容:" & rngvalue & " " & _
"修改为:" & cvalue
'重新设置备注内容
target.Comment.Shape.TextFrame.AutoSize = True
End Sub
|
|