Если ячейка обновлена, запишите значение ячейки и метку времени в следующую пустую строку - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь обновить столбец с отметкой времени и другой столбец с обновлениями (полученными из определенной ячейки).

Желаемое поведение:
A2 записал в него xy. Это изменение вызывает макрос, который помещает метку времени в столбец C в строке 2, а обновление в строку столбца D 2.
Если новое обновление сделано в A2: Если C2 не пуст, перейдите к C3 и поместите метку времени и поместите обновление в D3 и т. Д.

К сожалению, он помещает первую отметку времени обновления и обновление в столбцы, но если я обновлюсь снова, он не перейдет и не поместит обновление там.

Сообщение об ошибке и макрос Excel
Лист Excel, который я пытаюсь обновить.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCellColumn As Integer
    Dim xCellRow As Integer
    Dim xTimeColumn As Integer
    Dim xTimeRow As Integer
    Dim xUpdateColumn As Integer
    Dim xUpdateRow As Integer
    Dim xRow, xCol As Integer
    xCellColumn = 2
    xCellRow = 10
    xTimeColumn = 6
    xTimeRow = 2
    xUpdateColumn = 7
    xUpdateRow = 2
    i = 2
    xCol = Target.Column
    xRow = Target.Row
    If Target.Text <> "" Then
       If xCol = xCellColumn Then
            If xRow = xCellRow Then
                Do While Range("Munka1").Cells(i, xTimeColumn).Value <> ""
                  i = i + 1
                Loop
                Cells(i, xTimeColumn) = Now()
                Cells(i, xUpdateColumn) = Target.Value
            End If
        End If
    End If
End Sub

1 Ответ

0 голосов
/ 26 января 2019

Пожалуйста, попробуйте это:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCellColumn As Long
    Dim xCellRow As Long
    Dim xTimeColumn As Long
    Dim xUpdateColumn As Long
    Dim SupervisedArea As Range
    Dim i As Integer

    xCellColumn = 2
    xCellRow = 10
    xTimeColumn = 6
    xUpdateColumn = 7

    If Target.Text <> "" Then
        ' If any changed value in the whole column should generate a new data pair:
        'Set SupervisedArea = Intersect(Target, Me.Columns(xCellColumn))
        ' If only one cell should be supervised:
        Set SupervisedArea = Intersect(Target, Me.Cells(xCellRow, xCellColumn))
        If Not SupervisedArea Is Nothing Then
            i = 2
            Do While Me.Cells(i, xTimeColumn).Value <> ""
              i = i + 1
            Loop
            Application.EnableEvents = False
            Me.Cells(i, xTimeColumn) = Now()
            Me.Cells(i, xUpdateColumn) = Target.Value
            Application.EnableEvents = True
        End If
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...