excel vba-在循环中写入公式返回的错误(类型不匹配)

excel vba-在循环中写入公式返回的错误(类型不匹配),excel,error-handling,vba,Excel,Error Handling,Vba,在“我的工作表”的H列是一个vlookup公式,H列中的某些行返回一个“#n/a”错误。我似乎无法让VBA检查H列中的错误并用字符串替换它。以下是我到目前为止的情况: For Each F In activeworkbook.Worksheets(1).Range("H11:H90" ) If F = "#N/A" Then F.Offset(0, 1) = "failed" Else F.Offset(0, 1) = "found" End If Next 如何修复此问题?替换 If F =

在“我的工作表”的H列是一个vlookup公式,H列中的某些行返回一个“#n/a”错误。我似乎无法让VBA检查H列中的错误并用字符串替换它。以下是我到目前为止的情况:

For Each F In activeworkbook.Worksheets(1).Range("H11:H90" )
If F = "#N/A" Then
F.Offset(0, 1) = "failed"
Else
F.Offset(0, 1) = "found"
End If
Next
如何修复此问题?

替换

If F = "#N/A" Then


我猜你是想找到有错误的单元格?我希望你知道你不需要VBA来做这个?您可以在
列I
中使用
=ISNA()
公式来获得您想要的?

假设您正在测试任何错误条件,而不仅仅是特定的
\N/A
错误,您可以使用
iError
功能:

For Each F In activeworkbook.Worksheets(1).Range("H11:H90" )
    If IsError(F.Value) Then
        F.Offset(0, 1) = "failed"
    Else
        F.Offset(0, 1) = "found"
    End If
Next
如果您正在查找特定的
#N/A
错误,则最好还是先使用
iError
,然后测试特定错误:

For Each F In activeworkbook.Worksheets(1).Range("H11:H90" )
    If IsError(F.Value) Then
        If F.Value = CVErr(xlErrNA) Then
            F.Offset(0, 1) = "failed"
        Else
            F.Offset(0, 1) = "failed for some unknown reason"
        End If
    Else
        F.Offset(0, 1) = "found"
    End If
Next

出于某种原因,它将所有Fs视为错误(即使该值不是vlookup错误)。如果有空白单元格,则将其视为非错误。我尝试将范围粘贴为值,它返回“类型不匹配”,我确信您做错了什么。我可以看一下示例工作簿吗?如果是,请将其发布在免费文件共享网站上,并在此处共享链接:)我创建了一个假的数据集,并尝试了您的代码,它成功了。。。所以我的原始数据集一定有问题。。。不幸的是,我不能发布它。我需要弄清楚那是什么。。感谢您为我指出了正确的方向,如果F.Value=CVErr(xlErrNA)或者更改了您的查找公式:
=IFERROR(,“不匹配!”)
@TimWilliams
CVErr(F.Value)=CVErr(xlErrNA)
F.Value=CVErr(xlErrNA)
两者都是正确的:)你能想到任何情况下,这个公式几乎把所有东西都视为错误(空白除外),即使它们不是错误?例如,vlookup公式引用了不同格式的表数组workbook@machump-不,我想不出任何情况,如果单元格中的值有效,VBA会认为它无效。尝试在Excel中的某个单元格中输入类似于
=H11*1
的公式来测试数据,并确保返回有效数字(如果数据不是数字,则使用
=H11&“X”
For Each F In activeworkbook.Worksheets(1).Range("H11:H90" )
    If IsError(F.Value) Then
        If F.Value = CVErr(xlErrNA) Then
            F.Offset(0, 1) = "failed"
        Else
            F.Offset(0, 1) = "failed for some unknown reason"
        End If
    Else
        F.Offset(0, 1) = "found"
    End If
Next