Руководство VBA по использованию API
Используете API и JSON в VBA?
Если вашему макросу VBA нужны данные из других источников или внешний процесс должен быть реализован в вашей программе, API — это то, что вам нужно. Многие приложения имеют интерфейс программирования (API), который является самым простым способом взаимодействия программного обеспечения друг с другом.
Настройка для использования API
Чтобы использовать API в VBA, нам нужно настроить http-запрос, который включает в себя определенные параметры того, что мы хотим, чтобы API делал. В этом проекте я буду использовать api.nationalize.io, чтобы предсказать национальность имени, введенного в рабочую книгу, чтобы продемонстрировать подключение к API и работу с данными из него.
Прежде чем мы сможем подключиться к API, мы должны добавить библиотеку Microsoft XML, чтобы иметь возможность отправлять HTTP-запросы. Перейдите к инструментам›ссылки и проверьте его.

Теперь нам нужна необходимая информация к запросу. В объекте MSXML2.XMLHTTP мы открываем запрос на получение данных с веб-сайта, объединяем базовый URL со значением параметра baseURL + имя, заголовок с типом контента указывает формат данных json. Затем мы отправляем эти запросы и собираем статус ответа и текст в переменные. Статус сообщает нам, правильно ли обработан запрос или выдает конкретную ошибку о том, что не так.
Dim baseURL, name As String baseURL = "https://api.nationalize.io" name = "/?name=" & <cell value with name> Dim status, response As String With CreateObject("MSXML2.XMLHTTP") .Open "GET", baseURL & name, False .setRequestHeader "Content-Type", "application/json" .send status = .status response = .responseText End With
Статус сообщает нам, правильно ли обработан запрос или выдает конкретную ошибку о том, что не так. Статус 200 означает, что запрос правильно оформлен с параметрами и выполнен. Список номеров ошибок обычно доступен в документации по API. Текст ответа приходит в виде текста и содержит прогнозы национальности.
Как обрабатывать JSON
Формат JSON хорошо обрабатывается большинством других языков программирования. В VBA лучше всего использовать одну из существующих библиотек для преобразования текста ответа в объект JSON. Я использую модуль VBA-JSON, который можно встроить в любой проект. Перенесем результаты в объект JSON и в книгу.
'transform response text to JSON
Dim JSON As Dictionary
Set JSON = JsonConverter.ParseJson(response)
Debug.Print (JsonConverter.ConvertToJson(JSON))
{"name":"Jurgen","country":[{"country_id":"BE","probability":0.36084541872899245},{"country_id":"AL","probability":0.2482687644789702},{"country_id":"MT","probability":0.1952108073789147}]}
Мы можем вставлять элементы словаря JSON один за другим, но мы также можем вставлять их все, используя цикл for each.
'we can adresss each element in country list
Range("A1") = JSON("country")(1)("country_id") //BE
'or we can paste all of them in a loop
Dim iter As Long
iter = 1
Dim Value As Dictionary
For Each Value In JSON("country")
Cells(4 + iter, 2) = Value("country_id")
Cells(4 + iter, 3) = Value("probability")
iter = iter + 1
Next Value
Резюме
Таким образом, мы получаем список стран и вероятностей, которые будут меняться в зависимости от имени, которое мы проверяем. Использование JSON в VBA определенно требует особого подхода, но это определенно возможно!
