Как добавить комментарий, если ячейка ранее не была пустой?

#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