-1

我想避免为用户显示 VBE。

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

使用的系统是 Windows 7 和 10。

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

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

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

不幸的是,这只会在用户清晰可见隐藏 VBE 。所以看起来比较笨重。

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

在此先感谢您的帮助!

4

1 回答 1

-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 那里偷来的。

于 2016-07-01T13:56:03.177 回答