gpt4 book ai didi

ms-access - VBA如何在出错时退出功能?不工作Access 2007

转载 作者:行者123 更新时间:2023-12-03 07:54:13 25 4
gpt4 key购买 nike

在Access 2007中,我的错误陷阱设置为“未处理的错误中断”

我希望代码停止在发生错误的行并退出函数,而不是继续执行下一行代码。但是,它似乎不适用于我。我故意在第6行创建了一个错误,以查看它是否会在此行之后退出该函数,但它仅提示错误处理程序消息,并在发生错误后继续恢复到下一行。
这是我的代码:

GoToBackend():

'Go to current linked backend database

Private Function GoToBackend()

On Error GoTo BackendErrorHandler

'To update BEPath requires two sets of proc.
'Delete Exisiting
RunQuery "DeleteBEEPath" 'Here is where I created error by miss spelling it
'Insert Into
RunQuery "InsertBEPath"

'Prompt alert
MsgBox "Front end tables succesfully linked. Access now needs to run the backend database to complete the linking process. Please ensure macros/vba are enabled if prompted.", 48
Hyperlink.GoHyperlink (Hyperlink.PrepHyperlink(GetBackendPath))

ExitFunction:
Exit Function 'Why won't this exit the function?

BackendErrorHandler:
Dim Msg As String
Msg = Err.Number & ": " & Err.Description
MsgBox Msg
Resume ExitFunction
End Function

RunQuery():
'Run a given query name
Private Function RunQuery(qName As String)
On Error GoTo RunQueryErrorHandler
DoCmd.SetWarnings False
DoCmd.OpenQuery qName
DoCmd.SetWarnings True

ExitFunction:
Exit Function
RunQueryErrorHandler:
Dim Msg As String
Msg = Err.Number & ": " & Err.Description
MsgBox Msg
Resume ExitFunction
End Function

最佳答案

该错误本身发生在您的RunQuery函数中,因此在那里处理了该错误。在这里,您说要使用Msg = Err.Number & ": " & Err.Description显示有关错误的消息,因此将其 pop ,并且将错误视为“已处理”,并且原始功能将继续运行。

您的行在这里:
RunQuery "DeleteBEEPath"
不在乎您的字符串是什么,在您的眼中,您已经正确地为其提供了要传递给函数的字符串。一旦它进入发生实际错误的功能。我还没有测试过,但是我相信如果您关闭第二个函数中的错误处理,那么GoToBackend中的错误处理应该按照您希望的方式进行处理。因此,您的第二个功能将是这样的:

Private Function RunQuery(qName As String)
DoCmd.SetWarnings False
DoCmd.OpenQuery qName
DoCmd.SetWarnings True
End Function

再一次,我还没有真正能够对此进行测试,但这应该可以使您走上正确的道路,或者如果有更多经验的人在身边,他们可能会提供比我更好的答案。

我还建议您将 DoCmd.SetWarnings (True)放在错误处理中,这样,如果将设置为false后发生错误,则会重新打开它们。

编辑:我想我会加入我新概念化的函数。 (未经测试)
Public Function RunSQLNoWarnings(strSQLQuery As String) As Boolean
On Error GoTo Err_Handler


DoCmd.SetWarnings (False)
DoCmd.RunSQL (strSQLQuery)
DoCmd.SetWarnings (True)

RunSQLNoWarnings = True

Exit_Handler:
Exit Function

Err_Handler:
DoCmd.SetWarnings (True)
Call LogError(Err.Number, Err.Description, strMODULE_NAME & ".RunSQLNoWarnings on SQL Query: " & strSQLQuery)
RunSQLNoWarnings = False
Resume Exit_Handler
End Function

关于ms-access - VBA如何在出错时退出功能?不工作Access 2007,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30401288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com