首页 > 解决方案 > 使用宏 + IF 公式 + 静态日期?

问题描述

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

我目前有 E 列,人们将在其中手动输入“Y”来标记某些帐户。标记这些帐户后,我有一个宏按钮可以将所有这些 Y 更改为“标记”,以便我知道它们已被处理。

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

我所有的 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:未找到单元格”。我无法弄清楚/如何摆脱它。

非常感谢!!

标签: vbaexcelexcel-formula

解决方案


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

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

推荐阅读