【问题标题】:Access VB Editor - How to Hide When Updating Module?访问 VBA 编辑器 - 更新模块时如何隐藏?
【发布时间】:2016-06-30 19:05:36
【问题描述】:

我想避免为用户显示 VBE。

场景如下: 访问在整个组织中使用的 2010 *.accdb。 当用户打开数据库应用程序时,其中一个模块会根据数据库内表中的信息进行刷新和重新保存。这很好用。

使用的系统是 Windows 7 和 10。

问题 当上述模块被刷新并保存(通过 VBA)时,VBE 将打开并显示。

到目前为止 更新并保存模块后,我添加了以下代码:

'hide the vbe
Application.VBE.MainWindow.visible = False

不幸的是,这只隐藏了 VBE,它对用户清晰可见。所以它看起来相当笨重。

关于如何操作模块并防止 VBE 被看到的任何想法?

提前感谢您的帮助!

【问题讨论】:

  • 刷新并保存 - 你真的需要这个吗?我从未有过或遇到过这样的需求。
  • @Gustav 祝你好运。您必须让客户真正了解应该如何使用数据库,或者已经有足够的钱可以告诉他们他们首选的工具不适用于此类应用程序。总有一天,我希望能成为你的位置。
  • 抱歉,这两种情况都不正确。我真的相信你走错了路。
  • @CWilson:或者他设计他的模块的方式是所有参数化都是通过数据表(或任何方式)完成的,而不是通过即时编辑模块(不寒而栗)。部署通常使用 .mde/.accde 文件完成,但无论如何这都行不通。
  • 我从来没有客户告诉我应该如何做某事——他们告诉我他们想看什么。由开发人员来寻找解决方案。当您可以为函数和查询定义提供参数时,动态更改代码是没有意义的。

标签: vba ms-access vbe


【解决方案1】:

您没有按照应有的方式使用 Access。我也没有。:)

尝试在模块顶部的声明中添加以下内容:

Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal ClassName As String, ByVal WindowName As String) As Long

然后将以下内容添加到调用更改 VBE 的函数的命令按钮中:

Application.Echo False
SetWindowPos FindWindow("wndclass_desked_gsk", Application.VBE.MainWindow.Caption), 0&, 0&, 2000&, 1, 1, &H80 Or &H1
<run your code that calls the VBE>
Application.VBE.MainWindow.Visible = False
Application.Echo True

这将首先阻止 Access 显示任何屏幕更改,在 VBE 窗口仍隐藏在后台时将其移出屏幕,运行您的代码,在窗口离开屏幕后仍将其隐藏,然后显示更新的屏幕再次正常。 VBE 既不在屏幕上,又从任务栏/桌面查看中隐藏。

现在,将 VBE 窗口移出屏幕显然是作弊……但我的客户并不关心我是否作弊。

如果您使用此代码然后需要调试意外错误,这可能会很烦人(或更糟)。此外,有时 Access 会在关闭时保存此窗口位置,即使跨数据库也是如此,这是不可取的。谨慎使用,或留出充足的时间。

互联网上说以下内容也应该有所帮助,但我还没有让它在 Access 2016 中工作。也许你比我聪明?

LockWindowUpdate FindWindow("wndclass_desked_gsk", Application.VBE.MainWindow.Caption)

我不知何故丢失了LockWindowUpdate 的声明,但我相信你能找到它。我可能是从 Chip Pearson 那里偷来的。

【讨论】:

  • 答案是好的,并且对您没有归属但仍然得到工具制造商认可的策略投反对票,这与 SE 的理念背道而驰。欢迎您(并且可能应该)不同意围绕此策略构建解决方案,但这并不足以掩盖有效和准确的答案。在这种情况下,该网站无法正常运行。
  • CWilson 感谢屏幕外的方法定位似乎是一个合适的解决方案。本周测试后将发回(并投票)。我欣赏 SE 的一个原因是,即使不使用通常使用的东西,也有人已经走上了这条路,并且愿意分享他们的经验/专业知识。这里有很多好信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多