gpt4 book ai didi

vba - 高级和低级过程之间的错误处理

转载 作者:行者123 更新时间:2023-12-03 08:44:12 26 4
gpt4 key购买 nike

我遇到了一个较低级别的 UDF 将错误踢到最高级别子例程的错误处理的问题。我想我可以用 On Error GoTo -1 来解决这个问题,但问题仍然存在。

根据微软的说法,“如果没有 On Error GoTo -1 语句,则在退出过程时会自动禁用异常”( https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/on-error-statement )。这是否意味着当我调用较低级别的子例程时,我正在“退出”一个过程并取消 On Error GoTo -1陈述?

例如,这是一个子程序,它获取一个 excel 文档并将其与 jpg 图像组合成一个 pdf。 jpg 图像需要按文件名结尾的数字排序(即 Photomics0)。有时,文件名的末尾没有数字。我希望这会导致应该发生的正常错误。

最高级别的子程序具有以下错误处理:

Sub Example()

Do While t = 1

On Error GoTo errorMSG1
Set wb2 = Workbooks(Copyrange)
On Error GoTo -1
'
' more code here & call to other subroutines
'
Exit Sub

Loop

errorMSG1:
On Error GoTo -1
'
' Code that notifies user that they don't have the excel document open in
' background and opens it for them
'
End Sub

最低级别的 UDF(向下 3 级)遇到代码错误:
retvalint = CLng(retval)

由于 retval应该是 jpg 文件名末尾的数字。没有号码 retval为空并引发错误,导致代码跳转到 errorMSG1 ,我不希望它这样做。

我还应该说,当我试图捕获的原始错误没有发生时,总是会发生这种情况。我还没有测试过当原始错误确实发生时是否会发生这种情况。

我试过扔 On Error GoTo -1在我的子程序和函数的各个级别中绝对无处不在,但无济于事。

另外,顺便说一句,这是让错误“冒泡”的例子吗?

编辑:
我还应该说我之前尝试过使用 On Error GoTo 0 ,但更高级别的子有一个大的 Do Loop在里面。我注意到,当我试图捕获的原始错误发生在 >=2 迭代时,它会吐出原始的 Runtime Error错误。

最佳答案

我不理解这方面的文档,但我从测试中弄清楚了。
On Error GoTo 0停止使用当前的错误处理程序。On Error GoTo -1清除当前错误。

这是一个例子:

Sub OnErrorTest()
On Error GoTo myErrHnd
Err.Raise 42
myErrorSub
On Error GoTo 0
Err.Raise 44
Exit Sub

myErrHnd:
Debug.Print ("Error: " & Err.Number)
Debug.Print ("Description: " & Err.Description & vbNewLine)
Resume Next
End Sub

Sub myErrorSub()
On Error GoTo myOtherErrHnd
Workbooks("").Close
Exit Sub

myOtherErrHnd:
On Error GoTo -1 ' aka Err.Clear
End Sub

因此,要解决您遇到的问题,您似乎需要在设置工作簿后切换到 On Error GoTo 0。通常,如果在它们的任何父函数中设置了错误处理程序,错误就会冒泡。

关于vba - 高级和低级过程之间的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com