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

标签 html vba ms-access dom

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

根据我使用对象时有效的代码,我尝试了以下方法从 Access 中浏览器控件内显示的内容中读取数据:

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

还有

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

但这两个都给我运行时错误“91”:“未设置对象变量或 block 变量”

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

如果有帮助,下面是当我使用对象从同一网页上的元素读取数据时有效的代码,当我尝试从浏览器控件读取它时抛出错误:

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 网络浏览器控件而不是MS Access 网络浏览器控件。

今天早上,我解决了这个问题。我一直很困惑,为什么对象浏览器没有为我添加到我的 Access 表单中的 Web 浏览器控件显示 .document 属性。我突然意识到,我在某处的另一篇文章中读到,该人竭尽全力提及他们没有从功能区栏上的控件工具箱中添加 Web 浏览器控件,但是而是添加了一个 ActiveX 网络浏览器控件。

一旦我删除了 Access 网络浏览器控件并添加了 ActiveX 网络浏览器控件,事情就开始按预期运行了!ActiveX 浏览器控件一个 .document 属性和我能够从我的 Access 表单中的浏览器控件中读取信息。这是我为使它正常工作所做的工作:

  1. 要将 ActiveX 网络浏览器控件插入 MS Access 表单:
    1. 从 MS Access 功能区“表单设计工具”/“设计”选项卡的“控件”下拉列表中选择“ActiveX 控件”
    2. 向下滚动列表并选择“Microsoft Web 浏览器”,然后单击 [确定] 并将控件放置到窗体上
  2. 在 Form_Open 事件中,添加导航到所需网页所需的代码,例如,使用名为 webView 的 ActiveX 网络浏览器对象:

    Me.webView.Object.Navigate "http://www.yoururl.com"
    
  3. 为了从网页中读取数据,我将表单的 TimerInterval 设置为 100(100 毫秒)并将代码放在那里以将需要的数据收集到变量中供以后使用;一旦 Timer 事件触发,我将 TimerInterval 设置为 0,这样它就不会再次触发。例如,在 Form_Timer 事件和名为 webView 的 ActiveX 网络浏览器中:

    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 的值。当然,您需要知道元素的 ID 值,但其他论坛可以教您如何找到这些 ID 值。

希望这对其他人有帮助!

关于html - MS Access VBA 从 Web 浏览器控件的内容中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078724/

相关文章:

ms-access - 在Access应用程序中混合ADO和DAO

javascript - 使用 javascript 和 while 循环隐藏/显示 div

javascript - elem.innerHTML 仅在设置超时后可用

vba - 获取上一季度的最后一天

arrays - Excel VBA 和数组公式

ms-access - 如何在 VBA 中创建字典集合?

javascript - jQuery 在 ajax 调用后更新 li 类属性 href

javascript - 如何定位 "MediaElement"媒体播放器

vba - 不重复VBA代码

ms-access - 如何删除空白行?