再说原题错在哪里(兼与二楼、三楼的两位老师讨论)?
先看原程序:
Option Explicit Dim RngValue As String '定义一个变量给模块,用于保存单元格中的数据 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count <> 1 Then Exit Sub '选中多个单元格时退出程序 If Target.Formula = "" Then '根据选中的单元格内容给变量RngVaue赋值 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 Dim Cvalue As String '定义变量保存单元格修改后的内容 If Target.Formula = "" Then '判断单元格是否被修改为空单元格 Cvalue = "空" Else Cvalue = Target.Formula End If If RngValue = Cvalue Then Exit Sub '如果单元格修改前后的内容一样则退出程序 Dim RngCom As Comment '定义一个批注类型的变量,名称为RngCom Dim ComStr As String '定义变量ComStr,用来保存批注的值 Set RngCom = Target.Comment '将被修改单元格的批注赋给变量RngCom If RngCom Is Nothing Then Target.AddComment '如果单元格中没有批注则新建批注 ComStr = Target.Comment.Text '将批注的内容保存到变量ComStr中 '重新修改批注的内容=原批注内容+当前日期和时间+原内容+修改后的新内容 Target.Comment.Text Text:=ComStr & Chr(10) & _ Format(Now(), "yyyy-mm-dd hh:mm") & _ " 原内容: " & RngValue & _ ",修改为: " & Cvalue End If Target.Comment.Shape.TextFrame.AutoSize = True '根据批注内容自动调整批注大小 End Sub 分析: 我给加粗加大的三个语句,是错误的原因! 实操证明:当之前输入为公式(即“=******”的形式)时,再双击公式所在单元格(但是不要作任何更改!)后回车,批注会增加一行,即程序错误地认为你对单元格进行了修改。
|