我已经定义了一个在电子表格上调用超过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
答案 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
希望对你有所帮助。