Я столкнулся с несколькими проблемами с некоторым кодом в VBA. Я пытаюсь, чтобы изменения, внесенные в ячейки на листе Excel, отображались в комментариях к ячейке, в которую было внесено изменение, и я хочу sh, чтобы эти изменения были сохранены в списке, чтобы я мог просмотреть их все позже. Я пробовал много разных фрагментов кода, которые я нашел, чтобы попытаться внедрить его в код, но ни один из них не работал.
Есть идеи, как заставить это работать?
Рабочий лист
Приведенный ниже код - это то, что я использую в настоящее время
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Adding As Boolean, Finding As Boolean, Subtracting As Boolean
Dim f As Range, v
Select Case Target.Address(True, True)
Case "$A$4": Adding = True
Case "$C$4": Subtracting = True
Case "$E$4": Finding = True
Case Else: Exit Sub
End Select
v = Trim(Target.Value)
If Len(v) = 0 Then Exit Sub
Set f = Me.Range("C8").Resize(1000, 1).Find(v, lookat:=xlWhole)
If Adding Then
If f Is Nothing Then
'not found: add as new row
Set f = Me.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)
f.Value = v
End If
f.Offset(0, 1).Value = f.Offset(0, 1).Value + 1
doDate f.Offset(0, 2)
Target.Value = ""
ElseIf Subtracting Then
If f Is Nothing Then
MsgBox v & " not found for subtraction!"
Else
f.Offset(0, 1).Value = f.Offset(0, 1).Value - 1
doDate f.Offset(0, 3)
Target.Value = ""
End If
Else 'finding
If Not f Is Nothing Then
f.EntireRow.Select
Target.Value = ""
Else
MsgBox v & " not found."
End If
End If
If Adding Or Subtracting Then Target.Select
End Sub
Sub doDate(c As Range)
With c
.NumberFormat = "m/d/yyyy h:mm AM/PM"
.Value = Now
End With
End Sub
Я реализовал несколько формул на рабочем листе, но не вижу причин, почему это будет иметь значение в этом ситуация, поскольку они отслеживают только количество товаров с одним и тем же уникальным идентификатором.
Я также пробовал код, который добавлял комментарии к ячейкам по мере их изменения, который работал, но всегда возвращал предыдущее значение ячейки как пустое. Однако на самом деле он не добавлен в текущий код.
Option Explicit
Public preValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Target.ClearComments
Target.AddComment.Text Text:="Previous Value was " & preValue & Chr(10) & "Revised " & Format(Date, "mm-dd-yyyy") & Chr(10) & "By " & Environ("UserName")
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target = "" Then
preValue = "a blank"
Else: preValue = Target.Value
End If
End Sub