您没有按照预期的方式使用 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 那里偷来的。