无法将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);
其中所有的参数都是Int32
types的,除了是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