VBA 学习笔记 错误处理、异常处理

On Error 语句

启用错误处理例程并指定该例程在程序中的位置;还可用于禁用错误处理例程。
如果您未使用 On Error 语句,则出现任何运行时错误都是致命的;也就是说,将显示错误消息并停止执行。

语法

On Error GoTo line
On Error Resume Next
On Error GoTo 0
On Error 语句语法可具有以下任意形式:

语句说明
On Error GoTo line1. 如果发生运行时错误,控制分支将跳转到 line 参数所指定的行,开始进行错误处理。
2. line 参数是任何 行标签行号
3. 指定的 line 必须与 On Error 语句在同一个过程中;否则将出现 编译时错误。
On Error Resume Next在出现运行时错误时,将转到下一条语句,继续执行。 在访问对象时,使用此形式而不是 On Error GoTo
On Error GoTo 0禁用当前过程中的任何已启用的错误处理程序。
————————————

示例

出错后打印日志,然后继续

这里用的是 cmdecho 输出的日志,换行不会处理,先替换成" vbCrLf "字符串了。

Sub 遍历文件夹处理文档()
    On Error GoTo ErrorHandler ' 出错时跳转 ErrorHandler:
    
    Dim CurrPath$, CurrFile$
    CurrPath = ThisDocument.Path & "\"  ' 当前文件的路径
    CurrFile = Dir(CurrPath)			' 获取第一个文件
    
    Do Until CurrFile = ""				' 只要不为空就继续
		处理文档(CurrPath & CurrFile)
NextFile:
        CurrFile = Dir()				' 获取下一个文件
    Loop
    Exit Sub
    
ErrorHandler: ' 开始错误处理
    log "================================================================================"
    log "【错误文件】" & CurrPath & CurrFile
    log Err.Number & ":" & Err.Description
    GoTo NextFile  ' 错误处理完成,跳回去继续
End Sub

'写日志
Sub log(logMsg As String)
    Dim logFile As String
    logFile = ThisDocument.Path & "\" & Replace(ThisDocument.Name, ".docm", ".log")    ' 日志文件路径
    Shell "cmd.exe /c echo " & Format(Now, "YYYY-MM-DD HH:MM:SS") & " ===》 " & Replace(logMsg, vbLf, " vbCrLf ") & " >> " & logFile
End Sub

出错一直重试

一下代码实现用户输入判断,出错可以一直重试。

Sub demo()
	Dim birthday As Date
	On Error Resume Next ' 出错时忽略,继续向下运行。
	Do
		birthday  = InputBox ("输入您的生日(yyyy-MM-dd)")  ' 假设此处用户没有输入日期。
		If Err. Number <> 0 Then 
			MsgBox "您的输入有误!请按照提示的日期格式输入。" ' 如有需要,可以在此提醒用户。
			GoTo ErrorHandler ' 跳转到标签位置
		End IF
		
		' 业务逻辑代码
		ErrorHandler: ' 定义标签 errorTag, 名字自己起的。
		Err. Clear
	Loop
End Sub

参考资料

微软Docs 》Office 》VBA 参考 》语言参考 》参考》 语句 》On Error 语句
微软Docs 》Office 》VBA 参考 》语言参考 》参考》 语句 》Resume语句
微软Docs 》Office 》VBA 参考 》语言参考 》参考》 对象 》Err 对象
微软Docs 》Office 》VBA 参考 》语言参考 》用户界面帮助 》错误消息 》可捕获的错误
微软Docs 》Office 》VBA 参考 》语言参考 》术语表 》VBA (Visual Basic for Applications )术语表
微软Docs 》Office 》VBA 参考 》语言参考 》术语表 》VBE(Visual Basic 编辑器)术语表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值