You are learning Error Handling in MS Excel
How to use the CELL function (VBA) to retrieve error information about a specific cell?
The CELL function in VBA isn't specifically designed to retrieve error information about a cell. However, you can combine it with other functions and properties to achieve this. Here are two approaches:
1. Using IsError and Text:
```vba
Function GetCellError(cellRef As Range) As String
' Check if cell contains an error
If IsError(cellRef.Value) Then
' Return the specific error type as text
GetCellError = cellRef.Value ' Will return the error value (#VALUE!, #NAME!, etc.)
Else
GetCellError = "" ' No error present
End If
End Function
```
Explanation:
- This function takes a `cellRef` argument specifying the cell you want to check.
- It uses `IsError(cellRef.Value)` to see if the cell's value is an error.
- If there's an error, the function directly returns the error value itself (e.g., "#VALUE!").
- If no error exists, an empty string ("") is returned.
2. Using .FormulaLocal property and InStr:
```vba
Function GetCellError(cellRef As Range) As String
Dim formula As String
' Check if the cell has a formula
If Len(cellRef.FormulaLocal) > 0 Then
formula = cellRef.FormulaLocal ' Get the formula
' Look for any error indicator string within the formula
If InStr(formula, "#VALUE!") > 0 Then
GetCellError = "#VALUE!"
ElseIf InStr(formula, "#NAME!") > 0 Then
GetCellError = "#NAME!"
End If
' You can add checks for other error indicators here
Else
GetCellError = "" ' No formula, no error assumed
End If
End Function
```
Explanation:
- This function also takes a `cellRef` argument.
- It checks if the cell has a formula using `Len(cellRef.FormulaLocal) > 0`.
- If there's a formula, it retrieves it with `cellRef.FormulaLocal`.
- The function then uses `InStr` to search for specific error indicator strings (#VALUE!, #NAME!) within the formula.
- If a match is found, the corresponding error type is returned.
- You can add checks for other error indicators within the `ElseIf` block.
- If there's no formula, the function assumes no error and returns an empty string.
Important Notes:
- These functions provide basic error information. For more detailed analysis, consider using error handling within your VBA code.
- The second approach might not be suitable for complex formulas with nested functions, as it only searches for specific error strings.
- Remember to adjust the error checks in both functions based on the specific errors you're interested in.