Я попытаюсь сгруппировать / противопоставить некоторые элементы, которые вы упомянули:
VSTO против VBA :
VBA (Visual Basic для приложений) - это «классический» способ написания автоматизации Office. Excel имеет интерфейс разработки, который вы можете запускать из офиса для написания макросов и пользовательских функций, и который не менялся в течение 10 лет. С другой стороны, развертывание тривиально, и VBA предлагает такие замечательные функции, как запись макросов, которые записывают ваши действия в код и предоставляют хороший способ выяснить объектную модель.
VSTO появился совсем недавно и позволяет автоматизировать офис с помощью .NET (использует COM). Вы можете использовать все .NET и Visual Studio (например, добавить формы WPF), что дает большую гибкость, но развертывание является более сложным.
UDF против макроса и надстройки
Пользовательские функции - это пользовательские методы, которые останутся привязанными к вашей книге; после добавления получите тот же статус, что и у «встроенных» функций Excel: их можно вызывать из рабочих таблиц, таких как = MyFunction ()
Макросы - это процедуры, которые будут привязаны к вашей книге. Они могут быть вызваны непосредственно пользователем или прикреплены к событиям (например, когда выбран рабочий лист, сделайте это).
Надстройки прикрепляются не к конкретному документу, а к самому приложению. Обычно к книге прикрепляется макрос или UDF: когда вы открываете документ, вам становится доступен код, а когда вы даете документ, код также копируется. В отличие от этого, надстройки прикрепляются к приложению: когда вы запускаете Excel, надстройка становится доступной для вас. Такие инструменты, как Солвер, являются надстройкой. Обратите внимание, что надстройки могут быть написаны либо на VBA, либо с использованием VSTO (вы также можете писать UDF в .NET, но это нетипично).
Когда использовать что
Надстройка против макросов / пользовательских функций: напишите надстройку, если ваша функциональность должна быть доступна из любой книги.
VSTO или нет VSTO: это вопрос дискуссии. Большинству людей, знакомых с «классической» автоматизацией VBA, не очень нравится VSTO, потому что кривая обучения немного крутая. Если вы привыкли работать с .Net, это не должно быть проблемой, но VSTO несколько необычен по сравнению с «нормальной» разработкой приложений .Net.
Также обратите внимание, что если вы используете VSTO, ваш код не может быть отредактирован пользователем. Это возможно желательно, но в то же время опытные пользователи Excel обычно знают, как использовать VBA и макросы, и ожидают, что смогут настроить код. Это может привести к интересным дискуссиям.
Лично я обычно использую VSTO для надстроек, и я использую его, как только я вижу, что много логического / процедурного кода входит в макросы в VBA. Что дает мне VSTO - это возможность писать тестируемый код в Visual Studio, а также высокопроизводительный код, когда требуются большие вычисления. Другая причина использовать VSTO - использовать WPF для настройки офиса.