Быстрее использовать 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) Используйте правильные трехбуквенные сокращения для валют.
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
. Вам нужен второй из них, который равен 1 в системе индексов на основе 0.
Необходимые ссылки:
Microsoft Internet Controls
Microsoft HTML Object Library
Microsoft Forms Object Library
Другое:
Я считаю, что проще получить таблицу за один раз, но вы можете настроить скорость, например, более конкретно с помощью селектора CSS:
a[target*=quickview]
Имейте в виду, что Excel может поменять дату с dd/mm/yyyy на mm/dd/yyyy при выводе, поэтому вам нужно будет исправить это или, по крайней мере, знать об этом.
06.08.2018