我在修改列时使用宏来编写日期戳。我们的想法是,无论何时状态发生变化,它都会为该特定状态提供运行时间。我有四列:
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
时,宏不会自动给我日期,但是当我手动插入它时它会正常工作。
答案 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 。这样您就不必处理完全没有公式。