在没有打开浏览器的情况下使用XHR更快。
Option Explicit
Public Sub GetRates()
Dim sResponse As String, i As Long, html As New HTMLDocument, clipboard As Object
Dim sourceAmount As String, sourceCurrency As String, targetCurrency As String, inputDate As String
sourceAmount = "10000"
sourceCurrency = "EUR"
targetCurrency = "GBP"
inputDate = "03-08-2018"
Dim url As String
url = "http://sdw.ecb.europa.eu//curConverter.do?sourceAmount=" & sourceAmount & "&sourceCurrency=" & sourceCurrency & _
"&targetCurrency=" & targetCurrency & "&inputDate=" & inputDate & "&submitConvert.x=52&submitConvert.y=8"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
With html
.body.innerHTML = sResponse
Set clipboard = New MSForms.DataObject
clipboard.SetText .querySelectorAll("table.tableopenpage").item(1).outerHTML
clipboard.PutInClipboard
ActiveSheet.Cells(1, 1).PasteSpecial
End With
End Sub
但如果你只是想
折算金额:
.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(7).innertext
以及
率
:
.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(10).innertext
输出:
参考文献:
Microsoft Forms Object Library (or add a userform to your project)
Microsoft HTML Object Library
Internet Explorer:
由于您在URL中使用的查询字符串,数据已经存在。不需要点击。
只需对货币使用正确的缩写。
Option Explicit
Public Sub Test()
Dim IE As InternetExplorer, Amount As String, Source As String, Target As String
Dim Datestring As String, hTable As HTMLTable
Amount = 10000
Source = "EUR"
Target = "GBP"
Datestring = "03-08-2018"
Dim url As String
url = "http://sdw.ecb.europa.eu/curConverter.do?sourceAmount=" & _
Amount & _
"&sourceCurrency=" & _
Source & _
"&targetCurrency=" & _
Target & _
"&inputDate=" & _
Datestring & _
"&submitConvert.x=209&submitConvert.y=10"
Set IE = New InternetExplorer
With IE
.Visible = True
.navigate url
While .Busy Or .readyState < 4: DoEvents: Wend
Dim clipboard As Object
Set clipboard = New MSForms.DataObject
clipboard.SetText .document.getElementsByClassName("tableopenpage")(1).outerHTML
clipboard.PutInClipboard
ActiveSheet.Cells(1, 1).PasteSpecial
End With
End Sub
1)对货币使用正确的3个字母缩写。
2)您可以单击“提交”按钮:
.document.querySelector("input[name=submitConvert]").Click
它使用CSS选择器
input[name=submitConvert]
上面写着
元素
input
具有属性的标记
name
其价值是
submitconvert
.
3)然后你需要
While .Busy Or .readyState < 4: DoEvents: Wend
允许页面刷新。
4)然后可以使用以下命令获取结果表:
.document.querySelectorAll("table.tableopenpage").item(1)
它收集所有带有标记的元素
table
和阶级
tableopenpage
. 您需要其中的第二个,即基于0的索引系统上的1。
所需参考资料:
Microsoft Internet Controls
Microsoft HTML Object Library
Microsoft Forms Object Library
其他:
我发现一次获取表比较简单,但您可以将速率作为目标,例如,更具体地说,使用CSS选择器:
a[target*=quickview]
请注意,Excel可能会在输出时将日期从dd/mm/yyyy切换到mm/dd/yyyy,因此您需要更正此错误,或者至少要知道它。