在函数调用之前或在函数内检查错误?

我很想知道什么被认为是运行一个函数之前检查错误的最好方法。 在函数被调用之前或在函数本身之内进行检查是最好的吗?

例如,我正在处理的简化版本涉及此Click子例程:

Private Sub MyButton1_Click() For j = 1 to 3 CreateChart Sheets(j) Next j End Sub 

它所调用的函数定义如下:

 Function CreateChart(Sht As Worksheet) As Boolean Set ChtObj = Sht.ChartObjects.Add(40, 40, 600, 300) Set Cht = ChtObj.Chart ... End Function 

我正在处理具有多个模块的代码以及许多需要在函数成功运行之前执行某些检查的情况。 在Click子例程的循环中放一个检查是最合适的,比如:

 If DoesSheetExist(Sheets(j)) Then CreateChart(Sheets(j)) 

或者最好把它放在这样的function之内:

 If Not DoesSheetExist(Sht) Then CreateChart = False: Exit Function 

目前我有一些散布在整个代码中的实践,我想清理它。 是最好的运行这个检查之外的function或内部?

我正在处理具有多个模块的代码以及许多需要在函数成功运行之前执行某些检查的情况。 在Click子例程的循环中放一个检查是最合适的,比如:

一般来说,我会避免在主代码中重复相同的检查,如果你打算为每个检查。

在我有4个检查的情况下,我想知道是什么问题导致问题,当函数失败时通过一个MsgBox,有时我离开在主代码循环外面的检查,只有一个出现通知。 有没有办法在职能范围内进行检查,但只报告一次问题?

这听起来像你有几个检查将是相同的每个CreateChart方法。 我会做这样的事情:

 Sub mainSub() If validateCreateChart Then CreateChart End If End Sub Sub CreateChart() On Error Goto errHandler 'do stuff exit sub errHandler: msgbox "Unexpected error: " & err.description End Sub Function validateCreateChart() As Boolean If ConditionOne Then validateCreateChart = False MsgBox "error condition 1" Exit Function End If If ConditionTwo Then validateCreateChart = False MsgBox "error condition 2" Exit Function End If 'etc End Function 

你不想让你的逻辑错误/提示散落在任何地方。 特别是如果你正在进行相同的检查,并将有相同的错误提示每个人。

不要留下子/function没有一些error handling,或者当一些“这不会发生”的情况发生时,你会发现自己后悔。