同时更改多个单元格时的私有子Worksheet_Change(按目标的ByVal目标)

时间:2019-02-01 11:47:42

标签: excel vba

我有这个简单的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

当一个接一个地更改单元格时,它非常完美。

但是,如果我尝试在多个单元格中粘贴“完成”,则会出现“类型13错误不匹配”并且VBA无法执行。

enter image description here

有人知道解决这个问题的简单方法吗?

1 个答案:

答案 0 :(得分:3)

对于每个循环,在Target.cells中的所有单元格中都使用a。但是,您可以在循环内使用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