首页 > 解决方案 > 在 VBA 中用今天的日期替换错误 #N/A

问题描述

我正在寻找#N/A使用以下代码替换(由于查找搜索导致)今天的日期,但它不起作用。您能否告知此逻辑是否有效或需要应用其他一些技术。

Const StartRow As Byte=2
LastRow = Range("J" & Rows.count).End(xlUp).Row

For i = StartRow To LastRow

    myValue = Range("B" & i).Value

    If myValue =Specialcells(xlCellTypeFormulas,xlErrors) 
          Then Range("B" & i).Value = "=Today()"

  Next i

标签: excelvba

解决方案


您可以使用Application 类的方法检查特定#N/A错误。WorksheetFunction

For i = StartRow To LastRow
    
    If Application.WorksheetFunction.IsNA(Range("B" & i)) Then
        Range("B" & i).Formula = "=Today()"
    End If
    
Next

正如我常说的,在每种情况下,您都应该完全限定您的 Range 对象。即使您希望使用Active...它是什么:

Dim Rng As Range
Set Rng = ThisWorkbook.ActiveSheet.Range(...)
' Or
Set Rng = ActiveWorkbook.Worksheets(1).Range(...)

当你使用For i =循环时,我总是更喜欢使用Cells()属性而不是使用Range(),因为我不喜欢在每次循环迭代中使用 VBA 将字符串连接在一起:

For i = StartRow To LastRow

    If Application.WorksheetFunction.IsNA(Cells(i, 2)) Then
        Cells(i, 2).Formula = "=Today()"
    End If

Next

但我认为这最终归结为偏好。


推荐阅读