Я пытаюсь вызвать макрос моего рабочего листа Excel (2003) из моего приложения C# с помощью C# Interop.Не удается передать массив C# int в макрос VBA Excel
Он работал отлично с параметрами 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]
Макрос VBA в моем шаблоне Excel выглядит следующим образом :
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
Я попытался объявить массив ByRef
в VBA, и я попробовал объявить его как Variant
, но ничего не изменилось. Я попытался поместить MsgBox в начале, чтобы увидеть, происходит ли несоответствие в цикле или на уровне параметра, и он не показывает MsgBox. Кто-нибудь знает, как исправить это или в чем причина?
lastGroupRowExcel, firstGroupRowExcel, mergeColumns, rightFormatMergeColumn, multiRowColumn, – jackjop
которых один является массив? – jackjop
Что касается этого вопроса, я хотел бы сослаться на предложение ниже кода C#: «где все параметры имеют тип Int32, кроме mergeColumns, который является Int32 [9]» –