1

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

如果第一个失败,我想要一种方法来停止 Excel 计算,这样就可以解决问题。我会弹出一个消息框,提供停止计算的选项。

有没有办法做到这一点?截至目前,它基本上会弹出消息框1000次,而且很多时候Ctrl+ Break(有些键盘甚至没有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
4

2 回答 2

0

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

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
于 2013-05-03T01:08:17.573 回答
0

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

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

希望对您有所帮助。

于 2013-05-03T03:51:50.440 回答