Я думаю, что более эффективным способом было бы использовать один из сайтов, который предоставляет API-доступ к данным такого рода.Существует целый ряд бесплатных и платных сайтов.Приведенная ниже процедура (которая использует бесплатный API) загрузит и запишет на лист 170 иностранных валют за доли секунды и не откроет ЛЮБЫЕ окна IE.Для этой загрузки я указал USD в качестве базовой валюты, но вы можете указать любую базу.
Выходные данные с веб-сайта представлены в виде JSON, поэтому парсер JSON будет иметь значение.Я использовал бесплатный доступный по адресу:
VBA-JSON v2.2.3
(c) Tim Hall - https://github.com/VBA-tools/VBA-JSON
, но есть и другие, которые работают в VBA.Или вы можете написать свой собственный.
Для этого также необходимо установить ссылку на Microsoft winHTTP Services, версия 5.1 (или вы можете использовать позднюю привязку)
Option Explicit
Sub latestForex()
Const app_id As String = "your_own_api_key"
Const sURL1 As String = "https://openexchangerates.org/api/latest.json"
Const sURL2 As String = "?app_id="
Const sURL3 As String = "&base=USD"
Dim sURL As String
Dim vRes As Variant, wsRes As Worksheet, rRes As Range
Dim v, w, i As Long
Dim httpRequest As WinHttpRequest
Dim strJSON As String, JSON As Object
sURL = sURL1 & sURL2 & app_id & sURL3
Set httpRequest = New WinHttpRequest
With httpRequest
.Open "Get", sURL
.send
.WaitForResponse
strJSON = .responseText
End With
Set httpRequest = Nothing
Set JSON = ParseJson(strJSON)
i = 0
ReDim vRes(0 To JSON("rates").Count, 1 To 2)
Set wsRes = Worksheets("sheet3")
Set rRes = wsRes.Cells(1, 1)
vRes(0, 1) = (JSON("timestamp") / 86400) + #1/1/1970# 'UTC time
vRes(0, 2) = JSON("base")
For Each v In JSON("rates")
i = i + 1
vRes(i, 1) = v
vRes(i, 2) = JSON("rates")(v)
Next v
Set rRes = rRes.Resize(UBound(vRes, 1) + 1, UBound(vRes, 2))
With rRes
.EntireColumn.Clear
.Value2 = vRes
.Cells(1, 1).NumberFormat = "dd-mmm-yyyy hh:mm"
.Columns(2).NumberFormat = "$0.0000"
.EntireColumn.AutoFit
End With
End Sub
Вот часть результатов.Обратите внимание, что отметка времени - UTC.Очевидно, вы можете изменить это на местное время.