Почему Microsoft по-прежнему поставляет VBA в продуктах Office вместо непосредственной интеграции .NET? [закрыто]


12

Я знаю, что можно вызывать код .NET из вашего кода VBA, но почему VBA продолжает существовать? Единственная причина, по которой я могу думать, это наследие.

Я просто должен был отсортировать, Scripting.Dictionaryи объем необходимого кода был пугающим.

Среда выглядит как Visual Studio 2003. И есть много мелких деталей, которые сводят вас с ума (например, изменение строки и предупреждение из-за какой-то ошибки компиляции). Или, если вы открываете более одной электронной таблицы, она смешивается с вами «VBAProject», и это действительно сбивает с толку.

Целое разделение модуля / класса-модуля / формы на самом деле не так уж и плохо, но каждый раз я заканчиваю тем, что напрямую пишу логику в формах, или с одним огромным модулем, который обрабатывает все.

Почему я не могу нажать Alt + F11 и взломать в C #?


11
«Единственная причина, по которой я могу думать, это наследие». А тебе этого мало?
Эйфорическая

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

2
@Kiril Скорее всего, это не "мы всегда так делали"; вероятно, «мы сравнили, сколько мы выиграем от нарушения обратной совместимости с тем, сколько мы потеряем, и обнаружили, что это того не стоит».
Доваль

1
@Kiril - ваш вопрос просит отправить Office с .NET "вместо" VBA. Это потребовало бы отказаться от этого.
JeffO

3
@Kiril: многие очень изворотливые персонажи также были бы очень рады вставить dll в документы, но не в вашу пользу.
whatsisname

Ответы:


15

В Microsoft Office есть несколько способов, позволяющих программно изменять / улучшать поведение по умолчанию. VBA - это проверенный, проверенный и широко распространенный язык для сценариев in-doc. Многие офисные люди знают VBA и используют его, хотя они не знают более сложных языков программирования, таких как C #. Office не будет продаваться так много, если клиентам придется переписывать множество старых документов с поддержкой макросов, которые решают важные для бизнеса задачи - после того, как они выучат новый язык или что-то еще. Обратная совместимость является ключевой особенностью!

Полный стек .NET для Office, вероятно, требует некоторого набора управления зависимостями (dll: s и т. Д.), И его легко справиться с простыми задачами - вряд ли это альтернатива легким сценариям. VSTO дает вам возможность работать с C #, но за счет более тяжелого цикла разработки плагинов.

Менеджер программы в Microsoft написал об этом здесь . Понятно, что VBA есть и будет для небольших сценариев.


Объяснение в статье очень хорошее. Благодарю.
Кирилл

6
Как бывший сотрудник, я могу добавить, что некоторые клиенты платят большие деньги за то, чтобы Gates / Ballmer / Nadella и т. Д. Были доступны на Speed-dial, а также в обычных чатах, и что VBA считается достаточно критичным, чтобы любые изменения, нарушающие поведение VBA (особенно в Excel) и даже между версиями) привлекают внимание ИСКЛЮЧИТЕЛЬНО быстро. Кроме того, это отнюдь не только для неквалифицированных; есть армия профессиональных разработчиков, использующих это. C # довольно часто ищется в VBA как рабочее знание.
Джеймс Снелл

Этот аргумент не помешал MS отказаться от VB6 лет назад в пользу VB.Net, который сломал много кода.
Майк Лоури

3

Ну, ответ не является строго «наследием». Ответ заключается в том, что VBA не является ни VB6, ни VB.Net: это VBA. Отдельный, но родственный язык. Если заменить VBA на VB.Net, это неизбежно нарушит множество ДОКУМЕНТОВ.

Замена VBA на VB.Net почти наверняка приведет к потере данных для значительного числа пользователей их основных продуктов - не очень хорошая вещь.

И их целевой рынок для VBA - не программисты.


7
VBA очень близкий родственник VB6. Единственные существенные различия связаны с API; т.е. VBForms вместо объектных моделей Excel или Word. В отсутствие этих различий вы можете копировать / вставлять код VBA в VB6 (или наоборот), и он все равно будет работать 99 процентов времени.
Роберт Харви

3
Поддержка VBA и VB.Net/C# не должна быть взаимоисключающей.
Джоэл Коухорн

2

Если вы считаете, что основная причина, по которой люди покупают Office, заключается в том, чтобы поддерживать совместимость со всеми существующими документами, многие из которых содержат макросы и VBA, было бы очень смело обращаться с этими пользователями, как с толпой VB6, и говорить им: Смиритесь с этим и начните писать код в .NET, просто посмотрите на запрос # 1 uservoice !

Я полагаю, что ребята из LibreOffice впали бы в бессознательное состояние!

VBA для производительности в Office, а не "программирования". День, когда вам нужно больше энергии для ваших документов, - это день, когда вы нанимаете программиста, чтобы все переписать. Я предполагаю, что другая причина в том, что макросы Visual Studios также не являются .NET - представьте, что COM-объект devenv4 не сильно отличается от VBA.


Он не просит их угробить VBA. Он просит их иметь .Net в качестве дополнительной опции.
Джоэл Коухорн

1

Я думаю, что есть небольшая, но важная разница между наследием и популярностью . И когда вы заключили столько контрактов, сколько у меня, вы узнаете, что VBA безумно популярен :) Я не могу сказать вам, сколько контрактов я заключил для "жокеев Excel", которые ничего не знают о программировании, но может сокрушить VBA, как будто это вопрос жизни или смерти.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.