我有以下的代码在"sheet macros"(右键点击表格 - 查看代码)中。它曾经可以运行,但现在它没有添加注释在我指定的范围A5:AQ155。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'If (Target.Row > 3 And Target.Row < 155) Then Cells(Target.Row, "AT") = Now()
Const sRng As String = "A5:AQ155" ' change as required
Dim sOld As String
Dim sNew As String
Dim sCmt As String
Dim iLen As Long
Dim bHasComment As Boolean
With Target(1)
If Intersect(.Cells, Range(sRng)) Is Nothing Then Exit Sub
sNew = .Text
sOld = .Text
.Value = sNew
Application.EnableEvents = True
sCmt = "Edit: " & Format$(Now, "dd Mmm YYYY hh:nn:ss") & " by " & Application.UserName & Chr(10) & "Previous Text :- " & sOld
If Target(1).Comment Is Nothing Then
.AddComment
Else
iLen = Len(.Comment.Shape.TextFrame.Characters.Text)
End If
With .Comment.Shape.TextFrame
.AutoSize = True
.Characters(Start:=iLen + 1).Insert IIf(iLen, vbLf, "") & sCmt
End With
End With
End Sub
我做错了什么?
Application.EnableEvents = True
,然后再次运行代码。您还需要找到一个好的位置在您的代码中设置回来。由于这行代码的写法是If Intersect(.Cells, Range(sRng)) Is Nothing Then Exit Sub
,当用户在测试范围之外进行更改时,事件将永远不会重新启用,因此代码将永远不会触发。例如,在If
块中添加一个Else
并在Else
结构中编写Application.EnableEvents = True
和Exit Sub
。 - Scott HoltzmanRange
部分这样做!If Intersect(.Cells, Range(sRng)) Is Nothing Then Exit Sub
应该改为If Intersect(.Cells, .Range(sRng)) Is Nothing Then Exit Sub
。 - BruceWayneMe.range(sRng)
以回答问题。仅使用.range(sRng)
导致脚本无法运行。 - aduff