Запуск макроса Excel через C #: запускать макрос из одной книги в другой?

Я хочу запустить макрос, пустьНазовите это Macro01 из WorkSheet01 на WorkSheet02.

С помощьюПространство имен Microsoft.Office.Interop.Excel Я открыл 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);
    }

Затем я использую автоматический скрипт, чтобы получить отчет. Этот отчет открывается через IES скачать приглашение, а не Interop.

Проблема возникает, когда я пытаюсь запустить макрос через C # (я создал еще один новый Excel.ApplicationClass (); только так он скомпилирован, я считаю, что это один из моих ошибок.)

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);
    }

Когда этот метод запускается, он запускает макрос из Worksheet01 на Worksheet01 вместо Worksheet02. Также он искал лист в «Мои документы», поэтому я переместил его, чтобы посмотреть, что произойдет.

Резюме:

Открыть Рабочий лист01С помощью скриптов получить и открыть отчет (Worksheet02) из MSIEЗапустите Macro01 из Worksheet01 на Worksheet02

Ресурсы:

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

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

Для тех, кто хотел бы попробовать это, добавьте это в ваши директивы using:

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"

Ответы на вопрос(2)

Ваш ответ на вопрос