I am getting a type mismatch error on the line of code below. It is inside a loop, and the error doesn’t occur until the first iteration where
.Cells(rowStart + i, ISO_revs_col).Value is a string. It makes sense that this would cause an error, but I would expect the
.IfError function to just return the “0” string. If anyone can tell me why I am getting an error instead of “0” I would appreciate it.
Debug.Print Application.WorksheetFunction.IfError(CLng(.Cells(rowStart + i, _ ISO_revs_col).Value), "0")
Thanks in advance.
IFERROR is a worksheet function, and will detect worksheet errors. The following error types are evaluated: #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, or #NULL!.
Type mismatch (runtime error 13) is a VBA error, not a worksheet error.
To handle VBA errors, you need to use the VBA error handling routines. So something like:
EDIT: to trigger on other errors:
On Error Resume Next 'your looping routine start x = CLng(.Cells(rowStart + i, ISO_revs_col).Value) select case err.number case 13 x=0 err.clear case <> 0 msgbox "Error " & err.number & vbTab & err.description end select debug.print x 'your looping routine end on error goto 0
The above won’t tell you where the error occurred, so you might want to just wrap the single line as:
on error resume next x = CLng(.Cells(rowStart + i, ISO_revs_col).Value) if err.number = 13 then x = 0 on error goto 0