次の方法で共有


方法 : アドインを使用してマクロを制御する

更新 : 2007 年 11 月

Visual Studio オートメーション モデルの Macros オブジェクトにより、統合開発環境 (IDE: Integrated Development Environment) で記録中のマクロをプログラムで制御できます。Macros オブジェクトを使用すると、次の操作を行うことができます。

  • マクロ レコーダーを一時停止または再開します。

  • 記録中のマクロに 1 行以上のコードを追加します。

  • マクロ レコーダーが現在マクロを記録しているかどうかを確認します。

また、ExecuteCommand メソッドを使用して、新規ファイルの作成など、IDE に対して直接コマンドを実行することもできます。

1xw5w769.alert_note(ja-jp,VS.90).gifメモ :

Macros オブジェクトのメンバは、マクロ内で使用するようにデザインされていないため、アドイン内でのみ使用する必要があります。

次の Visual Basic の例は、Macros オートメーション モデルのさまざまなメンバを参照および使用する方法を示しています。

1xw5w769.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

使用例

マクロが現在記録中であるかどうかをチェックする例を次に示します。マクロが記録中である場合、1 行のコードがマクロに追加されます。

Public Sub OnConnection(ByVal application As Object, _
  ByVal connectMode As ext_ConnectMode, ByVal addInInst _
  As Object, ByRef custom As Array) Implements _
  IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    macroTest(_applicationObject)
End Sub

Public Sub macroTest(ByVal dte As DTE2)
    Try
        Dim objMac As Macros = dte.Macros
        ' Determine if a macro is recording. If it is, 
        ' add a line of code to it and then let it resume 
        ' recording.
        If objMac.IsRecording = True Then
            objMac.EmitMacroCode _
              ("MsgBox(""This was added by code."")")
        Else
            MsgBox("Macro is not recording.")
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub
public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    macroTest(_applicationObject);
}

public void macroTest(DTE2 dte)
{
    try
    {
        Macros objMac = dte.Macros;
        // Determine if a macro is recording. If it is, 
        // add a line of code to it and then let it resume 
        // recording.
        if (objMac.IsRecording == true)
        {
            objMac.EmitMacroCode("MsgBox(\"This was added by 
              code.\")");
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("Macro is not 
              recording.");
        }
    }
    catch (Exception ex)
    {
        System.Windows.Forms.MessageBox.Show(ex.Message);
    }
}

マクロを記録して、テキスト ファイルを開いた場合、マクロ コードは次のようになります。

Public Module RecordingModule
    Sub TemporaryMacro()
        DTE.ItemOperations.NewFile("General\Text File")
    End Sub
End Module

このプログラム例を実行し、同じ操作を行うと、マクロ コードにコードが 1 行出力 (追加) されます。

Public Module RecordingModule
    Sub TemporaryMacro()
        DTE.ItemOperations.NewFile("General\Text File")
        MsgBox("This line was added by code.")
    End Sub
End Module

参照

処理手順

方法 : ウィンドウの特性を変更する

方法 : アドインを作成する

チュートリアル : ウィザードの作成

概念

マクロの使用による反復操作の自動化

オートメーション オブジェクト モデルの階層図

その他の技術情報

環境ウィンドウの作成と制御

アドインおよびウィザードの作成

オートメーションと機能拡張のリファレンス