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

时间:2016-06-24 10:15:38

标签: c# excel vba excel-vba macros

我正在尝试使用C#Interop从我的C#应用​​程序调用我的Excel工作表(2003)的宏。

之前使用Integer参数工作正常。但是现在我需要传递一个整数数组,并且我一直遇到类型不匹配的异常。

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);

其中所有参数均为Int32类型,mergeColumns除外Int32[9]

我的Excel模板中的VBA宏如下所示:

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中声明数组ByRef,我尝试将其声明为Variant数组,但没有任何改变。我尝试在开始时放置一个MsgBox,以查看是否在循环或参数级别发生不匹配,并且它不显示MsgBox。 有谁知道如何解决这个或原因是什么?

1 个答案:

答案 0 :(得分:1)

我刚试过这个

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