我嘗試檢索單元格中顯示的值:
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)為字串?
uj5u.com熱心網友回復:
如果我是對的,recherchev是荷蘭版的VLookup. 這將#N/A在未找到任何內容時回傳,但請注意,這不是string "#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
uj5u.com熱心網友回復:
請嘗試更換:
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 string。這是你的情況嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328272.html
