Access VB Editor - Как скрыть при обновлении модуля?

Я хотел бы избежать отображения VBE для пользователей.

Вот сценарий: Access 2010 *.accdb, который используется во всей организации. Когда пользователь открывает приложение базы данных, один из модулей обновляется и восстанавливается на основе информации в таблице в базе данных. Это хорошо работает.

Используемые системы - Windows 7 и 10.

Проблема Когда упомянутый выше модуль обновляется и сохраняется (через VBA), открывается VBE и отображается.

Пока что после обновления и сохранения модуля я добавил следующий код:

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

К сожалению, это скрывает VBE только после того, как он ясно виден пользователю. Так что это выглядит довольно неуклюже.

Любые идеи о том, как я все еще могу манипулировать модулем и не дать 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, но я уверен, что вы можете найти это. Я, наверное, украл его у Чипа Пирсона или еще чего-нибудь.

Другие вопросы по тегам