0

2 つのメソッドを持つ C# ライブラリがあります。1 つは整数を返し、もう 1 つはオブジェクトを返します[,]

public int ReturnInt()
{
    //Something that return INT
}
public object[,] Return2DArray()
{
    //returns twoDimensionalArrayResponse;
}

今、私はVBAに非常に慣れていません。いくつかのレガシーな理由により、VSTO ExcelアドインではなくVBAマクロを記述してこのライブラリを呼び出す必要があります。

最初のメソッドから結果を取得するのは簡単でした。アセンブリ com を表示して Com Interop に登録し、VBA プロジェクトに参照として追加して、以下のコードを使用して呼び出しました。

Sub GXSData()
    Dim InteropClass As New ExcelInterOpWrapper
    Dim result As Integer
    result = InteropClass.ReturnInt()
    MsgBox "Rows Returned =" & CStr(result)
End Sub

ここまでは順調ですね。次に、2 番目のメソッドを呼び出してデータを取得し、それを Excel にバインドします。

簡単に聞こえますが --> このデータを保持するにはどの型を使用すればよいですか? 動的配列を試しましたが、機能しませんでした --> 動的範囲にバインドするにはどうすればよいですか。2次元配列が100 * 10であるとしましょうRange.value = Array.C#のExcelアドインアプリケーションでこれを行う方法を知っているような範囲にバインドしたいのですが、VBAは私に本当の問題を与えています.

これに関するどんな助けも素晴らしいでしょう

4

1 に答える 1

0

これを行う方法を見つけました。それは完璧なアプローチではありませんが、今のところ私にとってはうまくいきます。私のC#スキルにより、C#でExcelに書き込む関数を作成し、VBAマクロで呼び出すだけでした。これを行うための純粋なマクロの方法があると確信しています。これは、これを API として記述しており、MACRO クライアントが API を呼び出すためです。だから私はマクロでプレゼンテーション層を持ちたいと思います。とにかく、誰かに役立つ場合に備えてC#はここにあります C#メソッド

public static void BindDataToExcel( Excel.Range range,  object[,] response)
          {
              int rows = response.GetLength(0);
              int cols = response.GetLength(1);
              int n = 0;
              Excel.Range newRange = range.get_Offset(n, 0).get_Resize(rows - n, cols);
              newRange.Value = response;
          }

私のマクロ

Sub GxsData()
    Dim InteropClass As New ExcelInterOpWrapper 
    Dim o As Object
    Set o = InteropClass.BindDataToExcel(ActiveCell)
End Sub
于 2011-07-25T09:59:22.007 に答える