我正在尝试使用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。
有谁知道如何解决这个或原因是什么?
答案 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