Заполнение нескольких ячеек Excel данными из пользовательской функции надстройки (UDF)

Я работаю над надстройкой для Excel, которая должна заполнять одну или несколько ячеек на листе данными с сервера. Я сделал следующее:

  1. Создал надстройку (xlam) и создал определенную пользователем функцию: GetMyData ()
  2. Я вызываю эту функцию из простого листа Excel. В ячейке A1 я ввел формулу = GetMyData ()
  3. Мой сервер возвращает массив JSON. Я могу разобрать JSON и теперь пытаюсь заполнить A1 и ниже строки значениями, полученными с сервера. (в этом случае у меня 20 значений, поэтому я хочу заполнить ячейки A1: A20).

Проблема заключается в том, что, согласно Microsoft KB, пользовательская функция может изменять только значение активной ячейки. https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel Я также попытался запустить приведенный ниже код, который изменяет только одну ячейку на твердое значение :

ActiveWorkbook.Sheets("DataSheet").Cells(1, 1).Value = '12312' 

Все еще – получение исключения.

Может ли кто-нибудь помочь в решении этой проблемы?

Пусть функция вернет вертикальный массив.

Например:

 Function GetMyData() As Variant() Dim test() As Variant test = Array(1, 2, 3, 4) GetMyData = Application.Transpose(test) End Function 

Затем выделите все ячейки, которые вам когда-либо понадобится, с верхней частью в качестве активной ячейки.

! [введите описание изображения здесь

Затем поместите эту формулу в строку формул:

 =GetMyData() 

И нажмите Ctrl-Shift-Enter вместо Enter для массива, введите формулу.

введите описание изображения здесь

Если вы выберете больше, чем возвращает массив, вы получите ошибки.


Или вы можете, используя возврат Array, использовать это, чтобы справиться с ошибкой и войти нормально, но она запускает функцию для каждого момента, когда она помещается в ячейку.

Поместите это в первую ячейку:

 =IFERROR(INDEX(GetMyData(),ROW(1:1)),"") 

Затем скопируйте / перетащите, пока не получите пробелы

введите описание изображения здесь

Вот простой пример:

 Public Function cerial(d As Date) Dim bry(1 To 20, 1 To 1) As String For i = 1 To 20 bry(i, 1) = CStr(d) & "_" & i Next i cerial = bry End Function 

Он создает массив из 20 элементов.

Есть крошечный трюк, чтобы использовать его на листе.

Выберите, скажем, E1- E20 . Затем нажмите на панели формул и введите формулу массива:

 =cerial(TODAY()) 

введите описание изображения здесь

Формулы массива должны вводиться с помощью Ctrl + Shift + Enter, а не только клавиши Enter . Если это будет сделано правильно, формула появится в скобках в строке формул.

ЗАМЕТКА:

В этом примере внутренний массив bry() является двумерным.

  • ОШИБКА! (Использование названных диапазонов Excel от C #)
  • Как скрыть строки в Excel?
  • C # VSTO Excel надстройка исключение 0x8002801D из потока
  • Вставить типы Interop в false, что не работает
  • лист фильтра
  • Как я могу авторизовать столбец, который объединил ячейки?
  • Проверьте превосходство 2010 года
  • VSTO Запуск EXCEL в коде ADDIN NOT LOADED
  • Создать файл Excel программно на C # без Microsoft.Office.Interop.Excel
  • необработанное исключение типа «System.InvalidCastException»
  • Как заполнить цвет в ячейках A1: A5 и B1: B5 и C1: C5 с тем же цветом с использованием C #?
  • Interesting Posts

    Excel Условное форматирование на основе 4 ячеек?

    Есть ли способ добавить более одной гиперссылки в ячейку excel в vb.net?

    Поиск нескольких значений в двух строках на нескольких столбцах Excel

    Открыть файл из Outlook в Excel и сохранить в другом формате в зависимости от отправителя

    читать, писать и обслуживать измененный файл xlxs, используя EPPLUS c #

    Не удается загрузить файл конфигурации с помощью макроса администратора Excel.

    Excelc вычисляет значение, основанное на выборе списка выпадающего списка

    Я хочу иметь возможность выполнять поиск по нескольким столбцам, используя только именованный диапазон в качестве ссылки

    Остановка экспорта Excel в pdf

    Рабочий лист и код неправильно связаны

    Excel VBA Userform, обновить и удалить базу данных,

    Как использовать цветовую шкалу для всего столбца в xlsxwriter

    Быстрый способ загрузки таблицы Excel

    Работа с результатом поиска VBA в Excel

    VBA (Microsoft Excel) заменяет Array на String

    Давайте будем гением компьютера.