Macro Explorer— это центральный инструмент интегрированной среды для управления макросами. Макросы организованы в проекты и модули. Например, созданный вами только что временный макрос виден в проекте MyMacros под модулем с именем RecordingModule и называется TemporaryMacro.
Если вы решили сохранить временный макрос, то Visual Studio автоматически переведет узел TemporaryMacro в режим редактирования (название будет выделено). Это подсказка для того, чтобы вы врели имя для макроса. Нажатие клавиши <Enter> зафиксирует изменение имени и сохранит макрос на диск. Если вы не измените имя, то макрос сохранен не будет.
При помощи Macro Explorer вы можете переименовывать или удалять макросы и выполнять их.
Для запуска макроса надо просто дважды щелкнуть его по узлу в Macro Explorer. Это приведет к автоматическому выполнению кода макроса. Во время выполнения макроса вы видите анимированный значок и сообщение в строке состояния Visual Studio (рис. 12.2).
Совет
Макросы не имеют никакого встроенного (или "по умолчанию") механизма уведомлений, который мог бы сообщить вам о завершении макроса или о его ошибках. Если вы хотите отслеживать ход работы макроса, то вам нужно соответствующим образом изменить свой' макрос, чтобы он выдавал сообщения в окно вывода (при помощи окон сообщений или другими способами).
Для того чтобы увидеть код (реализующий макрос) на языке Visual Basic, вам нужно щелкнуть правой кнопкой мыши по макросу в окне Macro Explorer и выбрать пункт Edit. Это приведет к запуску интегрированной среды Macro. Вы можете также запустить эту интегрированную среду при помощи выбора Tools | Macros | Macros IDE (или нажатием комбинации клавиш <Ctrl>+<Fl 1>). Код, который был сгенерирован нашей предыдущей попыткой записи, показан в листинге 12.1. Команды удаления или переименования макроса, макромодуля или проекта макроса также находятся в контекстном меню в Macro Explorer.
Option Strict Off Option Explicit Off Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports System.Diagnostics
Public Module RecordingModule Sub TemporaryMacro()
DTE.ActiveWindow.Object.GetItem
("ContosoCommonFramework\ArchitectureModels") .UIHierarchyItems .Expanded = True DTE.ActiveWindow.Obj ect.GetItem _
("ContosoCommonFramework\Class Libraries") .UIHierarchyItems .Expanded = True DTE.ActiveWindow.Obj ect.Getltem _
("ContosoCommonFramework\ClassLibraries\Contoso.Fx.Analysis\Properties"). _
UIHierarchyIterns.Expanded = True DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\ClassLibraries\Contoso.Fx.Analysis\References"). _ UIHierarchyltems.Expanded = True DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\ClassLibraries\Contoso.Fx.Common\Properties"). _ UIHierarchyltems.Expanded = True DTE.ActiveWindow.Obj ect.Getltem _
("ContosoCommonFramework\ClassLibraries\Contoso.Fx.Common\References"). _ UIHierarchyltems.Expanded = True DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\ClassLibraries\Contoso.Fx.Integration\Properties"). _ UIHierarchyltems.Expanded = True DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\ClassLibraries\Contoso.Fx.Integration\References"). _ UIHierarchyltems.Expanded = True DTE.ActiveWindow.Obj ect.Getltem _
("ContosoCommonFramework\Consoles\AdminConsole") . _
UIHierarchyItems.Expanded = True
DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\Consoles\HelloWorld"). _
UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\Consoles").UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Obj ect.GetItem _
("ContosoCommonFramework\Consoles\AdminConsole\Properties"). _
UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\Consoles\AdIninConsole\References,,) . _
UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\Consoles\HelloWorld\Properties") . _
UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Object.Getltem _
("ContpsoCommonFramework\Consoles\HelloWorld\References") . _
UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Obj ect.Getltem _
("ContosoCommonFramework\Consoles\HelloWorld\XMLSchemal.xsd"). _
UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\Forms") .UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Obj ect.GetItem _
("ContosoCommonFramework\Forms\Contoso.UI.WindowsForms.TestHost\Properties") . _
UIHierarchyltems.Expanded = True
DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\Forms\Contoso.UI. WindowsForms .TestHost\References") . _
UIHierarchyltems.Expanded = True
i
DTE.ActiveWindow.Object.Getltem _
("ContosoCommonFramework\Forms\Contoso.UI. WindowsForms .TestHost\Forml. j si") . _ UIHierarchyltems.Expanded = True DTE.ActiveWindow.Obj ect.Getltem _
("ContosoCommonFramework\C: \. . . \PortalSite\") . UIHierarchyltems . Expanded = True End Sub End Module
Создание макроса при помощи интегрированной среды Macro
Интегрированная среда Macro (рис. 12.3) является по существу специализированной версией Visual Studio (избавленной от излишеств и упрощенной), предназначенной для разработки макросов.
Вы сразу же заметите, что это фактически пользовательский интерфейс Visual Studio, с которым вы уже привыкли к настоящему моменту работать. Все ведет себя точно так же: окна инструментов можно стыковать, они могут плавать, их можно прикреплять и т. д. Окно редактора кода (которое вы используете для редактирования вашего макрокода) точно так же работает с IntelliSense, структурированием и всеми прочими средствами повышения производительности, к которым вы уже привыкли. Несмотря на то, что интегрированная среда Macro ведет себя аналогично полномасштабной среде Visual Studio, имеются и отличия. Например, в ней поддерживаются не все окна инструментов и документов, имеющиеся в полной интегрированной среде. Языковая поддержка в редакторе кода ограничена исключительно Visual Basic (поскольку это единственный поддерживаемый макроязык), и вы не можете конструировать здесь формы или другие подобные элементы.