无法将C#int数组传递给VBA Excelmacros

我试图从我的C#应用​​程序调用我的Excel工作表(2003)的macros与C#互操作。

它使用整数参数之前工作正常。 但现在我需要传递一个整型数组,并且一直得到一个types不匹配的exception。

COMException: Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) 

C#代码如下所示:

 object m = Type.Missing; xlApp.Run("MergeColumnsKeepValues", lastGroupRowExcel, firstGroupRowExcel, mergeColumns, rightFormatMergeColumn, multiRowColumn, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m); 

其中所有的参数都是Int32types的,除了是Int32[9] mergeColumns Int32[9]

我的Excel模板中的VBAmacros看起来像这样:

 Sub MergeColumnsKeepValues(lastGroupRow As Integer, firstGroupRow As Integer, mergeColumns() As Variant, helpColumnMerge As Integer, multiRowColumn As Integer) ... <- no use of array, just declaring variables and stuff Dim i As Integer For i = LBound(mergeColums) To UBound(mergeColumns) Set targetMergeCells = Range(Cells(firstGroupRow, mergeColumns(i)), Cells(lastGroupRow, mergeColumns(i))) Call targetMergeCells.PasteSpecial(xlPasteFormats, xlPasteSpecialOperationNone, False) Next End Sub 

我试图在VBA中声明Array ByRef ,并试图将其声明为Variant数组,但没有任何更改。 我试图在开始时放置一个MsgBox来查看是否在循环中或在参数级别出现不匹配,并且不显示MsgBox。 有谁知道如何解决这个问题或者是什么原因?

我只是试了一下

 static void Main(string[] args) { XL.Application xlapp = new XL.Application(); xlapp.Visible = true; xlapp.Workbooks.Open("c:/test/test_c.xlsm"); int[] x = new int[] { 1, 2, 3, 4 }; xlapp.Run("MergeColumnsKeepValues", x, 2, 3, 4,5); } 

调用VBA如下

 Public Sub MergeColumnsKeepValues(ByRef lastGroupRow As Variant, _ firstGroupRow As Integer, _ mergeColumns As Integer, _ helpColumnMerge As Integer, _ multiRowColumn As Integer) MsgBox "Hello" End Sub