宏未自动运行

时间:2015-04-24 10:19:47

标签: excel vba

我在修改列时使用宏来编写日期戳。我们的想法是,无论何时状态发生变化,它都会为该特定状态提供运行时间。我有四列:

A                   b            c     d
clearing           24.04.2015    1    empty
**when stauts is changed**
A                   b            c      d
wait for start     24.04.2015    2     24.04.2015

c的形式是:

IF(RC[-2]="";"";IF(RC[-2]="clearing";1;2))
Macro;

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 And Target.Value = "clearing"
  Then
    Cells(Target.Row, 2) = Date
  Else
     If Target.Column = 3 And Target.Value = 2 
     Then
        Cells(Target.Row, 4) = Date
     End If
  End If
End Sub

问题是当C列在公式的帮助下更改为2时,宏不会自动给我日期,但是当我手动插入它时它会正常工作。

1 个答案:

答案 0 :(得分:2)

当您将值放入触发Worksheet_Change事件宏的工作表时,您应该始终关闭事件,否则宏将尝试在其自身上运行。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(1)) Is Nothing Then
        On Error GoTo Fìn
        Application.EnableEvents = False
        Dim rng As Range
        For Each rng In Intersect(Target, Columns(1))
            If LCase(rng.Value) = "clearing" Then
                Cells(rng.Row, 2) = Now
                Cells(rng.Row, 2).NumberFormat = "dd.mm.yyyy"
                'Cells(rng.Row, 3).FormulaR1C1 = "maybe put the formula in here"
            ElseIf rng.Offset(0, 2).Value = 2 Then
                Cells(rng.Row, 4) = Now
                Cells(rng.Row, 4).NumberFormat = "dd.mm.yyyy"
            End If
        Next rng
    End If
Fìn:
    Application.EnableEvents = True
End Sub

听起来你已经在C栏中已经有了这个公式,但是我留下了一个地方,你可以把它放在一列A获得清除值。另一种选择是简单地将 1 写入C列,然后在C列中写下 2 。这样您就不必处理完全没有公式。