stringtranslate.com

Visual Basic для приложений

Visual Basic for Applications ( VBA ) — это реализация событийно-управляемого языка программирования Visual Basic 6.0 от Microsoft , встроенная в большинство настольных приложений Microsoft Office . Хотя она основана на Visual Basic до .NET, который больше не поддерживается и не обновляется корпорацией Microsoft (за исключением поддержки Microsoft «It Just Works», которая действует в течение всего срока службы поддерживаемых версий Windows, включая Windows 10 и Windows 11), реализация VBA в Office продолжает обновляться для поддержки новых функций Office. [1] [2] VBA используется для профессиональной и пользовательской разработки из-за его воспринимаемой простоты использования, обширной установленной пользовательской базы Office и обширного наследия в бизнесе.

Visual Basic for Applications позволяет создавать пользовательские функции (UDF), автоматизировать процессы и получать доступ к Windows API и другим низкоуровневым функциям через динамически подключаемые библиотеки (DLL). Он заменяет и расширяет возможности более ранних макроязыков программирования, ориентированных на приложения, таких как WordBASIC от Word . Его можно использовать для управления многими аспектами хост-приложения, включая управление функциями пользовательского интерфейса, такими как меню и панели инструментов, а также работу с пользовательскими формами или диалоговыми окнами.

Как следует из названия, VBA тесно связан с Visual Basic и использует Visual Basic Runtime Library. Однако код VBA обычно может выполняться только в хост-приложении, а не как отдельная программа . Однако VBA может управлять одним приложением из другого с помощью OLE Automation . Например, VBA может автоматически создавать отчет Microsoft Word из данных Microsoft Excel , которые Excel автоматически собирает с опрашиваемых датчиков. VBA может использовать, но не создавать, библиотеки ActiveX/COM DLL, а в более поздних версиях добавлена ​​поддержка модулей классов.

VBA встроен в большинство приложений Microsoft Office , включая Office для Mac OS X (кроме версии 2008) и другие приложения Microsoft, включая Microsoft MapPoint и Microsoft Visio . VBA также реализован, по крайней мере частично, в приложениях, опубликованных компаниями, отличными от Microsoft, включая ArcGIS , AutoCAD , Collabora Online , CorelDraw , Kingsoft Office , LibreOffice , [3] SolidWorks , [4] WordPerfect и UNICOM System Architect (который поддерживает VBA 7.1).

Дизайн

Код, написанный на VBA, компилируется [5] в Microsoft P-Code (псевдокод), фирменный промежуточный язык , который хост-приложения ( Access , Excel , Word , Outlook и PowerPoint ) хранят как отдельный поток в файлах структурированного хранилища COM (например, .docили .xls) независимо от потоков документов. Затем промежуточный код выполняется [5] виртуальной машиной ( размещенной хост-приложением). Совместимость заканчивается на Visual Basic версии 6; VBA несовместим с Visual Basic .NET (VB.NET). VBA является фирменным языком Microsoft и, за исключением интерфейса COM, не является открытым стандартом .

Автоматизация

Взаимодействие с хост-приложением использует OLE Automation . Обычно хост-приложение предоставляет библиотеку типов и документацию по интерфейсу прикладного программирования (API), которые документируют, как программы VBA могут взаимодействовать с приложением. Эту документацию можно изучить изнутри среды разработки VBA с помощью его Object Browser.

Программы Visual Basic for Applications, написанные для использования интерфейса OLE Automation одного приложения, не могут использоваться для автоматизации другого приложения, даже если это приложение размещает среду выполнения Visual Basic, поскольку интерфейсы OLE Automation будут отличаться. Например, программа VBA, написанная для автоматизации Microsoft Word, не может использоваться с другим текстовым процессором, даже если этот текстовый процессор размещает VBA.

И наоборот, несколько приложений могут быть автоматизированы с одного хоста путем создания объектов Application в коде VBA. Ссылки на различные библиотеки должны быть созданы в клиенте VBA до того, как какие-либо методы, объекты и т. д. станут доступны для использования в приложении. Это достигается с помощью того, что называется ранним или поздним связыванием. Эти объекты приложения создают ссылку OLE на приложение при их первом создании. Команды для различных приложений должны выполняться явно через эти объекты приложения для корректной работы.

Например, код VBA, написанный в Microsoft Access, может устанавливать ссылки на библиотеки Excel, Word и Outlook; это позволяет создать приложение, которое, например, выполняет запрос в Access, экспортирует результаты в Excel и анализирует их, а затем форматирует вывод в виде таблиц в документе Word или отправляет их в виде электронного письма Outlook.

Программы VBA можно прикрепить к кнопке меню, макросу , сочетанию клавиш или событию OLE/COM, такому как открытие документа в приложении. Язык предоставляет пользовательский интерфейс в виде UserForms, который может размещать элементы управления ActiveX для дополнительной функциональности.

Автоматизация межпроцессного взаимодействия включает в себя динамический обмен данными (DDE) и RealTimeData (RTD), что позволяет вызывать сервер автоматизации Component Object Model (COM) для динамических или реальных финансовых или научных данных. [6]

Проблемы безопасности

Как и в случае с любым распространенным языком программирования, макросы VBA могут быть созданы со злым умыслом. При использовании VBA большинство функций безопасности находятся в руках пользователя, а не автора. Параметры хост-приложения VBA доступны пользователю. Пользователь, запускающий любой документ, содержащий макросы VBA, может предварительно настроить программное обеспечение с помощью пользовательских настроек. Конечные пользователи могут защитить себя от атаки, отключив запуск макросов в приложении или предоставив документу разрешение на запуск кода VBA, только если они уверены, что источнику документа можно доверять.

В феврале 2022 года компания Microsoft объявила о своих планах по блокировке макросов VBA в файлах, загружаемых из Интернета, по умолчанию в различных приложениях Office из-за их широкого использования для распространения вредоносного ПО. [7]

История версий

Разработка

С 1 июля 2007 года Microsoft больше не предлагает лицензии на распространение VBA новым клиентам. Microsoft намеревалась добавить языки на основе .NET в текущую версию VBA с момента выпуска .NET Framework , [8] версии которого 1.0 и 1.1 включали технологию выполнения скриптов под названием Script для .NET Framework . [9] Visual Studio .NET 2002 и 2003 SDK содержали отдельную IDE для скриптов под названием Visual Studio for Applications (VSA), которая поддерживала VB.NET. [10] [11] [12] Одной из его важных особенностей было то, что интерфейсы к технологии были доступны через Active Scripting ( VBScript и JScript ), что позволяло даже приложениям, не поддерживающим .NET, писать скрипты с помощью языков .NET. Однако VSA был объявлен устаревшим в версии 2.0 .NET Framework [12] , что не оставило четкого пути обновления для приложений, которым требуется поддержка Active Scripting (хотя «скрипты» могут быть созданы на C# , VBScript и других языках .NET, которые могут быть скомпилированы и выполнены во время выполнения с помощью библиотек , установленных как часть стандартной среды выполнения .NET).

Microsoft прекратила поддержку VBA в Microsoft Office 2008 для Mac . [13] [14] VBA был восстановлен в Microsoft Office для Mac 2011. Microsoft заявила, что не планирует удалять VBA из версии Office для Windows. [15] [16]

С Office 2010 Microsoft представила VBA7, который содержит настоящий тип данных указателя: LongPtr. Это позволяет ссылаться на 64-битное адресное пространство. 64-битная установка Office 2010 не поддерживает общие элементы управления MSComCtl (TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListViews, ImageList, Slider, ImageComboBox) или MSComCt2 (Animation, UpDown, MonthView, DateTimePicker, FlatScrollBar), поэтому устаревший 32-битный код, перенесенный в 64-битный код VBA, который зависит от этих общих элементов управления, не будет работать. Это не повлияло на 32-битную версию Office 2010. [17] В конечном итоге Microsoft выпустила 64-битную версию MSComCtl с обновлением Office 2016 от 27 июля 2017 года. [18]

Смотрите также

Ссылки

  1. ^ «Совместимость 32-разрядной и 64-разрядной версий Office 2010». msdn.microsoft.com .
  2. ^ o365devx. "Что нового для VBA в Office 2019". docs.microsoft.com . Получено 2022-05-02 .{{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  3. ^ "Поддержка макросов VBA". The Document Foundation - LibreOffice . Получено 3 января 2023 г. .
  4. ^ "Справка SolidWorks 2016 – VBA". help.solidworks.com . Получено 25.07.2016 .
  5. ^ ab "ACC: Visual/Access Basic — это одновременно компилятор и интерпретатор". Microsoft. 2012. Архивировано из оригинала 21.10.2012.
  6. ^ «Как настроить и использовать функцию RTD в Excel». msdn.microsoft.com .
  7. ^ "Microsoft по умолчанию блокирует макросы Office VBA". The Verge . Получено 2022-09-26 .
  8. ^ "Visual Studio for Applications". Архивировано из оригинала 2007-12-17.
  9. ^ «Введение в Visual Studio для приложений». msdn.microsoft.com .
  10. ^ "Скрипт происходит .NET". msdn.microsoft.com .
  11. ^ "Microsoft раскрывает технологию разработки VSA". Архивировано из оригинала 2007-12-17.
  12. ^ ab "Скрипты VSA в .NET". Архивировано из оригинала 2007-02-11.
  13. ^ "WWDC: Microsoft обновляет универсальный статус приложений Mac". Macworld . 2006-08-07 . Получено 2007-05-25 .
  14. ^ «Что такое Microsoft Office и Office 365 – часто задаваемые вопросы».
  15. ^ «Слухи о крахе VBA сильно преувеличены».
  16. ^ "Разъяснение по поддержке VBA". Архивировано из оригинала 2008-04-11.
  17. ^ «Совместимость 32-разрядной и 64-разрядной версий Office 2010». msdn.microsoft.com .
  18. ^ "Заметки о выпуске для выпусков Monthly Channel в 2017 году". learn.microsoft.com . Получено 2022-11-13 .