为什么当我尝试:

MsgBox (Cells(1, 1).Value)


情况如下:


当我在单元格A1中写入#123时,我从MsgBox中获得#123。
当我在单元格A1中写入#N / A时,出现错误类型不匹配吗?


我知道#N/A是Excel中的默认错误单元格值,但是我已经手动输入了该值,VBA是否不将我的#N/A手动输入作为字符串?

最佳答案

Charles Williams' post很好地解释了.Value.Text用法之间的区别。

为了回答您评论中的问题,有许多种替换单元的方法。一种方法是使用If...Then语句,例如:

If Cell().Text = "#N/A" Then
    ' Your code
End If


您可以将以上内容应用于For Each...Next语句:

Dim Cel as Range
For Each Cel In Worksheets(1).Cells
    If Cel.Text = "#N/A" Then
        Cel.Value = 0
    End If
Next Cel


另外,如果您想查找所有错误(例如,不仅仅是#N/A),可以使用IsError()

Dim Cel As Range
For Each Cel In Worksheets(1).Cells
    If IsError(Cel) Then
        Cel.Value = 0
    End If
Next Cel


我可能会补充说,检查整个工作表非常耗时。一旦检查完所需的单元格,最好添加一些退出For语句的方法,例如利用UsedRange

10-07 13:19