【发布时间】:2013-12-10 21:49:22
【问题描述】:
我正在使用 excel 从网页中获取值。除其他元素外,HTML 还包含下表:
<div id="myDiv">
<table class="myTable">
【问题讨论】:
标签: javascript html vba excel
我正在使用 excel 从网页中获取值。除其他元素外,HTML 还包含下表:
<div id="myDiv">
<table class="myTable">
【问题讨论】:
标签: javascript html vba excel
您的变量名似乎有错字。你用过Option Explicit吗?
Function myFunction(id)
Call myConnection(id)
Set myDadta = oHtml.getElementById("myDiv").getElementsByClassName("myTable")(0).getElementsByClassName("data")(0)
myFunction = myData.innerText ' <-- This line
End Function
更新
我在 VBA 表单上放了一个 Button,以下更正的代码有效:
Option Explicit
Dim oHtml, myData
Private Sub CommandButton1_Click()
MsgBox myFunction(0)
End Sub
Function myFunction(id)
Call myConnection(id)
Set myData = oHtml.getElementById("myDiv").getElementsByTagName("Table")(0).getElementsByTagName("td")(1)
myFunction = myData.innerText ' <-- will give 0.51
End Function
Public Sub myConnection(id)
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
'.Open "GET", "http://www.example.com" & id, False
.Open "GET", "http://localhost/Test/Test.htm", False '<-- this is my local machine; replace appropriately
.send
oHtml.body.innerHTML = .responseText
End With
End Sub
更新代码以演示实时 URL 上的功能
Option Explicit
Dim oHtml, myData
Private Sub CommandButton1_Click()
MsgBox myFunction(0)
End Sub
Function myFunction(id)
Call myConnection(id)
Set myData = oHtml.getElementById("overallRatios").getElementsByTagName("Table")(0).getElementsByTagName("td")(1)
myFunction = myData.innerText
End Function
Public Sub myConnection(id)
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
'.Open "GET", "http://www.example.com" & id, False
.Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=PTI.LS", False
.send
oHtml.body.innerHTML = .responseText
End With
End Sub
【讨论】:
getElementsByClassName,因为它不能在所有 IE 版本和所有浏览器上一致地工作。或者您必须明确定义自己的 javascript 扩展方法。
DoEvents 放在循环内的某个位置以阻止 UI 冻结。
这对我有用。我已经设置了对Microsoft HTML Object Library的引用
顺便说一句,您在<div id=myDiv"> 中缺少"
Option Explicit
Sub Sample()
Dim objIe As Object, xobj As HTMLDivElement
Set objIe = CreateObject("InternetExplorer.Application")
objIe.Visible = True
objIe.navigate "C:\a.htm"
While (objIe.Busy Or objIe.READYSTATE <> 4): DoEvents: Wend
Set xobj = objIe.document.getElementById("myDiv")
Set xobj = xobj.getElementsByClassName("myTable").Item(0)
Set xobj = xobj.getElementsByClassName("data")(0)
Debug.Print xobj.innerText
Set xobj = Nothing
objIe.Quit
Set objIe = Nothing
End Sub
截图:
【讨论】:
Microsoft HTML Object Library的引用?