在VBA中,我試圖確定一個單元格是否包含錯誤值,例如,由於功能無效。我現有的代碼使用了Excel.WorksheetFunction.IsError方法,但我最近遇到了一個導致誤報的案例。單元格不包含錯誤值,但Excel.WorksheetFunction.IsError返回true。另一種方法VBA.Information.IsError不會顯示此行爲;它正確地返回false。Excel VBA WorksheetFunction.IsError false positive
我能夠確定問題只發生在單元格包含長度超過255個字符的值時。這裏是一個程序來驗證行爲:
Sub IsErrorBehavior()
Dim i As Long
Dim str As String
Dim r1 As Range, r2 As Range
Dim xlWSFuncCheck1 As Boolean, xlWSFuncCheck2 As Boolean
Dim vbaInfCheck1 As Boolean, vbaInfCheck2 As Boolean
str = WorksheetFunction.Rept("A", 255)
Set r1 = Range("A1")
r1.Value = str
xlWSFuncCheck1 = Excel.WorksheetFunction.IsError(r1)
vbaInfCheck1 = VBA.Information.IsError(r1)
str = str & "A"
Set r2 = Range("A2")
r2.Value = str
xlWSFuncCheck2 = Excel.WorksheetFunction.IsError(r2)
vbaInfCheck2 = VBA.Information.IsError(r2)
End Sub
根據上述程序是寫在Excel 2010和Excel 2007中的目標應用程序驗證當前Excel 2007中下
問題1運行:是這是一個錯誤,還是在這種情況下Excel.WorksheetFunction.IsError的行爲有合理的解釋?
我將切換到VBA.Information.IsError方法,但現在我有點擔心我可能會遇到它的錯誤。這導致我...
問題2:是否有更可靠的方法來檢查特定單元格中的錯誤?
您使用Excel的哪個版本的工作是什麼時候? – Ioannis
哎呀,小學生錯誤。上面添加版本信息 –
以下是由@loannis回答的問題。當使用'WSF.IsError'時,你應該檢查'.Value'是否出錯,而不是範圍。此外,'VBA.Info.IsError'比'WSF.IsError'路由更可靠,因爲前者也可以正確檢查Range。有關示例,請參見[this](http://picpaste.com/pics/Capture-vRy1sAD3.1394060144.GIF)。 – Manhattan