【问题标题】:VBA/Access: Removing warning promptsVBA/Access:删除警告提示
【发布时间】:2015-05-20 05:17:21
【问题描述】:

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

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

DoCmd.SetWarnings 错误

Application.DisplayAlerts=False

然后在代码的最后

DoCmd.SetWarnings True

Application.DisplayAlerts=True

当我尝试它时,这不会关闭消息。知道我可以使用什么 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

【问题讨论】:

  • 你能发布你的整个代码块吗?
  • Access 没有Application.DisplayAlerts 属性;那是Excel的事情。如果您实际上是在询问与 Access 数据库交互的 Excel VBA 代码,请澄清这一点。谢谢。
  • 我在 Access 中。 Application.DisplayAlerts 只是我在其他地方发现的我认为可行的坏信息
  • 在这种情况下,将Option Explicit 添加到您的访问代码模块的声明部分。然后从 VB 编辑器的主菜单运行 Debug->Compile。修复编译器抱怨的任何问题。

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


【解决方案1】:

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

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

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

另见:

【讨论】:

  • 我无法让它工作。这是我尝试过的两个代码: DoCmd.RunSQL(INSERT INTO temptable (NAME) Select [Spec Use].name from [spec use] where ((([Spec use].use)=yes));) CurrentDB.Execute( INSERT INTO temptable (NAME) Select [Spec Use].name from [spec use] where ((([Spec use].use)=yes));)
  • CurrentDB.Execute "INSERT INTO temptable ([NAME]) Select [Spec Use].name from [spec use] where [Spec use].use=True;", dbFailOnError
【解决方案2】:

您有 7 个已保存的查询,Query1Query7,您希望按顺序执行这些查询。所以只需在不关闭SetWarnings 的情况下执行它们。 Heinzi 已经解释了为什么你不应该关闭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 中无法识别该属性。

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多