3

私はオブジェクトを持っています:

public class Shampoo
{
public string Name {get;set;}
public string Id {get;set;}
public string PriceRegion {get;set;}
}

このオブジェクトを Excel DNA 経由で C# のメソッドに渡すことはできますか?

C# メソッドは次のとおりです。

public static string PassShampoo(Shampoo shampoo)
{
//Some Code...
}

これは Excel DNA を介して VBA から C# に変換できますか?

4

1 に答える 1

2

.NET ライブラリは、Shampooクラスを COM 可視型としてエクスポートおよび登録できます。これは、VBA から としてインスタンス化できますDim sh = New Shampoo()。同様に、他のタイプを定義することもできます。

public class Shopper()
{
    public string ReadLabel(Shampoo shampoo)
    {
        return shampoo.Name;
    }
}

そして、 aに次New Shopper()を渡すことができますshampoo:

Dim anne As Shopper = New Shopper()
Dim dove As Shampoo = New Shampoo()

Dim label As String
label = anne.ReadLabel(dove)

Shampoo(Shopper.ReadLabel上記)を使用するメソッドstaticは、UDF などとして Excel で使用することはできません。VBA から COM 相互運用機能を介して呼び出された .NET オブジェクトのメソッドとして使用することもできません。

これまでのところ、Excel-DNAは関与していません。適切なフラグと属性を使用してコンパイルされ、マシン上の COM 相互運用用に登録された標準の .NET アセンブリを使用して、これらすべてを実行できます。

ただし、Excel-DNA では、アドインを COM サーバーにすることもできます。これは、.xll がライブラリで定義した COM クラスをホストできること、アドインが管理者アクセスを必要とせずに (インストーラーの代わりに) COM 登録を実行できること、および COM オブジェクトが同じ AppDomain に存在することを意味します。アドインの残りの部分。したがって、Excel-DNA は物事を接着するのに少し役立ちますが、VBA コードと .NET アセンブリ間の実際の相互作用は、標準の .NET から COM への相互運用であり、学習曲線を少し上がれば非常にうまく機能します。 .

于 2012-10-24T13:28:52.360 に答える