, чтобы также проверить пустую строку, я предлагаю следовать
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${empty fn:trim(var1)}">
</c:if>
Он также обрабатывает нули
При ошибке Перейти к
ErrorHandlerLabel Возобновить
( Далее
| ErrorHandlerLabel ) При ошибке Перейти к 0
(отключает текущий обработчик ошибок) Объект Err
Свойства объекта Err
обычно сбрасываются до нуля или строки нулевой длины в подпрограмме обработки ошибок, но это также можно сделать явно с помощью Err.Clear
.
Ошибки в ошибке процедура обработки прекращается.
Диапазон 513-65535 доступен для ошибок пользователя.
Для ошибок настраиваемого класса вы добавляете vbObjectError
к номеру ошибки.
См. Документацию MS о Err.Raise
и список номеров ошибок .
Для нереализованных элементов интерфейса в производном классе следует использовать константу E_NOTIMPL = & H80004001
.
Option Explicit
Sub HandleError()
Dim a As Integer
On Error GoTo errMyErrorHandler
a = 7 / 0
On Error GoTo 0
Debug.Print "This line won't be executed."
DoCleanUp:
a = 0
Exit Sub
errMyErrorHandler:
MsgBox Err.Description, _
vbExclamation + vbOKCancel, _
"Error: " & CStr(Err.Number)
Resume DoCleanUp
End Sub
Sub RaiseAndHandleError()
On Error GoTo errMyErrorHandler
' The range 513-65535 is available for user errors.
' For class errors, you add vbObjectError to the error number.
Err.Raise vbObjectError + 513, "Module1::Test()", "My custom error."
On Error GoTo 0
Debug.Print "This line will be executed."
Exit Sub
errMyErrorHandler:
MsgBox Err.Description, _
vbExclamation + vbOKCancel, _
"Error: " & CStr(Err.Number)
Err.Clear
Resume Next
End Sub
Sub FailInErrorHandler()
Dim a As Integer
On Error GoTo errMyErrorHandler
a = 7 / 0
On Error GoTo 0
Debug.Print "This line won't be executed."
DoCleanUp:
a = 0
Exit Sub
errMyErrorHandler:
a = 7 / 0 ' <== Terminating error!
MsgBox Err.Description, _
vbExclamation + vbOKCancel, _
"Error: " & CStr(Err.Number)
Resume DoCleanUp
End Sub
Sub DontDoThis()
' Any error will go unnoticed!
On Error Resume Next
' Some complex code that fails here.
End Sub
Sub DoThisIfYouMust()
On Error Resume Next
' Some code that can fail but you don't care.
On Error GoTo 0
' More code here
End Sub
Я бы также добавил:
Err
наиболее близок к объекту исключения Err.Raise
И просто для удовольствия:
On Error Resume Next
- это воплощение дьявола, которого следует избегать, так как он скрывает ошибки Итак, вы можете сделать что-то вроде этого
Function Errorthingy(pParam)
On Error GoTo HandleErr
' your code here
ExitHere:
' your finally code
Exit Function
HandleErr:
Select Case Err.Number
' different error handling here'
Case Else
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "ErrorThingy"
End Select
Resume ExitHere
End Function
Если вы хотите запекать собственные исключения. (например, те, которые нарушают бизнес-правила), используйте приведенный выше пример, но используйте команду goto для изменения потока метода по мере необходимости.
Профессиональная разработка в Excel имеет довольно хорошую схему обработки ошибок . Если вы собираетесь провести какое-то время в VBA, вероятно, стоит приобрести книгу. Есть ряд областей, в которых отсутствует VBA, и в этой книге есть хорошие предложения по управлению этими областями.
PED описывает два метода обработки ошибок. Основная из них - это система, в которой все процедуры точки входа являются подпроцедурами, а все остальные процедуры - функциями, возвращающими логические значения.
Процедура точки входа использует операторы On Error для фиксации ошибок в значительной степени, как и было задумано. Процедуры без точки входа возвращают True, если ошибок не было, и False, если ошибки были. Процедуры без точки входа также используют On Error.