【问题标题】:How to read a IE table text with VBA?如何使用 VBA 读取 IE 表格文本?
【发布时间】:2014-02-10 21:38:57
【问题描述】:

我正在尝试编写一个 vba 代码以遵循此过程:

  1. 自动填写并提交 Web 表单(打开一个新网页,答案为 http://ec.europa.eu/taxation_customs/vies/?locale=en

  2. 找到新网页的地址(因为我需要阅读这个内容)

  3. 读取html表格的特定单元格(公司名称)

您可以尝试使用增值税号 FR(FRANCE) 和 27435044714 手动提交。 它将返回一个包含公司名称的页面。

基本上我正在努力提取公司的名称。

第 1 步效果很好,独立于第 2 步和第 3 步。 第 2 步和第 3 步在同一个 Sub 上:

宏从第 2 步开始(查找打开的网页)

Sub recup()
Dim SWs As SHDocVw.ShellWindows, IE As SHDocVw.InternetExplorer 
'Establish link to IE application
Set SWs = New SHDocVw.ShellWindows

For Each IE In SWs
    If Left(IE.LocationURL, 4) <> "http" Then
    GoTo autre
    End If
    Address = IE.LocationURL
    GoTo vabene 'avoid explorer windows/etc this way
autre:
Next
vabene:

然后,我继续步骤 3 以提取文本。

IE.Visible = True
Dim xobj
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
Set xobj =IE.Document.getElementById("vatResponseFormTable").getElementsByClassName("labelStyle").Item(3)
Set xobj = xobj.getElementsByTagName("td").Item(0)
result = xobj.innerText
Set xobj = Nothing
IE.Quit
Set IE = Nothing
End Sub

我的问题:宏停止在线(运行时错误91):

结果 = xobj.innerText

这似乎来自上一行

设置 xobj = xobj.getElementsByTagName("td").Item(0)

我在网络和这个论坛上搜索了很多(直到这一步它帮助了我)。如果你能帮助我,那将节省我的一周!

【问题讨论】:

  • 为什么xobjresult = xobj.innerText 行之前设置了两次?另外,你确定Set xobj = xobj.getElementsByTagName("td").Item(0) 吗?你确定不是从Item(1)开始的吗?
  • @simpLE MAN 不,我不确定。我的问题是我可以访问 td 名称,但我想访问下一个 td 并且没有参考。因此,如果我让 Set xobj =IE.Document.getElementById("vatResponseFormTable").getElementsByClassName("labelStyle").Item(3) ,则返回是“名称”。我想要下一个文本,例如“Company ABC”....

标签: vba excel internet-explorer


【解决方案1】:

试试这个

Sub getData()

'~~~~Variable declaration~~~~'
    Dim IE As Object
    Dim country As Object
    Dim num As Object
    Dim btn As Object
    Dim tlb As Object, td As Object

    Set IE = CreateObject("InternetExplorer.Application")

    IE.Visible = False
    IE.navigate "http://ec.europa.eu/taxation_customs/vies/?locale=en"

'Wait till page is loaded
    Do While IE.readystate <> 4
        DoEvents
    Loop


    Set country = IE.document.getelementbyid("countryCombobox")
    country.Value = "FR" 'set the value for Member state


'Pause the code for 5 sec
    Application.Wait Now + TimeSerial(0, 0, 5)

'
    Set num = IE.document.getelementbyid("number")
    num.Value = "27435044714" 'set the Vat number


    Application.Wait Now + TimeSerial(0, 0, 5)


    Set btn = IE.document.getelementbyid("submit")
    btn.Click ' click the verify button

'Wait till page is loaded
    Do While IE.readystate <> 4: DoEvents: Loop

'Pause the code for 5 sec
        Application.Wait Now + TimeSerial(0, 0, 10)

        Set tbl = IE.document.getelementbyid("vatResponseFormTable")

        For Each td In tbl.getelementsbytagname("td")
            If td.innerText = "Name" Then
                MsgBox "Name : " & td.NextSibling.innerText
            ElseIf td.innerText = "Address" Then
                MsgBox "Address : " & td.NextSibling.innerText
            ElseIf td.innerText = "Consultation Number" Then
                MsgBox "Consultation Number : " & td.NextSibling.innerText
            End If

        Next


        IE.Quit
        Set IE = Nothing
 End Sub

【讨论】:

  • 您好,非常感谢您的回答(抱歉,我现在才看到。我现在会尝试让您知道。
  • 我有一条错误消息:错误代码 438 - 对象不支持属性或方法。这个错误上线[Msgbox MsgBox "Name : " &amp; td.NextSibling.innerText
  • @user3294649 我测试了这段代码,它对我有用。你能再试一次吗。你也可以告诉我你有哪个IE版本。
  • 你收到我的评论了吗(不知道如何给你发消息)?谢谢——
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2015-03-14
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 2018-03-07
  • 2012-10-21
相关资源
最近更新 更多