Ejecutar una macro de Excel a través de C #: ¿Ejecutar una macro de un libro en otro?

Estoy buscando ejecutar una macro, llamémosla Macro01 de WorkSheet01 en WorkSheet02.

UtilizandoEspacio de nombres Microsoft.Office.Interop.Excel He abierto un WorkSheet01.

public void Main_CodedStep()
    {
        // Object for missing (or optional) arguments.
        object oMissing = System.Reflection.Missing.Value;

        // Create an instance of Microsoft Excel
        Excel.ApplicationClass oExcel = new Excel.ApplicationClass();

        // Make it visible
        oExcel.Visible = true;

        // Open Worksheet01.xlsm
        Excel.Workbooks oBooks = oExcel.Workbooks;
        Excel._Workbook oBook = null;
        oBook = oBooks.Open("C:\\Users\\Admin\\Documents\\Worksheet01.xlsm", oMissing, oMissing,
            oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, 
            oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
    }

Luego uso un script automatizado para extraer un informe. Este informe se abre a través de la solicitud de descarga de IE y no a través de Interop.

El problema surge cuando trato de ejecutar la macro a través de C # (realicé otro Excel.ApplicationClass (); solo así se compiló, creo que este es uno de mis errores).

public void FirstMacro_CodedStep()
    {
        // Create an instance of Microsoft Excel
        Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
        Console.WriteLine("ApplicationClass: " + oExcel);

        // Run the macro, "First_Macro"
        RunMacro(oExcel, new Object[]{"Worksheet01.xlsm!First_Macro"});

        //Garbage collection
        GC.Collect();
    }

    private void RunMacro(object oApp, object[] oRunArgs)
    {
        oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs);
    }

Cuando este método se ejecuta, ejecuta la macro de la Hoja de trabajo01 en la Hoja de trabajo01 en lugar de la Hoja de trabajo02. También estaba buscando la hoja de trabajo en Mis documentos, así que la moví para ver qué pasaba.

Resumen:

Abrir hoja de trabajo01A través de secuencias de comandos, obtenga y abra un informe (Hoja de trabajo02) de MSIEEjecute Macro01 desde la hoja de trabajo01 en la hoja de trabajo02

Recursos:

http://support.microsoft.com/kb/306683

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.aspx

Para aquellos que quieran probarlo, agregue esto a sus directivas de uso:

using System.Reflection;
using Microsoft.Office.Core; //Added to Project Settings' References from C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14 - "office"
using Excel = Microsoft.Office.Interop.Excel; //Added to Project Settings' References from C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14 - "Microsoft.Office.Interop.Excel"

Respuestas a la pregunta(2)

Su respuesta a la pregunta