Записать дату и время [...] в sheet2 при редактировании ячейки в указанном диапазоне в sheet1 - PullRequest
0 голосов
/ 08 мая 2019

Sheet1 выглядит следующим образом

https://i.imgur.com/4HUV6HI.jpg

работает с этим кодом:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim WorkRng As Range
Dim rng As Range
Dim xOffsetColumn As Integer

Set WorkRng = Intersect(Application.ActiveSheet.Range("B2:K10"), Target)
xOffsetColumn = 11

If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each rng In WorkRng
        If Not VBA.IsEmpty(rng.Value) Then
            rng.Offset(0, xOffsetColumn).Value = Now
            rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
        Else
            rng.Offset(0, xOffsetColumn).ClearContents
        End If
    Next
    Application.EnableEvents = True
End If
End Sub

Что он делает до сих пор:

  • когда я редактирую что-либо в диапазоне B2:K10, это добавляет дату и время в правой части таблицы

Что мне нужно:

  • когда я редактирую что-либо в указанном выше диапазоне, запишите дату и время плюс соответствующий шаг и элемент, все в Sheet2, начиная с A2

Ожидаемый результат:

https://i.imgur.com/0gpNbhi.jpg

И продолжайте добавлять ниже последней строки снова и снова, никогда не стирайте запись, если значение удаляется из ячейки в Sheet1. При необходимости удалит записи вручную.

1 Ответ

0 голосов
/ 08 мая 2019

попробуйте

Private Sub Worksheet_Change(ByVal Target As Range)

Dim WorkRng As Range
Dim rng As Range
Dim nextRow As Long

Set WorkRng = Intersect(Application.ActiveSheet.Range("B2:K10"), Target)

If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each rng In WorkRng
        If Not VBA.IsEmpty(rng.Value) Then
            nextRow = Log.Cells(Rows.Count, 1).End(xlUp).Row + 1
            Log.Cells(nextRow, 1) = Me.Cells(rng.Row, 1)
            Log.Cells(nextRow, 2) = Me.Cells(1, rng.Column)
            Log.Cells(nextRow, 3) = Now
            Log.Cells(nextRow, 3).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
        End If
    Next
    Application.EnableEvents = True
End If
End Sub

Код идентифицирует номер строки следующей пустой строки на листе 2, а затем записывает значения в первые три ячейки этой строки.

Редактировать: После просмотра изменений в коде: вам не нужно проходить через процедуру объявления переменной листа и затем устанавливать ее на листе. Вместо этого используйте свойство (Name), чтобы присвоить листу имя, и вы можете получить к нему доступ из любого места кода через это имя. Я изменил код, чтобы отразить это.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...