Я запрограммировал ручной макрос в Excel VBA, который отображает таблицу для отображения истории определенных данных на листе, называемом «оценкой». Данные, на которые я ссылаюсь, находятся в таблице «контрольный список» (см. Ниже). Проблема в том, что данные в «контрольном списке» меняются каждый день или чаще. Каждый раз, когда лист меняет макрос, он должен вставить новую строку с новой датой в LastRow таблицы в разделе «Оценка». (Я гуглил и нашел возможность использовать метку времени, см. Ниже и функцию Workbook.Sheetchange, которая должна активировать этот макрос при каждом изменении листа, см. Ниже). Я хотел бы отобразить историю данных в «оценке». Таким образом, значения в строке последнего изменения должны оставаться стабильными. Так, например, строка 1 в «оценке»: 2020-01-17 значение равно 1 (это должно остаться 1, потому что я хочу видеть прогресс) Теперь лист меняется, и строка 2 вставляется: строка 2: 2020-01-18 значение теперь равно 2 (скопировано из контрольного списка), и я хочу, чтобы значение в строке 1 оставалось равным 1 (потому что это было 1 до последнего изменения). Прямо сейчас это выглядит так:
Sub Test()
'
' Test Macro
Range("A3").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Range("B3").Select
ActiveCell.FormulaR1C1 = "='checklist'!R[399]C[58]"
Range("C3").Select
ActiveCell.FormulaR1C1 = "1"
Range("D3").Select
ActiveCell.FormulaR1C1 = "='checklist'!R[399]C[58]"
End Sub
отметка времени:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("'checklist'!BH400:BL500")) Is Nothing Then
Cells(Target.Row, 1) = Format(Now, "DD/MM/YYYY hh:mm")
End If
End Sub
workbook.sheetchange:
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Source As Range)
' runs when a sheet is changed
End Sub
У вас есть идеи, как соединить эти коды ? Извините, я на самом деле не эксперт VBA. Я сделал Google лист, чтобы показать, что я на самом деле имею в виду, но мне нужно это в Excel VBA, Google лист просто для того, чтобы визуализировать, что я имею в виду: https://docs.google.com/spreadsheets/d/1OU_95Lhf6p0ju2TLlz8xmTegHpzTYu4DW0_X57mObBc/edit#gid = 0
Это мой код прямо сейчас:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range)
If Sh.Name = "Checklist" Then
'Monitoring from A3:E100, if different change this
If Not Intersect(target, Range("A2:E1000")) Is Nothing Then
'if any monitoring here, please you add here
Test target 'Here procedure to insert
End If
End If
End Sub
Private Sub Test(target As Range)
Dim LastRow As Long
LastRow = Range("Evaluation!A" & Sheets("Evaluation").Rows.Count).End(xlUp).Row
If Range("Evaluation!A1").Value <> "" Then
LastRow = LastRow + 1
End If
'every change A3:E in checklist will insert row to this evaluation
'but if different please you decide here
Range("Evaluation!A" & LastRow).Value = Format(Now, "dd.mm.yyyy hh:mm") 'you can change this
Range("Evaluation!B" & LastRow & ":F" & LastRow).Value = Range("Checklist!A" & target.Row & ":E" & target.Row).Value
End Sub