恢复公式的显示结果

Recover the displayed result of a formula

我尝试检索单元格中显示的值:

Private Sub Check_Commentaires()

    'Declarations des variables
    Dim WB1 As Workbook
    Dim i, val2
    Dim val1 As Variant
    Set WB1 = ActiveWorkbook
    
    For i = 2 To 10000
        val1 = WB1.Sheets("Avant").Cells(i, 7).Value
        val2 = WB1.Sheets("Avant").Cells(i, 14).Value
        If (val1 = "#N/A" And val2 = "") Or (val1 = "0" And val2 = "") Then
            ThisWorkbook.Sheets("Feuil1").Cells(4, 6).Value = "NOK"
            WB1.Close False
            Exit Sub
        Else
            ThisWorkbook.Sheets("Feuil1").Cells(4, 6).Value = "OK"
        End If
    Next
        WB1.Close False
End Sub

但是在这个单元格 (i,7) 我有 =recherchev(something...) 所以它不能使用错误消息“类型兼容性”。

是否可以将 WB1.Sheets("Avant").Cells(i, 7) 中显示的结果存储为字符串?

如果我没记错的话,recherchevVLookup 的荷兰语版本。这个 returns #N/A 什么都没找到,但是要注意这是 不是 字符串 "#N/A",它是一个 错误 是 VBA.

中自己的数据类型

您不能将错误与字符串进行比较,否则会导致类型不匹配。

正如 BigBen 在评论中所写,您可以使用 WorksheetFunction.IsNA(val1) 来检查它是否包含错误。但是,如果您将 If 语句更改为:

If (WorksheetFunction.IsNA(val1) And val2 = "") Or (val1 = "0" And val2 = "") Then

如果 val1 由于第二个条件而保持 #N/A,您仍然会得到相同的运行时错误 - val1 = "0" 仍然会抛出该错误。 VBA 将评估 If 语句的所有部分,即使第一部分为真(因此整个 If 条件为 TRUE Or anything 将始终为真)。

最简单的解决方案:

val1 = WB1.Sheets("Avant").Cells(i, 7).Value
If WorksheetFunction.IsNA(val1) then val1 = 0
val2 = WB1.Sheets("Avant").Cells(i, 14).Value
If val1 = 0 And val2 = "" Then
   (...)
Else
   (...)
End If

请尝试更换:

       If (val1 = "#N/A" And val2 = "") Or (val1 = "0" And val2 = "") Then
            ThisWorkbook.Sheets("Feuil1").Cells(4, 6).Value = "NOK"
            WB1.Close False
            Exit Sub
        Else
            ThisWorkbook.Sheets("Feuil1").Cells(4, 6).Value = "OK"
        End If

  If IsError(val1) Then ' error
        If val1 = CVErr(2042) And val2 = "" Then 'N#A error and empty string in val2
           ThisWorkbook.Sheets("Feuil1").cells(4, 6).Value = "NOK"
           wb1.Close False
           Exit Sub
        End If
  ElseIf val1 = "0" And val2 = "" Then                                'no error
        ThisWorkbook.Sheets("Feuil1").cells(4, 6).Value = "NOK"
        wb1.Close False
        Exit Sub
  Else
      ThisWorkbook.Sheets("Feuil1").cells(4, 6).Value = "OK"
  End If

val2 = "0"应该表示是一个0字符串。这是你的情况吗?