使用宏+ IF公式+静态日期?

时间:2018-05-16 08:51:46

标签: excel vba excel-vba excel-formula

我刚刚开始使用Excel,所以有点新手 - 请原谅我的无知/缺乏适当的术语!

我目前有E栏,人们会手动输入“Y'标记某些帐户。一旦这些帐户被标记,我就会有一个宏按钮,将所有这些Y更改为“已标记”,以便我知道他们已被处理过。

我希望在F标记的日期添加F列,所以我有一个IF公式来说明如果' Raised'在colE中,在colF中添加今天的日期。我遇到了两件事的问题,首先我需要它忽略任何已经在colF中的日期(因为我不希望旧的日期被覆盖),而且我不知道如何#c;冻结'日期。目前,每当我打开工作表时,它都会将所有旧日期更改为今天的日期,但我需要保留输入时的日期。

我所有的excel都是通过阅读论坛自学的(如果这很糟糕,请原谅我!),但此刻我已经想到了这个:

Sub ResetFlags()
'
' ResetFlags Macro
'

'
Sheets("Matrix").Select
Columns("E:E").Select
Range("E2").Activate
Selection.Replace What:="y", Replacement:="Flagged", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Range("E12").Select

Dim r As Range
Set r = Range("F:F").Cells.SpecialCells(xlCellTypeBlanks)
On Error Resume Next
r.Formula = "=IF((RC[-1]=""Flagged""),(TODAY()),"""")"
On Error Resume Next

End Sub

宏看起来效果很好,因为它用“已标记”取代了Y,它会跳过旧日期并添加今天的日期..但每次打开工作簿时它将所有日期更改为今天。如何冻结日期?!

另外,当我运行宏时,虽然它在最后都运行,但我得到一个错误框,说“运行时错误1004:找不到单元格'”。我无法解决这个问题/如何摆脱它。

非常感谢!!

1 个答案:

答案 0 :(得分:1)

认为应该这样做。您可以使用值替换公式,以便不会不断更新。

On Error应该在SpecialCells之前 - 如果没有空白,则没有可以应用公式的范围,因此错误。

此外,无需选择任何内容。

我没有对此进行过测试,如果第一次不能正常工作就不会有任何意外。

Sub ResetFlags()

With Sheets("Matrix").Columns("E:E")
    .Replace What:="y", Replacement:="Flagged", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

    Dim r As Range

    On Error Resume Next
    Set r = .Range("F:F").Cells.SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
End With

If Not r Is Nothing Then
    r.Formula = "=IF((RC[-1]=""Flagged""),(TODAY()),"""")"
    r.Value = r.Value
End If

End Sub