Private Sub Worksheet_Change (ByVal Target As Range) при одновременном изменении нескольких ячеек - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть этот простой VBA для записи, когда задача была запущена и когда она была завершена.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim cell As Range

If Target.Column = 3 Then
    For Each cell In Target.Cells

        If Target.Cells = "IN PROGRESS" And Target.Cells.Offset(0, -2).Value = "" Then
            Target.Offset(0, -2) = Format(Now(), "DD-MM-YYYY")

        ElseIf Target.Cells = "DONE" And Target.Offset(0, -1).Value = "" Then
            Target.Offset(0, -1) = Format(Now(), "DD-MM-YYYY")

        End If
    Next cell
End If

End Sub

Лист выглядит так:

enter image description here

Он отлично работает при смене ячеек по одной.

Однако, если я пытаюсь вставить «DONE» в несколько ячеек, я получаю «Несоответствие ошибок типа 13», и VBA не выполняется.

enter image description here

Кто-нибудь знает простой способ решить эту проблему?

1 Ответ

0 голосов
/ 01 февраля 2019

Вы используете для каждого цикла, где вы проходите все ячейки в Target.cells.Однако вы используете target.cells внутри цикла для проверки.

Если вы измените свои ссылки в цикле с target.cells на cell, это должно исправить ваш код.

Еще одно замечание, вам может быть полезно, если вы используете cell.value.Таким образом, вы проверяете только значение в ячейке.

For Each cell In Target.Cells

    If cell.value = "IN PROGRESS" And cell.Offset(0, -2).Value = "" Then
        cell.Offset(0, -2).value = Format(Now(), "DD-MM-YYYY")

    ElseIf cell.value = "DONE" And cell.Offset(0, -1).Value = "" Then
        cell.Offset(0, -1).Value = Format(Now(), "DD-MM-YYYY")

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