VBA에서 셀에 오류 값이 들어 있는지 여부를 확인하려고합니다. 잘못된 기능으로 인해 기존 코드는 Excel.WorksheetFunction.IsError 메서드를 사용하지만 최근에 거짓 긍정을 유발 한 사례를 발견했습니다. 셀에 오류 값이 없지만 Excel.WorksheetFunction.IsError는 true를 반환합니다. 다른 방법 인 VBA.Information.IsError는이 동작을 나타내지 않습니다. 올바르게 false를 반환합니다.Excel VBA WorksheetFunction.IsError false positive
셀에 255자를 초과하는 값이있는 경우에만 문제가 발생한다고 판단 할 수있었습니다. 여기에 동작 확인하는 루틴 : 위의 루틴은 엑셀 2010 년에 작성 및 Excel 2007 대상 응용 프로그램에서 검증 된
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
현재 질문 1 엑셀 2007에서
실행 :인가 이 버그 또는이 경우 Excel.WorksheetFunction.IsError의 동작에 대한 합리적인 설명이 있습니까?
VBA.Information.IsError 메서드로 전환 할 예정입니다.하지만 이제는 버그가 발생할 수 있으므로 걱정이됩니다. 어느 날 나를 이끌어 ...
질문 2 : 특정 셀에서 오류를 확인하는 더 확실한 방법이 있습니까?
ISERROR 작업을 할 때이 버그가
로,뿐만 아니라 같은 다른 Excel 함수에 존재하지만주의를 권합니다 여부를 몰라? – Ioannis
죄송합니다. 모범생 오류입니다. 위에 버전 정보를 추가했습니다. –
아래 답변은 @loannis입니다. 'WSF.IsError'를 사용할 때, 범위가 아닌 오류에 대해'.Value'를 검사해야합니다. 또한'VBA.Info.IsError'는'WSF.IsError' 라우트를 실행하는 것보다 훨씬 신뢰성이 높습니다. 왜냐하면 전자는 'Range'를 오류를 올바르게 확인할 수 있기 때문입니다. 예제는 [this] (http://picpaste.com/pics/Capture-vRy1sAD3.1394060144.GIF)를 참조하십시오. – Manhattan