我很想知道在运行函数之前检查错误的最佳方法是什么。最好在调用函数之前或在函数本身内进行检查吗?
例如,我正在处理的简化版本涉及此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
目前我在代码中分散了一些实践,我想清理它。最好在功能之外或在?
之外运行此检查答案 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
您不希望将错误/提示的逻辑分散到各处。特别是如果您正在进行相同的检查,并且每个检查都会出现相同的错误提示。
不要在没有错误处理的情况下留下一个子/函数,否则当一些“这种情况永远不会发生”的情况发生时你会发现自己后悔。