C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■87777 / )  C#からExcelマクロの実行
□投稿者/ はるかぜ (1回)-(2018/06/29(Fri) 15:08:33)

分類:[C#] 

Microsoft.Office.Interop.Excelを使用してC#からExcelのFunctionを呼んでその戻り値を取得したいと思っています。

VBAは以下のものを「標準モジュール」の場所に作り、Excel上で実行した時は正常に動作することを確認しています。
(JsonConverterも標準モジュールにインポートしてあります)

Public Function ToDotNet() As String
    Dim json As Object
    Set json = CreateObject("Scripting.Dictionary")
    Dim sheet As Worksheet
    Dim arinashi As Boolean
    
    If Sheets(1).rbtnAri.Value Then
        arinashi = True
    Else
        arinashi = False
    End If
    
    json.Add "AriNashi", arinashi
    json.Add "Check1", Sheets(1).chk1.Value
    json.Add "Check2", Sheets(1).chk2.Value
    json.Add "Check3", Sheets(1).chk3.Value

    ToDotNet = JsonConverter.ConvertToJson(json)

End Function

これをC#から実行してjsonを受け取るために以下のコードを書きました。

            Microsoft.Office.Interop.Excel.Application app = null;
            try
            {
                app = new Microsoft.Office.Interop.Excel.Application();
                app.Visible = true;
                var fi = new FileInfo("Template\\template.xlsm");
                var book = app.Workbooks.Open(fi.FullName);
                var ret = app.Run("ToDotNet");
                book.Close();
                Marshal.ReleaseComObject(book);
                richTextBox1.Text = ret;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                if (app != null)
                {
                    app.Quit();
                }
                app = null;
            }

結果は
「マクロ'ToDotNet'を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。」
となります。

Excelのセキュリティ設定(マクロとActiveXコントロール)をすべて有効(セキュリティなし)にしてみたり、
app.Run("ToDotNet");
の引数を
"'ブック名'!ToDotNet
にしたり、
"'Excelファイルのフルパス'!ToDotNet"
にしたりしてみましたがすべて同じでした。

どうすれば実行できますか?

返信 編集キー/


管理者用

- Child Tree -