Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用VBA读取IE表格文本?_Vba_Excel_Internet Explorer - Fatal编程技术网

如何使用VBA读取IE表格文本?

如何使用VBA读取IE表格文本?,vba,excel,internet-explorer,Vba,Excel,Internet Explorer,我正在尝试编写vba代码,以便遵循以下过程: 自动填写和提交Web表单(打开带有答案的新网页) 查找新网页的地址(因为我需要阅读此内容) 读取html表的特定单元格(公司名称) 您可以尝试手动提交增值税编号为FR(法国)和27435044714的申请。 它将返回一个包含公司名称的页面 基本上,我正在努力提取公司的名称 第1步工作得很好,独立于第2步和第3步。 步骤2和步骤3位于同一个子接头上: 宏从步骤2开始(查找打开的网页) 我的问题:宏在行上停止(运行时错误91): 结果=xobj.inne

我正在尝试编写vba代码,以便遵循以下过程:

  • 自动填写和提交Web表单(打开带有答案的新网页)

  • 查找新网页的地址(因为我需要阅读此内容)

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

  • 您可以尝试手动提交增值税编号为FR(法国)和27435044714的申请。 它将返回一个包含公司名称的页面

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

    第1步工作得很好,独立于第2步和第3步。 步骤2和步骤3位于同一个子接头上:

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

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

    结果=xobj.innerText

    这似乎来自上一行

    设置xobj=xobj.getElementsByTagName(“td”)。项(0)

    我在网上和这个论坛上搜索了很多东西(在这一步之前,它对我很有帮助)。如果你能帮我,那就可以省下我一周的时间了

    试试这个

    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
    
    Sub-getData()
    “~~~~~变量声明~~~~”
    模糊的物体
    以模糊国家为对象
    Dim num作为对象
    作为对象的Dim btn
    尺寸tlb作为对象,td作为对象
    设置IE=CreateObject(“InternetExplorer.Application”)
    可见=假
    即“导航”http://ec.europa.eu/taxation_customs/vies/?locale=en"
    '等待页面加载
    请稍等,即readystate 4
    多芬特
    环
    设置country=IE.document.getelementbyid(“countryCombobox”)
    country.Value=“FR”'设置成员国的值
    '暂停代码5秒
    应用程序。立即等待+时间序列(0,0,5)
    '
    Set num=IE.document.getelementbyid(“编号”)
    num.Value=“27435044714”设置增值税编号
    应用程序。立即等待+时间序列(0,0,5)
    设置btn=IE.document.getelementbyid(“提交”)
    btn.单击“单击验证”按钮
    '等待页面加载
    Do While IE.readystate 4:DoEvents:Loop
    '暂停代码5秒
    应用程序。立即等待+时间序列(0,0,10)
    设置tbl=IE.document.getelementbyid(“vatResponseFormTable”)
    对于tbl.getelementsbytagname(“td”)中的每个td
    如果td.innerText=“Name”,则
    MsgBox“名称:”&td.NextSibling.innerText
    ElseIf td.innerText=“地址”然后
    MsgBox“地址:&td.NextSibling.innerText
    ElseIf td.innerText=“咨询号”然后
    MsgBox“咨询编号:&td.NextSibling.innerText
    如果结束
    下一个
    即退出
    设置IE=无
    端接头
    
    为什么在第行
    result=xobj.innerText
    之前设置两次
    xobj
    ?另外,您确定要设置xobj=xobj.getElementsByTagName(“td”).Item(0)?你确定它不是从第(1)项开始的吗?@simpLE MAn不,我不确定。我的问题是,我可以访问td名称,但我想访问下一个td,没有参考。因此,如果我让
    设置xobj=IE.Document.getElementById(“vatResponseFormTable”).getElementsByClassName(“labelStyle”).Item(3)
    ,那么返回的是“Name”。我想要下一个文本,例如“Company ABC”…您好,非常感谢您的回答(很抱歉,我刚刚看到了它。我现在将尝试让您知道。我收到一条错误消息:错误代码438-对象不支持属性或方法。此错误出现在
    [Msgbox Msgbox”Name::&td.NextSibling.innerText
    @user3294649我测试了这段代码,它对我有效。你能再试一次吗。你能告诉我你有哪个IE版本吗。你收到我的评论了吗(不知道如何给你发信息)?谢谢-
    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
    
    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