我认为vba IDE不允许正确打破错误。我在这里询问了如何识别运行时错误的问题:
解决方案/解决方法似乎是使用On Error GoTo
或类似方法。我正努力做到这一点,但没有取得多大成功。
根据Microsoft Function generateTimeseries() As Variant
On Error GoTo ErrorHandler
Dim currentArray As Range
currentArray = Selection.Range ' this doesn't work - I don't care why
generateTimeseries = currentArray.Rows
Return
ErrorHandler:
Debug.Assert False
Resume ' break here if you want to catch errors
End Function
,当发生运行时错误(https://msdn.microsoft.com/en-us/library/5hsw66as.aspx)时,它会将您发送到指定的区域代码。根据我的经验,这不是整个故事。这个问题是关于如何实际使解决方案有效。
所以我有以下功能:
ErrorHandler
此功能永远不会输入Selection.Range
代码。相反,它会落在#VALUE
上,函数只返回 List commands = new ArrayList();
commands.add("C:\\Program Files\\Java\\jdk1.7.0_79\\bin\\java.exe");
commands.add("version");
ProcessBuilder pb = new ProcessBuilder(commands);
System.out.println("Running command");
Process process = pb.start();
int errCode = process.waitFor();
System.out.println("command executed, any errors? " + (errCode == 0 ? "No" : "Yes"));
System.out.println("Output:\n" + output(process.getInputStream()));
。我实际上并不关心为什么这会中断,我只是想知道如何让IDE告诉我它实际上已经落在那条线上,没有我手动跳过代码。
答案 0 :(得分:1)
我刚刚测试过你的错误处理程序,它在
上正确破解Debug.Assert False
- >检查调试器选项。
然而,这不是处理vBA中错误的正确方法,因为如果编译应用程序并忘记调整此类错误处理程序,当用户在过程中遇到错误时,应用程序将陷入无限循环。
在大多数情况下,您必须抛出一个msgbox以让用户知道发生了错误,并终止当前过程。唯一不适用的情况是,当您执行某些可能触发错误但却知道并故意绕过错误的情况时。这是一种罕见的情况。
我从未使用过Assert
方法,这就是我在每个过程中处理错误的方法
Function generateTimeseries() As Variant
On Error GoTo ErrorHandler
Dim currentArray As Range
currentArray = Selection.Range ' this doesn't work - I don't care why
generateTimeseries = currentArray.Rows
Exit_Function:
Exit Function
ErrorHandler:
MsgBox Err.Description, vbCritical, "Error " & Err.Number
Resume Exit_Function ' breakpoint here if you want examine the code after error, otherwhise it terminates the function
Resume ' Once the code breaks on the above line, move to this instruction and F8 to return to the statement in error
End Function
答案 1 :(得分:0)
我已将该功能启用为"打破所有错误"在较早的尝试中打破所有错误。
我通过转到Tools->Options->General
并将Break on All Errors
替换为Break on Unhandled Errors
来解决此问题。
事实证明Break on All Errors
是Windows用于"打破一些错误,但如果它是UDF错误"则返回垃圾。