Nun*_*ira 5 html javascript excel vba excel-vba
我正在使用excel从网页获取值.在其他元素中,HTML包含下表:
<div id="myDiv">
<table class="myTable">
<tbody>
<tr>
<td>Text1:</td>
<td class="data"><strong>0.51</strong></td>
</tr>
<tr>
<td>Text2:</td>
<td class="data"><strong>2199</strong></td>
</tr>
</tbody>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
该页面存储在变量oHtml中.它可以很好地抓住这个表外的其他元素.但是当我尝试捕获值0,51时,我在控制台中使用JS:
document.getElementById("myDiv").getElementsByClassName("myTable")[0].getElementsByClassName("data")[0].innerText
Run Code Online (Sandbox Code Playgroud)
并且选择值0,51.
但是,函数内使用的以下VBA代码返回#VALUE!
Function myFunction(id)
Call myConnection(id)
Set myDadta = oHtml.getElementById("myDiv").getElementsByClassName("myTable")(0).getElementsByClassName("data")(0)
myFunction = myData.innerText
End Function
Run Code Online (Sandbox Code Playgroud)
这是与IE的连接:
Public Sub myConnection(id)
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://www.example.com" & id, False
.send
oHtml.body.innerHTML = .responseText
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
正如我所说,这种语法在同一页面中与此表中的其他元素一起工作正常,为什么我会收到此错误?
您似乎在变量名中有拼写错误.你用过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
Run Code Online (Sandbox Code Playgroud)
UPDATE
我在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
Run Code Online (Sandbox Code Playgroud)
更新代码以在现场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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
59908 次 |
最近记录: |