VBA-使用UDF处理所有过程中的错误

我正在处理有很多程序的大量工作簿。 我越深入我的项目,我越写function或分处理常见任务。 首先,由于最终用户将是普通的Excel用户,因此我决定保护并将所有代码集中在个人macros观工作簿中 。 这听起来对我来说是一个好主意,但也许你们中的一些人,Excel大师,不同意。 然后我写了一个Public Sub ErrorHandler()来处理我所有过程中的错误。 我完全意识到错误泡沫 。 我的程序将是这样的:

' All déclarations are outside Public Sub ErrorHandler () Lg1 = Err.Number ' Lg1 is Long Select Case Lg1 Case 1004 MsgBox ("File is not fund. Please verify its path.") Exit Sub '!EDITED! <GoTo NextCode:> is much better indeed ' ...more code with other errors... End Select NextCode: ' !EDITED! ' ...some cleaning and initialize variables to nothing or 0 Lg1 = 0 Err.Clear End Sub 

那么我想用这个子在其他的子这种方式:

 On Error Go To MyError: ' <On Error call ErrorHandler> is not permited '...more code.... MyError: call ErrorHandler 

现在有几个问题:

  • 这是一个很好的做法吗? 如果不是,你会推荐什么?
  • 例如1004的情况下,当我说退出子ErrorHandler子本身将结束,做清洁的东西,或将停止呢?
  • 有关常见和有用的用户定义错误的任何好的提示(513-65535)?

谢谢你的帮助。

当您在ErrorHandler()中执行“Exit Sub”时,它当然会立即离开ErrorHandler()并返回给调用者,因此不会进行清理。 你当然可以删除“Exit Sub”,这样你的清理就可以运行了,但是对于所有情况来说都是一样的。

我在这种方法中看到的问题是从ErrorHandler()返回后。 你完全不知道ErrorHandler()做了什么,返回给调用者。 你打算怎么从那里继续? 捕捉和显示错误只是解决scheme的一半。 你需要想出一个办法从那里继续。 如果它是一个“常见的任务”,你需要以某种方式取消/中止/恢复,或者至less返回一些错误代码,所以它知道要优雅地结束。

VBA本身在这种情况下有点不好。 我们在我们的项目中使用http://www.everythingaccess.com/vbwatchdog.htm来处理这个问题,因为它提供了一个强大的通用error handling方法,正如你所期望的那样。