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

时间:2014-04-11 19:12:27

标签: excel vba excel-vba

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

例如,我正在处理的简化版本涉及此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))

或者最好把它放在像:

这样的功能中
If Not DoesSheetExist(Sht) Then CreateChart = False: Exit Function

目前我在代码中分散了一些实践,我想清理它。最好在功能之外或在?

之外运行此检查

1 个答案:

答案 0 :(得分:2)

  

我正在处理具有多个模块的代码以及需要在函数成功运行之前执行某些检查的许多情况。最适合在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

您不希望将错误/提示的逻辑分散到各处。特别是如果您正在进行相同的检查,并且每个检查都会出现相同的错误提示。

不要在没有错误处理的情况下留下一个子/函数,否则当一些“这种情况永远不会发生”的情况发生时你会发现自己后悔。