На основе кода, предоставленного файлом Excel pvd402aaX.xlsm

В этой статье объясняется, как работает JSON с использованием JavaScript в VBA в Excel 2016. Если у вас нет доступа к файлу Excel 2016 pvd402aaX.xlsm, попросите его у автора Ника. В этой статье и сопутствующем файле Excel показано, как выполнить все следующие задачи:

  • Включить логику JavaScript как часть кода VBA в Excel
  • Преобразование данных JSON в объект в памяти
  • Извлечение ключей и значений из структуры JSON
  • Используйте функцию VBA для инкапсуляции функции JavaScript
  • Создайте ArrayLen как универсальный способ подсчета элементов массива в VBA.
  • Безопасная оценка выражения без использования метода Eval из ScriptControl
  • Получите компонент ScriptControl для работы в 64-разрядной версии Excel.

А | Демонстрационная процедура

[2] Чтобы увидеть интерактивную часть демонстрации, выполните следующие действия:

  1. Откройте файл Excel 2016 pvd402aaX.xlsm.
  2. Нажмите кнопку [Примеры кода Dashboard 404].
  3. На предыдущем шаге будет выполнена подпрограмма Dashboard404ActiveXButton_Click, которая отобразит форму Dashboard404TestCode.
  4. Выберите третий элемент в списке «03 — JavaScript и JSON».
  5. Нажмите кнопку [Взять выбранный пример].
  6. На предыдущем шаге будет выполнена подпрограмма DoSelectedExample, которая, в свою очередь, выполнит подпрограмму DoCodeSample03_JsonDemo1, которая, в свою очередь, выполнит подпрограмму DoTheFirstJsonDemo.

[3] Демонстрационный код DoTheFirstJsonDemo представит следующее интерактивное сообщение:

  • Демонстрация Шаг 1 | ObjectAsAStringInJsonFormat содержит следующее в формате JSON, но без двойных кавычек: {key1:val1, key2:{key3,val3}}
  • Демонстрация Шаг 2 | В PropertyNames есть 2 элемента: key1и key2.
  • Демонстрация Шаг 3 | ValueOfTheFirstProperty равно val1
  • Демонстрация Шаг 4 | В PropertyNames есть 1 элемент: key3
  • Демонстрация Шаг 5 | ValueOfProperty1OfProperty2 равно val3

Б | Внутри демонстрационной подпрограммы DoTheFirstJsonDemo

[4] Подпрограмма DoTheFirstJsonDemo выполняет следующие шаги:

  • DCS1 | Инициализировать движок JavaScript
  • DCS2 | Используйте текстовую строку в формате JSON для представления основного объекта с двумя свойствами, второе из которых содержит второстепенный объект только с одним свойством.
  • DCS3 | Превратите объект JSON в основной объект в памяти.
  • DCS4 | Получите имена всех свойств верхнего уровня в основном объекте. Результатом являются key1 и key2.
  • DCS5 | Получите значение первого свойства основного объекта. Результатом является val1.
  • DCS6 | Получите содержимое второго свойства активного объекта. Результатом является второстепенный объект в памяти. Безусловно, второстепенный объект — это содержимое второго свойства основного объекта, а именно key2.
  • DCS7 | Получите имена всех свойств верхнего уровня в второстепенном объекте. Результатом является key3.
  • DCS8 | Получите значение первого свойства второстепенного объекта. Результатом является val3.

С | Как создать движок JavaScript

[5] Существует пять шагов по созданию и использованию JavaScript Engine в VBA в Excel 2016. Первый шаг — зарезервировать блок памяти, достаточно большой для хранения объекта ScriptControl, который определен в библиотека Microsoft Script Control 1.0. Напоминаем, что используйте команду меню [Инструменты\Справочники].

Частный JavaScriptEngine как ScriptControl

[6] Второй шаг — активировать элемент управления скриптом с помощью общедоступного исходного кода, как определено двумя подпрограммами CreateObjectx86 и CreateWindow. Они необходимы, поскольку следующий оператор не может быть выполнен в 64-разрядной версии Excel 2016:

Установите JavaScriptEngine = Новый ScriptControl

[7] Третий шаг — сообщить элементу управления сценарием, что мы хотим использовать JavaScript, а не VBScript.

JavaScriptEngine.Language = «JScript»

[8] Четвертый шаг — использование метода элемента управления сценария AddCode, чтобы добавить столько пользовательских функций JavaScript, сколько необходимо.

[9] Пятый шаг — использование метода элемента управления скриптом Run для вызова добавленного кода JavaScript.