恢复公式的显示结果



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

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...),所以它不起作用,错误信息为&;type compatibility&;

任何想法存储在WB1.Sheets("Avant").Cells(i, 7)作为字符串显示的结果?

请尝试替换:

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字符串。这是你的箱子吗?

如果我是正确的,recherchevVLookup的荷兰语版本。当没有找到任何东西时,返回#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

最新更新