我刚刚开始使用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:找不到单元格'”。我无法解决这个问题/如何摆脱它。
非常感谢!!
答案 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