попробуйте
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](https://i.stack.imgur.com/7UEoT.png)