VBA / Access:删除警告提示

时间:2015-03-17 16:42:03

标签: vba excel-vba ms-access access-vba ms-access-2010

我已经构建了一个运行7个查询的宏。宏的工作方式与我想要的完全相同,但因为它们是更新和附加查询,所以Access会提示用户批准更新和附件。我想使用VBA来关闭警告消息,以便宏从头到尾不间断地运行。

我将宏转换为VBA,代码非常简单。有7个DoCmd.OpenQuery命令后跟一个“宏名称”退出:和“宏名称”Err:。 我在第一个DoCmd.OpenQuery行之前添加了这段代码

  

DoCmd.SetWarnings False

     

Application.DisplayAlerts =假

然后在代码的末尾

  

DoCmd.SetWarnings True

     

Application.DisplayAlerts =真

当我尝试时,这不会消息。知道我可以用什么VBA代码来关闭所有更新,并附加查询警告?

编辑:我的VBA是

Option Compare Database

Function Spec_Maker()
On Error GoTo Spec_Maker_Err
    DoCmd.SetWarnings False
    Application.DisplayAlerts=False
    DoCmd.OpenQuery "Query1", acViewNormal, acEdit
    DoCmd.OpenQuery "Query2", acViewNormal, acEdit
    DoCmd.OpenQuery "Query3", acViewNormal, acEdit
    DoCmd.OpenQuery "Query4", acViewNormal, acEdit
    DoCmd.OpenQuery "Query5", acViewNormal, acEdit
    DoCmd.OpenQuery "Query6", acViewNormal, acEdit
    DoCmd.OpenQuery "Query7", acViewNormal, acEdit
    DoCmd.SetWarnings True
    Application.DisplayAlerts=True

Spec_Maker_Exit:
    Exit Function

spec_Maker_Err:
    MsgBox Error$
    Resume Spec_Maker_Exit

End Function

2 个答案:

答案 0 :(得分:2)

通常应该避免使用

SetWarnings,因为它会关闭全局警告,并且即使出现错误,您也必须非常小心地重新打开它们。

摆脱警告的一种优雅方法是使用查询来进行数据更改。而是将INSERT或UPDATE语句的SQL复制到VBA并使用CurrentDb.Execute执行它:

CurrentDb.Execute "INSERT INTO ...", dbFailOnError

另见:

答案 1 :(得分:2)

您有7个已保存的查询, Query1 通过 Query7 ,您要按顺序执行。所以只需执行它们而不关闭SetWarnings。海因兹已经解释了为什么你不应该关掉SetWarnings

Function Spec_Maker()
    Dim i As Long

On Error GoTo spec_Maker_Err

    For i = 1 To 7
        CurrentDb.Execute "Query" & i, dbFailOnError
    Next

Spec_Maker_Exit:
    Exit Function

spec_Maker_Err:
    MsgBox Error$
    Resume Spec_Maker_Exit

End Function

始终在所有代码模块的声明部分中包含Option Explicit。并从VB编辑器的主菜单运行Debug-> Compile。在继续进行故障排除之前,修复编译器抱怨的任何内容。如果您这样做,Access会在Application.DisplayAlerts提醒您“找不到方法或数据成员”,因为该属性在Access中无法识别。