Могу ли я создать формулы Excel для моей надстройки, чтобы передавать значения в надстройку для работы?

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

На данный момент у меня есть решение VBA, которое зацикливается на ячейках, загружая или загружая найденные значения.

Это серьезно подвержено ошибкам, и количество кода проверки растет и растет.

Я хотел бы создать формулу надстройки, которая берет ячейку символа и ячейку даты/времени и отображает точку данных из временного ряда, что-то вроде этого с символом в B2 и датой/временем в столбце А:

=getDataPoint(B2, A7)
=getDataPoint(B2, A8)
=getDataPoint(B2, A9)
=getDataPoint(B2, A10)

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

В идеале это будет заполнять ячейку при открытии электронной таблицы или при нажатии кнопки.

Что я использую для реализации этого, предполагая, что это возможно, а также стремясь к быстрому времени обработки?

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

=getDataPoint(B2, A7)
=getDataPoint(B2, A8)
=getDataPoint(B2, A9)
=getDataPoint(B2, A10)

а затем во вторник кто-то еще обновил временной ряд на сервере данными за вторник, поэтому я извлекаю его, вижу дополнительное значение и хочу автоматически расширить диапазон следующим образом (где дата/время указаны в столбце A):

=getDataPoint(B2, A7)
=getDataPoint(B2, A8)
=getDataPoint(B2, A9)
=getDataPoint(B2, A10)
=getDataPoint(B2, A11)

Мой опыт работы с VBA говорит мне, что Excel это не понравится, но я полагаю, что недостаточно хорошо знаю парадигму надстроек Excel.


person Adam    schedule 27.06.2017    source источник


Ответы (1)


Я не совсем уверен, что это то, что вы ищете, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

После определения функции getDataPoint(Range, Range) в книге Excel добавьте необходимые ссылки (если есть) и сохраните файл как надстройку Excel (.xlam). Не забудьте назвать проект в свойствах VBE, так как это имя понадобится вам для добавления ссылки на него позже. По умолчанию для всех проектов используется VBAProject, поэтому при добавлении ссылок их сложно отличить.

Создав надстройку, добавьте ее в книгу через Параметры >> Надстройки >> Надстройки Excel. Добавьте также ссылку на свой проект через Инструменты >> Ссылки в редакторе VBA.

Теперь вашу функцию можно вызывать как любую из встроенных функций: =getDataPoint(B2, A7).

К вашему сведению, вы можете получить диапазон вызовов в своей функции через свойство Application.Caller.

Примечание:

Я использую Excel 2010, поэтому меню параметров может немного отличаться от вашего.

Надеюсь это поможет.

person Kostas K.    schedule 27.06.2017
comment
Да, я в значительной степени это уже знал, и я спрашиваю, могут ли все эти вызовы функций работать с одними и теми же данными, с которыми надстройка также может работать с помощью событий кнопок, которые я поместил на ленту надстройки. - person Adam; 29.06.2017
comment
Так и думал. :) В двух словах, да, может. Надстройка содержит функции, которые выполняют всю работу — вам нужно только передать аргументы и ожидать возвращаемый результат, как и любые встроенные функции. Что касается кнопки ленты, я предполагаю, что кнопка будет указывать на Sub в стандартном модуле рабочей книги, который, в свою очередь, будет указывать на функцию в надстройке после добавления ссылки на надстройку. - person Kostas K.; 29.06.2017
comment
Я хочу, чтобы кнопка, кнопка Sub и все функции были в надстройке, чтобы ее можно было установить одним нажатием и не требовалось никакого кодирования в электронных таблицах, с которыми она используется. Идея, которую я пытаюсь донести, заключается в том, что надстройка получает временные ряды с сервера при нажатии кнопки, а затем данные с сервера отображаются в электронной таблице с помощью функций, отображающих биты временных рядов, которые владелец электронной таблицы, указанный при входе в функции. - person Adam; 30.06.2017