マクロ プロジェクトのオブジェクト モデル
Visual Studio には、マクロの記述および記録を行うためのツールが用意されています。 概要については、「マクロの使用による反復操作の自動化」を参照してください。また、Visual Studio には、マクロ プロジェクトを公開するプログラミング可能なオブジェクト モデルも用意されています。 このモデルには、言語に中立的なプロジェクト項目のための汎用拡張オブジェクトと、マクロ固有のオブジェクトの両方が含まれています。 VSLangProj、VSLangProj2、および VSLangProj80 の各名前空間にあるマクロ固有のオブジェクトは、Visual Basic プロジェクトおよび Visual C# プロジェクトの場合と同様に使用されます。 ここでは、以下の内容について説明します。
マクロ プロジェクトの拡張オブジェクトへのアクセス
マクロ プロジェクト、VSProject オブジェクト、および VSProject2 オブジェクト
VSLangProj、VSLangProj2、および VSLangProj80 の各オブジェクトのマクロ固有の要素
VSLangProj、VSLangProj2、および VSLangProj80 の各オブジェクトの詳細については、「プロジェクト機能拡張の概要」を参照してください。 汎用機能拡張の詳細については、「Visual Studio 環境の拡張」を参照してください。
マクロ プロジェクトの拡張オブジェクトへのアクセス
マクロ プロジェクトには、DTE2 機能拡張オブジェクトの MacrosIDE プロパティを使用してアクセスします。 MacrosIDE プロパティは、DTE2 型のオブジェクトを返します。これにより、ソリューション、プロジェクト、ツール ウィンドウ、ドキュメント、イベントなどで構成されるマクロ統合開発環境 (IDE: Integrated Development Environment) にアクセスできるようになります。 マクロ プロジェクト内のすべてのモジュールを一覧表示するマクロを次に示します。
' Macro editor
Public Sub FindMacros()
Dim macroproject As Project
' Retrieve the first project in the Macros IDE.
macroproject = DTE.MacrosIDE.Solution.Projects.Item(1)
' Display the project's name.
MsgBox(macroproject.Name)
' Display each project item (module).
Dim projitem As ProjectItem
For Each projitem In macroproject.ProjectItems
MsgBox(projitem.Name)
Next
End Sub
マクロ プロジェクトと VSLangProj オブジェクト
汎用機能拡張モデルでは、プロジェクトは汎用的な Project オブジェクトによって表されます。 Project オブジェクトには Object プロパティがあります。 マクロ プロジェクトでは、Object プロパティは VSProject 型のオブジェクトを返します。 Object プロパティは Object 型であるため、参照を VSProject 型にキャストする必要があります。 キャストを行う前に、PrjKind 列挙型または PrjKind2 列挙型を使用してプロジェクトの型を調べることもできます。 キャストをマクロで実行する場合は、次のようにマクロを記述できます。
' Macro editor
Public Sub CastToVSProject()
' Retrieve the general extensibility object.
Dim macroproject As Project
macroproject = DTE.MacrosIDE.Solution.Projects.Item(1)
' Cast for the macro specific information.
Dim vsproj As VSLangProj.VSProject
' Can test type of project before cast.
If (macroproject.Kind = VSLangProj.PrjKind.prjKindVSAProject) Then
vsproj = CType(macroproject.Object, VSLangProj.VSProject)
End If
MsgBox(vsproj.Project.Name)
End Sub
VSProject2 オブジェクトは、VSLangProj、VSLangProj2、および VSLangProj80 の各名前空間にあるその他複数のオブジェクトのコンテナーです。このようなオブジェクトには、References、Reference、Imports、および BuildManager が含まれます。
汎用機能拡張モデルでは、プロジェクト項目は汎用の ProjectItem オブジェクトによって表されます。 ProjectItem オブジェクトには Object プロパティがあります。 マクロ プロジェクトでは、Object プロパティは VSProjectItem 型のオブジェクトを返します。 Object プロパティは Object 型であるため、参照を VSProjectItem 型にキャストする必要があります。 キャストをマクロで実行する場合は、次のようにマクロを記述できます。
' Macro editor
Public Sub CastToVSProjectItem()
Dim projitem As ProjectItem
Dim vsitem As VSLangProj.VSProjectItem
For Each projitem In _
DTE.MacrosIDE.Solution.Projects.Item(1).ProjectItems
vsitem = CType(projitem.Object, VSLangProj.VSProjectItem)
MsgBox(vsitem.ProjectItem.Name)
Next
End Sub
VSLangProj オブジェクトのマクロ固有要素
VSLangProj 名前空間、VSLangProj2 名前空間、および VSLangProj80 名前空間のオブジェクトは、Visual Basic プロジェクト、Visual C# プロジェクト、およびマクロ プロジェクトで使用されます。 マクロ プロジェクト固有の列挙値もあります。 PrjKind 列挙型には、マクロ プロジェクト用の値として prjKindVSAProject が用意されています。 PrjBrowseObjectCATID 列挙型には、[プロパティ] ウィンドウの項目を拡張するために次の値があります。
VSLangProj オブジェクトのマクロ固有動作
VSLangProj オブジェクト、VSLangProj2 オブジェクト、および VSLangProj80 オブジェクトの動作は、Visual Basic プロジェクト、Visual C# プロジェクト、およびマクロ プロジェクトの間で少し異なります。 これは、オブジェクトがプロジェクトの種類を正確に表すようにするためです。 このオブジェクトのプロパティとメソッドには、次に示すように、マクロ プロジェクトをサポートしないものが多数あります。
VSProject このオブジェクトは、プロジェクトのマクロ固有の詳細を表します。
BuildManager - このプロパティはサポートされていません。このプロパティにアクセスすると、例外がスローされます。
CopyProject - このメソッドはサポートされていません。このメソッドを呼び出すと、例外がスローされます。
WorkOffline - このプロパティは常に False を返します。 このプロパティを設定しようとしても例外はスローされませんが、True には設定できません。
VSProjectItem このオブジェクトは、プロジェクト項目のマクロ固有の詳細を表します。
- RunCustomTool - このメソッドはサポートされていません。このメソッドを呼び出すと、例外がスローされます。
ProjectProperties3 これらのプロパティでは、Visual Basic プロジェクト、Visual C# プロジェクト、およびマクロ プロジェクトを定義します。 サポートされていないプロパティを次に示します。
|
FileProperties2 これらのプロパティでは、Visual Basic プロジェクト項目、Visual C# プロジェクト項目、およびマクロ プロジェクト項目を定義します。 次のファイル プロパティはサポートされていません。これらのプロパティにアクセスすると、エラーが発生します。
次の FolderProperties2 はサポートされていません。これらのプロパティにアクセスすると、エラーが発生します。
|
ProjectConfigurationProperties3 これらのプロパティでは、Visual Basic 配置構成、Visual C# 配置構成、およびマクロ配置構成を定義します。 次のファイル プロパティはサポートされていません。これらのプロパティにアクセスすると、エラーが発生します。
Reference3 このオブジェクトは、1 つのプロジェクトの参照を表します。 次のプロパティはサポートされていません。このプロパティにアクセスすると例外がスローされます。
References このオブジェクトは、マクロ プロジェクト内のすべての参照のコレクションを表します。 次のメソッドはサポートされていません。これらのメソッドのいずれかを呼び出すと、例外がスローされます。