Управление сценариями будет работать для 32-битных, а не 64-битных.
Преимущество в следующем: будет работать на 32- и 64-битных машинах
Использование парсера json:
Я бы также использовал jsonconverter.bas (добавьте, затем добавьте ссылку на Microsoft Scripting Runtime), и, поскольку он возвращает внутри словарь, вы можете проверить ключ rate
Option Explicit
Public Sub GetRate()
Dim json As Object, pairs As String
pairs = "EURUSD"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.freeforexapi.com/api/live?pairs=" & pairs, False
.send
Set json = JsonConverter.ParseJson(.responseText)
If json("rates")(pairs).Exists("rate") Then
Debug.Print json("rates")(pairs)("rate")
End If
End With
End Sub
Использование регулярного выражения:
Option Explicit
Public Sub GetQuoteValue()
Dim json As Object, pairs As String, s As String, re As Object
Set re = CreateObject("VBScript.RegExp")
pairs = "EURUSD"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.freeforexapi.com/api/live?pairs=" & pairs, False
.send
s = .responseText
Debug.Print GetValue(re, s, """rate"":(\d+\.\d+)")
End With
End Sub
Public Function GetValue(ByVal re As Object, inputString As String, ByVal pattern As String) As String
With re
.Global = True
.MultiLine = True
.IgnoreCase = False
.pattern = pattern
If .Test(inputString) Then
GetValue = .Execute(inputString)(0).SubMatches(0)
Else
GetValue = "Not found"
End If
End With
End Function
Использование разделения строк:
Option Explicit
Public Sub GetQuoteValue()
Dim json As Object, pairs As String, s As String, p As String
pairs = "EURUSD"
p = """rate"":"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.freeforexapi.com/api/live?pairs=" & pairs, False
.send
s = .responseText
If InStr(s, p) > 0 Then
Debug.Print Split(Split(s, p)(1), ",")(0)
End If
End With
End Sub