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