Excel から C# コードを呼び出す方法に興味があり、こちらの方法に従っていますhttps://richnewman.wordpress.com/2007/04/15/a-beginner%E2%80%99s-guide-to -calling-a-net-library-from-excel/ .
C# コードは、DotNetClass.cs という "Hello World" の例です。
using System;
using System.Collections.Generic;
using System.Text;
namespace DotNetLibrary
{
public class DotNetClass
{
public string DotNetMethod(string input)
{
return "Hello " + input;
}
}
}
ビルド構成には、「COM 相互運用に登録する」と「アセンブリを COM 可視にする」がチェックされています。オプション「.NET Framework 4.5」と「Any CPU」もあります(64ビットマシンで作業しています)。いくつかの NET バージョンと CPU オプションを試しましたが、成功しませんでした。何度か掃除して作り直しました。
Excel 2010 では、DotNetLibrary.dll への参照を作成できません。それをブラウズすることも、同じ場所 (DotNetLibrary.tlb) にあるファイルへの参照を作成することもできます。
Excelからの呼び出しは
Private Sub TestDotNetCall()
Dim testClass As New DotNetClass
MsgBox testClass.DotNetMethod(“World”)
End Sub
...そしてこれは機能します-ほとんど。VBA コード (F5) を実行すると、"Hello " ("World" がない - unwoot!) というメッセージが表示された MsgBox (woot!) が表示されます。そのため、これを行う目的を無効にしているように見える引数 (「世界」) を無視しているようです。
説明をいただければ幸いです。tlbファイルを参照するのは良いことですか? dll/tlb に引数を渡したり、結果を取得したりできないのはなぜですか? これを行うより良い方法はありますか?