0

我有一个 C# 库,它有 2 种方法。一个返回一个整数,另一个返回一个对象[,]

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

现在我对 VBA 非常陌生,由于一些遗留原因,我需要编写一个 VBA 宏而不是 VSTO excel Addin 来调用这个库。

从第一个肉食中获得结果很容易。我使程序集 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

到现在为止还挺好。现在我想调用第二种方法获取数据并将其绑定到excel。

听起来很简单,但是 --> 我应该使用什么类型来保存这些数据。我尝试了动态数组,但它不起作用 --> 如何将它绑定到动态范围。假设二维数组是 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 回答