#excel #vba
#excel #vba
Вопрос:
Я пытаюсь добавить код журнала автоматического комментария к измененным ячейкам.
Я хочу добавить комментарий, только если ячейка не была пустой, я имею в виду, если в ячейке уже есть содержимое.
Мой код добавляет комментарий к каждой ячейке, даже если я впервые пишу что-то в новую ячейку.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim singlecell As Range
If Target.Cells.CountLarge > 100000 Then Exit Sub
For Each singlecell In Target
If singlecell.Comment Is Nothing And Target.Value <> "" Then
singlecell.AddComment Now amp; " - " _
amp; "new value: " _
amp; singlecell.Value amp; " - " _
amp; Environ("username") amp; " -" _
amp; "changed the value from a NULL value."
ElseIf Not singlecell.Comment Is Nothing And Target.Value <> "" Then
Target.Comment.Text _
vbNewLine amp; Now amp; " - " _
amp; "value changed to: " _
amp; Target.Value amp; " - by: " _
amp; Environ("username") amp; " -" _
, Len(Target.Comment.Text) 1 _
, False
ElseIf singlecell.Comment Is Nothing And Target.Value = 0 Then
Exit Sub
End If
singlecell.Comment.Shape.TextFrame.AutoSize = True
Next singlecell
End Sub
Ответ №1:
я думаю, что нашел свой собственный ответ приведенный ниже код работает и добавляет комментарии только в том случае, если ячейка не пуста. таким образом, это упрощает отслеживание изменений, внесенных в любую ячейку.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.DisplayAlerts = False
If ActiveCell.Value = vbNullString Then
Exit Sub
Else
If Target.Comment Is Nothing And Target.CountLarge < 2 Then
Target.AddComment Now amp; " - " _
amp; "prev value = " _
amp; ActiveCell.Value amp; " - " _
amp; "new value: " _
amp; Target.Value amp; " - " _
amp; Environ("username") amp; " -" _
amp; "changed the value from a NULL value."
ElseIf Not Target.Comment Is Nothing Then
Target.Comment.Text _
vbNewLine amp; Now amp; " - " _
amp; "value changed to: " _
amp; Target.Value amp; " - by: " _
amp; Environ("username") amp; " -" _
, Len(Target.Comment.Text) 1 _
, False
Exit Sub
End If
End If
If Target.CountLarge < 2 Then
Target.Comment.Shape.TextFrame.AutoSize = True
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Ответ №2:
On Error Resume Next
S_Cell.AddComment
If Err.Number <> 0 Then
S_Cell.Comment.Delete
S_Cell.AddComment
End If