强制Excel在函数错误后停止计算

时间:2013-05-03 00:55:54

标签: excel-vba vba excel

我已经定义了一个在电子表格上调用超过1000次的函数(从数据库中查找价格)有时,电子表格会在数据库不可用的环境中打开。当发生这种情况时,我有错误代码来处理它,这会推送一个消息框。

如果第一个算法失败,我想要一种停止Excel计算的方法,所以可以修复一些事情。我会弹出一个消息框,提供停止计算的选项。

有没有办法让这种情况发生?截至目前,它基本上弹出消息框1000次,并且大量时间 Ctrl + Break (某些键盘甚至没有中断键)或 Esc 不会停止运行,因为它太快而无法中断......

ErrorHandler:
' clean up
If Not rst1 Is Nothing Then
    If rst1.State = adStateOpen Then rst1.Close
End If
Set rst1 = Nothing

If Not Con1 Is Nothing Then
    If Con1.State = adStateOpen Then Con1.Close
End If
Set Con1 = Nothing

If Err <> 0 Then
    MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If


End Function

2 个答案:

答案 0 :(得分:0)

您可以使用标签并使用转到转移到标签。见下面的代码。

On Error GoTo ErrorHandler


a = 1 / 0

ErrorHandler:
' clean up
If Not rst1 Is Nothing Then
    If rst1.State = adStateOpen Then rst1.Close
End If
Set rst1 = Nothing

If Not Con1 Is Nothing Then
    If Con1.State = adStateOpen Then Con1.Close
End If
Set Con1 = Nothing

If Err <> 0 Then
    MsgBox Err.Source & "-->" & Err.Description, , "Error"
    GoTo exit_func
End If

exit_func:

End Function

答案 1 :(得分:0)

我认为您可以通过将函数设置为boolean来解决此问题,我尝试使用以下示例向您解释:

Sub plus()

Dim cond As Boolean
Dim a As Integer

cond = True  'initialize the condition

Dim rowA As Long
rowA = Range("A" & Rows.Count).End(xlUp).Row

For a = 1 To 3   'calling to loop to call function 
    If cond = True Then
        cond = plusnumber(cond, rowA) ' passing the data to function
    Else
        Exit Sub
    End If
Next

End Sub

以下是我刚才提到的布尔类型的函数:

Function plusnumber(condition, rowA) As Boolean

Dim i As Integer

For i = 2 To rowA
    If Range("A" & i).Value > 5 Then
        MsgBox "the number greater than 5)"
        plusnumber = False 'set the condition as false and exit function
        Exit Function
    Else
        Range("B" & i).Value = Range("B" & i).Value + Range("A" & i).Value
    End If
Next


End Function

希望对你有所帮助。