マクロを実行しようとしています。WorkSheet02 の WorkSheet01 から Macro01 と呼びましょう。
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);
}
次に、自動化されたスクリプトを使用してレポートを取得します。このレポートは、Interop ではなく、IE のダウンロード プロンプトから開きます。
問題は、C# 経由でマクロを実行しようとしたときに発生します (別の新しい Excel.ApplicationClass(); を作成したため、コンパイルしただけです。これは私の失敗の 1 つだと思います。)
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);
}
このメソッドを実行すると、Worksheet02 ではなく Worksheet01 で Worksheet01 のマクロが実行されます。また、My Documents でワークシートを探していたので、移動して何が起こるかを確認しました。
要約:
- Worksheet01 を開く
- スクリプトを使用して、MSIE からレポート (Worksheet02) を取得して開きます
- Worksheet02 で Worksheet01 から Macro01 を実行する
資力:
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"