我已经构建了一个运行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
答案 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中无法识别。