MS Access VBA从Web浏览器控件的内容中获取数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MS Access VBA从Web浏览器控件的内容中获取数据相关的知识,希望对你有一定的参考价值。

我已成功使用MS Access对象打开浏览器窗口并从该打开的窗口中读取数据。但是,我现在正在尝试从Access中的窗体内的MS Access浏览器控件对象内部打开的网页中读取数据,而不是在外部浏览器窗口中读取数据。

基于我在使用对象时工作的代码,我尝试以下方法从Access中浏览器控件内显示的内容中读取数据:

forms!frmOQWebWindow.webView.Document.getElementByID("lblSessionDate").innerText

并且

forms!frmOQWebWindow.webView.Object.Document.getElementByID("lblSessionDate").innerText

但是这两个都给我运行时错误'91':“对象变量或没有设置块变量”

当网页显示在MS Access表单内的Web浏览器控件中时,如何读取具有指定名称(“lblSessionDate”)的Element的值?我确定我错过了一些简单的事情。

如果它有帮助,这里的代码在我使用对象从同一网页上的Elements读取数据时起作用,当我尝试从浏览器控件中读取它时会抛出错误:

Dim weblink As String
Dim objIE As Object
Dim SessionDate As String

Set objIE = CreateObject("InternetExplorer.Application")
weblink = "http://www.somewebpage.com"
objIE.Navigate weblink

While objIE.Busy
    DoEvents
Wend

objIE.Visible = True  'make it visible; set this to false to hide the window

SessionDate = objIE.Document.getElementByID("lblSessionDate").innerText
答案

快速摘要:使用ActiveX Web浏览器控件而不是MS Access Web浏览器控件。

今天早上,我解决了这个问题。我一直很困惑,为什么对象浏览器没有显示我添加到Access窗体的Web浏览器控件的.document属性。我突然意识到,我曾在另一篇文章中读到过这个人已经不遗余力地提到他们没有从功能区栏上的控制工具箱中添加Web浏览器控件,而是添加了一个ActiveX Web浏览器控制。

一旦我删除了Access Web浏览器控件并添加了ActiveX Web浏览器控件,事情就开始按预期运行了! ActiveX浏览器控件具有.document属性,我能够从Access窗体中的浏览器控件中读取信息。以下是我为实现这一目标所做的工作:

  1. 要将ActiveX Web浏览器控件插入MS Access窗体: 从功能区上MS Access“表单设计工具”/“设计”选项卡上的控件下拉列表中选择“ActiveX控件” 向下滚动列表并选择“Microsoft Web Browser”,然后单击[确定]并将控件放在表单上
  2. 在Form_Open事件中,添加导航到所需网页所需的代码,例如,使用名为webView的ActiveX Web浏览器对象: Me.webView.Object.Navigate "http://www.yoururl.com"
  3. 为了从网页读入数据,我将表单的TimerInterval设置为100(100毫秒)并将代码放在那里以将所需数据收集到变量中以供以后使用;一旦Timer事件被触发,我将TimerInterval设置为0,这样它就不会再次触发。例如,在Form_Timer事件中,使用名为webView的ActiveX Web浏览器: With Me.webView.Object While .Busy Or .ReadyState <> 4 'thanks to @ErikvonAsmuth for .ReadyState <> 4 DoEvents Wend SDate = .Document.getElementByID("SDate").innerText Omega = .Document.getElementByID("Omega").innerText End With Me.TimerInterval = 0 'turn off timer since we've got the data needed

在上面之后,我能够在VBA代码中检查SDate和Omega的值。当然,您需要知道Elements的ID值,但其他论坛可以教您如何找到这些ID值。

希望这有助于其他人!

以上是关于MS Access VBA从Web浏览器控件的内容中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

带有行着色的MS Access VBA列表框?

MS Access 2013 从 VBA 调用插入查询并出现奇怪的错误

有没有办法在 VBA(MS Access 2002 或 2003)中调用任何控件的更新前事件过程?

如何在ms-access vba中单击命令按钮单击以更改代码以更改控件属性

MS Access vba中的分组字段

从 VBA (MS-Access) 填写 PDF 表单