

ExcelのVBAをC#で実行しようと考えています。  
現状、ExcelからボタンクリックでVBAを実行すると1時間かかる処理が、C#側から「Microsoft.Office.Interop.Excel」を使って

`xlApp.Run("Sheet1.Btn_Calc_Click");`

で同じマクロを実行すると3時間かかってしまします。

Interop.ExcelでExcel処理を行うと遅いというのは聞きますが、Excel側のマクロ実行にも影響するものでしょうか。

原因や、処理速度の短縮方法がありましたらご教授ください。


CC BY-SA 4.0
2018-12-07T01:16:59.970
50987
2023-08-03T01:04:20.523
19580
question
c# vba excel
C#からのExcelVBA実行と、ExcelからVBAを直接実行した場合の処理時間について


これが原因なのかわからないため、的外れな回答かもしれませんが、

`Main`メソッドに対し[`[STAThread]`属性](https://docs.microsoft.com/ja-
jp/dotnet/api/system.stathreadattribute?view=netframework-4.7.2)は指定されていますでしょうか？
指定されていない場合、スレッドは`マルチスレッドアパートメント`として初期化されます。  
マルチスレッドアパートメントからシングルスレッドアパートメントのオブジェクトを操作する場合、マーシャリングが必要となり、それによって処理が遅延しているのかもしれません。

コメントによると既に`[STAThread]`を指定していたとのことですが、呼び出し元のC#プログラムはコンソールアプリケーションでしょうか？
[シングルスレッドアパートメントの要件](https://docs.microsoft.com/en-
us/windows/desktop/com/single-threaded-apartments)としてGUIなどのメッセージループを回す必要があります。  
`[STAThread]`を外す、別スレッドで実行するなどの方法でマルチスレッドアパートメントで実行したり、`[STAThread]`を付けシングルスレッドアパートメントのまま何らかの方法でメッセージループを回したりすることで、改善されないでしょうか？


CC BY-SA 4.0
2018-12-07T05:00:09.577
50995
2018-12-14T05:32:52.820
2018-12-14T05:32:52.820
4236
4236
50987
answer