У меня есть база данных, в которой пользователи вводят значение в Textbox1 в форме; форма также имеет элемент управления ActiveX Web Browser (acxWebBrowser1), а также еще одно пустое текстовое поле Textbox2 и, наконец, командную кнопку. После того, как пользователь введет текст в Textbox1 и нажмет кнопку команды, код VBA перейдет к определенной веб-странице в acxWebBrowser1, введет значение Textbox1 в форму веб-страницы, а затем получит результат на веб-странице в acxWebBrowser1. Затем результат захватывается кодом VBA и вводится в Textbox2 в форме базы данных.
Что мне нужно сделать, так это скрыть элемент управления ActiveX Web Browser, чтобы (а) не дать пользователю возиться с веб-страницей и (b) предотвратить беспорядок и отвлечение внимания от ActiveX Web Browser, поскольку код VBA делает все необходимые взаимодействия с веб-страницей за кулисами.
Проблема в том, что я не могу заставить acxWebBrowser1 оставаться скрытым за прямоугольным элементом управления в форме, потому что браузер автоматически перемещается в верхнюю часть стека элементов управления. Если я уменьшу размер элемента управления acxWebBrowser1 до очень маленького, веб-страница не будет работать должным образом. Если я сделаю элемент управления веб-браузером невидимым, код не сможет получить необходимые значения. Я не могу использовать подход POST, чтобы избежать использования веб-браузера. (Может быть, я ошибаюсь в том, что не могу использовать POST — может быть, кто-нибудь может указать мне, как это сделать, если это правильный путь.)
Как я могу скрыть или поместить что-то поверх элемента управления веб-браузера?
Три часа спустя меня осенило, как скрыть веб-браузер ActiveX, но при этом сделать его доступным для кода VBA. Просто: не обновляйте экран при запуске кода для доступа к веб-браузеру ActiveX и используйте свойство .Visible, чтобы «показать» элемент управления браузером, когда VBA должен получить к нему доступ (но он не будет виден пользователю, если экран обновление отключено), а затем скройте элемент управления браузером, когда VBA завершит доступ к нему.
Вот код, который я использовал для этого:
Application.Echo False 'turn off screen updating
Me.acxWebBrowser1.Visible = True 'make web browser control "visible" to VBA code
{do stuff, like: process web page}
Me.btnClickMe.SetFocus 'set focus on the button so we can hide the web browser control
Me.acxWebBrowser1.Visible = False 'make web browser invisible so user is not distracted
Application.Echo True 'turn screen updating back on
Me.Refresh 'refresh the screen; this is probably not necessary
Просто будь
Вы должны отправлять любую обработку ошибок в код, который устанавливает Application.Echo True
, иначе вы не сможете ничего увидеть или сделать, если код выйдет из строя после установки для эха значения False.