主页 > 焦点科技 >俘虏的意思_在vba中on error怎么对一个过程的错误进行多次判断 >

俘虏的意思_在vba中on error怎么对一个过程的错误进行多次判断

在vba中on error怎么对一个过程的错误进行多次判断

按照你的想法,可能面的逻onerrorgotolab1:
'前段代

lab1:
onerrorgotolab2:
'中断代码

lab2:
'后段代码

因为on error语句不是编辑选项,而是语句,只在此语句执行后产生效果,可以多次执行。

追问

谢谢,我也像你这样做过,问题就是如果第一段检测出问题了,那么第二段就检测不出来了。追答

优秀的逻辑是避免GOTO,例如这样的:ONERRORRESUMENEXT'关闭一切报错

'进行操作1
IF成功THEN
'...
ELSE
'...
ENDIF

'进行操作2
IF成功THEN
'...
ELSE
'...
ENDIF

关键的技巧在于如何检测遇到错误,每一步都有详细的错误检测。

追问

谢谢你这么耐心的回答哈,我呢因为是在共享里面操作的,我就是想避开别人修改共享中的地址而导致的错误呢追答

可以的,关键在于想办法检测各种情况进行判断。

Subabc()
OnErrorGoToa
代1
a:
OnErrorGoTo-1
OnErrorGoTob
错误2
b:
OnErrorGoTo-1
OnErrorGoToc
错误代码3
c:
EndSub追问

谢谢!,你的onerrorgoto -1是什么意思呢?我的问题可能就是这个的问题追答

还需要回答吗?
通过VBA用WORD打开PDF时,WORD遇到了错误,如何捕获和跳过该错误,让代码继续运行?


比Shell "WINWORD.EXE C:\12345.doc", vbNormalFocus
在excel中,选中两个单元格,就打开c:\下的12345.doc
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 2 And Target.Rows.Count = 1 And Target.Columns.Count = 2 Then
Shell "WINWORD.EXE C:\12345.doc", vbNormalFocus
End If
End Sub

用onerrorresumenext错误,然后把err.Description写志文件。vb的通用方demo代码如下:Subaa()OnErrorResumeNextFori=1To3a=5/0IfErr.Number>0ThenDebug.PrintErr.DescriptionNextEndSub

追问

有错误捕获,但是好象捕获不了“WORD转换PDF过程出错的错误”,于是总是在
Set myWord = Me.Application.Documents.Open(sPDFName, , , , , , , , , , , False)

这一句出错。追答

这个就不懂了。我能力有限。本回答被网友采纳
vba错误处理过程中还能捕获错误吗


VBA中错误捕捉的方法主要有两种
第一种捕捉方法:
1法:
On Error GoTo Err_Handle'如果遇误就跳转到处理代码
语句xxxxx
Exit Sub/Function(如有这条语句,即使没有错误也会执行错误处理语句)
Err_Handle: 语句 xxxxxx
2、举例:
Sub 查找数字()’本段代码查找电子表格中有没有数字12
On Error GoTo Err_Handle
MsgBox Cells.Find(12).Address
Exit Sub'如果没有这个退出过程语句,会一直执行下去
Err_Handle:
MsgBox ("不存在该数字")
End Sub
(1)、电子表中数据和代码

(2)、查找12的结果:

(3)、查找13的结果:

第二种捕捉方法:
1、语法:

On Error Resume Next'如果遇到错误,不管错误,继续往下执行,但如果嵌套了其他错误处理语句,这些错误处理语句还是会按照自己规则运行
语句xxxx

On Error GoTo 0 ’结束错误捕捉
2、举例代码:

Sub 查找数字()
Dim i As Integer
On Error Resume Next'遇到错误向下执行
MsgBox Cells.Find(13).Address
On Error GoTo Err_Handle
i = 10 / 0’会跳转到错误处理语句,而不会运行 Exit sub
Exit Sub
Err_Handle:
MsgBox i

On Error Resume Next
End Sub
3、结果说明和图例:
excel表中没有13这个数字,但是不会报错也不会有弹窗
在On Error Resume Next 和 Err_Handle之间代码,还是可以发挥错误捕获功能,因此可以出现下面弹窗:
VBA 中运行错误返回一个值的代码

答:比A1:A10单元以0,后填""。SubDemo()
OnErrorResumeNext
Fori=1To10
Cells(i,1)=1/0
IfErr.Number<>0Then
Cells(i,1)=""
EndIf
Next
EndSub追问

您好,我的问题是:是否可以直接在On Error Resume Next后续代码增加错误运行的单元格返回一个值的这么一个功能,而不需要重新进行判断。
或是在单元格计算的时候(cell/CELL*100)的时候就加上一段代码,让无法计算的直接返回“/”?追答

“直接在On Error Resume Next后续代码增加错误运行的单元格返回一个值”你问这句,只能是判断错误是否发生,然后再写入"\".
提供2种办法:
1、可以在计算后判断是否出错,就更改如下:
Sub 引用4()
Dim Counter As Long
Counter = Worksheets("Sheet4").[a1048576].End(xlUp).Row
Dim myr As Long
On Error Resume Next
For myr = 3 To Counter
Worksheets("HW").Cells(myr, 1).Value = Worksheets("Sheet8").Cells(myr, 1).Value
For myk = 4 To Counter
Worksheets("HW").Cells(myk, 3).Value = Worksheets("HW13小区").Cells(myk, 16) / Worksheets("HW").Cells(myk, 17) * 100
If Err.Number0 Then
Worksheets("HW").Cells(myk, 3).Value = "/"
End If
Next
Next
End Sub
2、如果先判断除数是否为0,不为0则计算。为0的直接跳过加上"/"
Sub 引用4()
Dim Counter As Long
Counter = Worksheets("Sheet4").[a1048576].End(xlUp).Row
Dim myr As Long
For myr = 3 To Counter
Worksheets("HW").Cells(myr, 1).Value = Worksheets("Sheet8").Cells(myr, 1).Value
For myk = 4 To Counter
If Worksheets("HW").Cells(myk, 17) * 1000 Then
Worksheets("HW").Cells(myk, 3).Value = Worksheets("HW13小区").Cells(myk, 16) / Worksheets("HW").Cells(myk, 17) * 100
Else
Worksheets("HW").Cells(myk, 3).Value = "/"
On Error Resume Next
Next
End Sub


上一篇: 下一篇: