VBA On Error退出调用功能

时间:2014-05-08 19:05:52

标签: excel vba excel-vba error-handling

我有一个简单的excel函数,它连接到db并检索一些数据并填充工作表。该函数调用另一个函数来建立数据库连接并返回查询结果。如果连接到数据库时出错,如何退出调用函数?这就是我的函数看起来连接到数据库的样子。如果连接到DB时出错,则会显示消息框,但随后在调用函数中继续处理,然后我收到一个丑陋的“END或DEBUG”消息框...我试图避免这种情况。

Public Function QueryDB(sQuery As String)

On Error GoTo ErrorHandler

... Connect to database and get data

ErrorHandler:
... Display a messagebox telling the user there is an error

'Resume Next
Exit Function

End Function

3 个答案:

答案 0 :(得分:3)

Public Function QueryDB(sQuery As String)
    On Error GoTo ErrorHandler
    '... Connect to database and get data

    ' Exit function before the error handler so
    ' it doesn't get processed every run
    Exit Function


ErrorHandler:
    ' ... Display a messagebox telling the user there is an error
    MsgBox "Oops! An error occurred."
End Function

您可能希望在调用子中处理错误,因为错误会“冒泡”到调用者。即使在QueryDB中有错误处理程序,这也会导致宏进行调试。

以下是如何处理被调用函数中的错误的示例

Sub Main()
    On Error GoTo DBERROR
    QueryDB ("Query String")
    On Error GoTo 0

    Exit Sub

DBERROR:
    MsgBox "Oops! Error " & Err.Number & " occurred in " & Err.Source & ".", _
           Title:="Error " & Err.Number
End Sub

Public Function QueryDB(sQuery As String)
    Err.Raise 5000, "QueryDB", "Error connecting to DB"
End Function

答案 1 :(得分:0)

在必要时使用“退出子”命令。因为你没有共享你的子程序/功能,我不能指出它需要给出的位置。根据您的逻辑添加“退出子”。

此致

答案 2 :(得分:0)

可以使用全局级变量完成,如下所示:

Public dbError as Integer

Function ConnectToDb as Integer
   On Error GoTo err_Connection
   'Asume connection to DB failure
   err_Connection:
   MsgBox "Connection failed to database !! ", vbOKOnly + vbExclamation
   dbError = -500 'Any number
      Exit Function
End Function

Sub MainSub 
'Call function
ConnectToDb
 If dbError = -500 Then
    Exit Sub
 End If
End Sub