将Excel VBA中的variables数组传递给WCF函数

我正在拼命地这样做。

我已经能够复制在这篇文章中find的行为。

http://damianblog.com/2009/07/05/excel-wcf/comment-page-1/#comment-64232

但是,我无法将数组传递给暴露的wcf函数。

我的WCF服务工作是这样的(我也尝试使用int数组)

public object[] GetSomeArray() { return new object[] { 1, 2, 3, 4}; } public object[] ReturnSomeArray(object someArray) { object[] temp = (object[]) someArray; for (int i = 0; i < temp.Length; i++) { temp[i] = (int)temp[i] + 1; } return temp; } 

我的VBA代码看起来像这样。

 Dim addr As String ... Dim service1 As Object Set service1 = GetObject(addr) Dim columnsVar columnsVar = Array(1, 2, 3) Dim anotherArray As Variant anotherArray = service1.ReturnSomeArray(columnsVar) 

我上面最后一行总是有问题。 我不明白为什么如果我能够从我的WCF服务返回一个数组,我不能将同一数组作为parameter passing给另一个WCF函数。
当前错误消息

我得到一个序列化错误。

任何帮助,将不胜感激。

我只有当我用这种方式在VBA中声明数组variables时, Type mismatch错误也有类似的问题:

 Dim anotherArray() As Variant 

但是如果以这种方式定义variables,则错误消失:

 Dim anotherArray As Variant 

您和我的类似解决scheme之间的一些其他差异是:

 //C#- my solution- without array[] definition: public object[] ReturnSomeArray(object someArray) //VBA- my solution -without array() definition: Dim someArray As Variant 

编辑:2013-08-28

使用C#-Excel-Interop我更喜欢尝试和testing解决scheme的方式。 如果有什么行之有效的话,我坚持下去,有时候我会错过指出解决scheme或逻辑的来源。

下面你会find包含LINQ代码来操作数组。 这些代码片段在两个方向工作 – 从C#到VBA的数据>>传回给C#进行sorting>>返回到VBA。 我希望这会帮助你最终解决你的问题。

首先:一些C#代码

  public object[] GetSomeArray() { return new object[] { 5, 2, 1, 7, 9, 1, 5, 7 }; } public double[] ArraySorted(object tablica) { object[] obj = (object[])tablica; var filtr = from i in obj orderby Convert.ToDouble(i) select Convert.ToDouble(i); double[] wynik = (double[])filtr.ToArray(); return wynik; } 

其次:一些VBA代码

 Sub qTest_second_attempt() 'declare array variable Dim tmp() 'and other variables Dim addr As String addr = "UDFArrayLinqTest.ArrayLinq" 'get references Dim service1 As Object Set service1 = CreateObject(addr) 'get array from C# tmp = service1.GetSomeArray() 'pass this array to C# back to sort it Dim someArray As Variant someArray = service1.ArraySorted(tmp) 'check the result in Immediate window Debug.Print Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(someArray))) 'result: 1 1 2 5 5 7 7 9 End Sub