我有一个数据库,用户可以在其中在表单上的Textbox1中输入一个值;该窗体还具有一个ActiveX Web浏览器控件(acxWebBrowser1),再加上一个空白的Textbox2,最后还有一个命令按钮。用户在Textbox1中输入文本并单击命令按钮后,VBA代码将导航到acxWebBrowser1中的特定网页,在网页表单中输入Textbox1值,然后在acxWebBrowser1中的网页中获得结果。然后,结果将通过VBA代码获取,并输入数据库表单中的Textbox2中。
我需要做的是隐藏ActiveX Web浏览器控件,以(a)防止用户弄乱网页,以及(b)防止自VBA以来ActiveX Web浏览器混乱和分散注意力代码与幕后的网页进行了所有必要的交互。
问题是,我无法使acxWebBrowser1保持隐藏在表单上的矩形框控件的后面,因为浏览器会自动将自身移动到控件堆栈的顶部。如果我将acxWebBrowser1控件的尺寸减小得很小,则该网页将无法正常运行。如果我使Web浏览器控件不可见,则代码无法获取所需的值。我无法使用POST方法来避免使用Web浏览器。 (关于无法使用POST,我可能是错的-也许有人可以向我指出如何这样做)。
如何在Web浏览器控件上方隐藏或放置某些内容?
答案 0 :(得分:0)
三个小时后,我想到如何完成隐藏ActiveX Web浏览器,但仍然可以通过VBA代码访问它。简单:运行代码以访问ActiveX Web浏览器时不更新屏幕,并在VBA需要访问它时使用.Visible属性“显示”浏览器控件(但如果屏幕显示,则用户看不到)更新已关闭),然后在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
的代码,否则如果将echo设置为False后代码崩溃,您将无法查看或执行任何操作。