VBA 代码关闭了我单独的 .Net Winform 应用程序?

Posted

技术标签:

【中文标题】VBA 代码关闭了我单独的 .Net Winform 应用程序?【英文标题】:VBA Code closes my separate .Net Winform App? 【发布时间】:2009-07-02 12:58:52 【问题描述】:

以下代码是我们的BA编写的Access App的关闭例程。执行时,它不仅会在同一台计算机上关闭 Access App,还会关闭我的 C# winform app。 Access 应用程序名为 DME Referral,我的 winform 应用程序主进程在任务管理器中作为 MATRIX.exe 运行。(是的,我正在对 MATRIX 进行编程...永远不要让一群社会工作者和护士为你的项目命名!)

我在 Access(VBA) 编程方面做的不多,所以我希望这里有人能提供帮助。

Private Sub cmdClose_Click()
On Error GoTo Err_cmdClose_Click

Call ToggleVisible

DoCmd.Quit

Exit_cmdClose_Click:
    Exit Sub

Err_cmdClose_Click:
    MsgBox Err.Description
    Resume Exit_cmdClose_Click

End Sub

Private Sub ToggleVisible()
    Me.txtLastNameCrit.Visible = False
    Me.txtFirstNameCrit.Visible = False
    Me.cmdSearch.Visible = False

    Me.cmbCoor.Visible = False
    Me.cmdSearchByCoor.Visible = False

    Me.txtStartDate.Visible = False
    Me.txtEndDate.Visible = False
    Me.cmdDMEReport1.Visible = False       
End Sub

【问题讨论】:

我现在正试图从 BA 那里得到这个。 它带您进入 ActiveX 库。虽然没有代码。 从 Access 中的内存中,DoCmd.Quit 是一个内置的退出应用程序。您可以尝试使用 Spy++ 来观察您的 C# 应用程序的窗口,以查看(是否)有人向它发送 WM_QUIT 或其他任何内容。 您的代码对我来说似乎很奇怪。为什么在关闭应用程序之前隐藏窗体上的控件?另外,我认为将错误处理程序包裹在 DoCmd.Quite 是有问题的——在我看来,您的错误处理程序应该在您调用的代码中,即 ToggleVisible (尽管在运行时几乎不会出错)。一件小事:我使用 Application.Quit 而不是 DoCmd.Quit。如果您在 Access 的即时窗口中键入 Quit 并按 F1 以获取帮助,您会发现 DoCmd.Quit 已被弃用,取而代之的是 Application.Quit,即使它们是等效的。 【参考方案1】:

DoCmd.Quit 应该只是关闭 MS Access 部分;这很标准。

我愿意成为正在发生的两件事中的一件。 1) 焦点已切换到 C# winform 应用程序,它正在捕获关闭信号。在这种情况下,我们可以明确地将焦点设置回 MS Access 表单。你可以通过Me.SetFocus做到这一点。 或者 2) C# winform 应用程序。正在从 MS Access 启动;当父应用程序关闭时,子应用程序也是如此。在这种情况下,我们可能不得不改变 C# winform 应用程序的方式。启动。当您手动关闭 MS Access(点击右上角的“X”)时,它是否也会关闭?

【讨论】:

以上是关于VBA 代码关闭了我单独的 .Net Winform 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

使用宏或 VBA 正确关闭 access 2003 中的隐藏窗口?

VBA - 选择一个文件夹并将其作为单独代码的路径引用

如何使用Excel VBA单击href

EXCEL VBA - 根据单元格范围和字符串创建动态下拉列表[关闭]

当关闭文档是excel vba为啥宏代码自动消失

将2个代码与循环组合成1个单独的代码