我想避免让用户使用VBE。
以下是该方案: 访问整个组织使用的2010 * .accdb。 当用户打开数据库应用程序时,将根据数据库中表中的信息刷新并重新保存其中一个模块。这很有效。
使用的系统是Windows 7& 10。
问题 当上面提到的模块刷新&保存(通过VBA)VBE打开并显示。
到目前为止 更新后&保存模块,我添加了以下代码:
'hide the vbe
Application.VBE.MainWindow.visible = False
不幸的是,这只会在之后隐藏VBE ,它对用户来说是清晰可见的。所以看起来很笨重。
关于如何操作模块并防止VBE被发现的任何想法?
提前感谢您的帮助!
答案 0 :(得分:-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或者其他东西偷了它。