函数在数组中的function

我的代码中没有错。 整个上午我search了这个错误! 所以我希望你能帮助我。

首先,这是问题代码(variables的名称不是它们的真名):

Sheets(sheet).Range(nameOfTheRange).FormulaR1C1 = _ functionReturningString(functionReturningStrArr( _ Range(nameOfAnotherRange).Value, AnInputWorkSheet, "colNameInInputSheet")) 

所以我的描述是:

所有的function都很好地独立工作,但总是有这个错误(语言:德语):

Fehler beim Kompilieren:

Unverträglichertypes:Datenfeld或更多types的其他types

functionReturningString是一个具有以下参数的函数(strArr()作为Variant) – >它返回一个string像一个bulletlist。

functionReturningStrArr(nameWhichISearchInSheet as String, dataSheet as Worksheet, dataColumn, as String) – >它返回一个Variant()的项目符号列表

我不确定第二种方法是否真的起作用,所以这是它的代码。

 Function functionReturningStrArr(ByVal nameWhichISearchInSheet As String, ByVal datasheet As Worksheet, ByVal datacolumn As String) As String() Dim returnArray() As String Dim rowindex As Integer Dim ID As String Sheets(rawdataOverall).Cells(1, getColNumFromColName("Project")).EntireColumn.Select 'search correct dataset For Each cell In Selection If cell.Value = nameWhichISearchInSheet Then rowindex = cell.row Exit For End If Next cell 'get ID ID = Sheets(rawdataOverall).Cells(rowindex, getColNumFromColName("ID")).Value 'search data from file with this ID datasheet.Cells(1, getColNumFromColName(datacolumn)).EntireColumn.Select Selection.UsedRange.Select For Each cell In Selection rowindex = cell.row 'check if row contains to this project If Cells(rowindex, getColNumFromColName("ID")) = ID Then ReDim Preserve returnArray(UBound(returnArray) + 1) returnArray(UBound(returnArray)) = cell.Value End If Next cell functionReturningStrArr = returnArray() 

如果你问自己什么是getColNumFromColName ,这是一个非常好的方法,我也在其他项目中使用它。

似乎function代码片段的一小部分是错误的。 在最后一行,你应该把returnArray()的值赋给你的函数名,如下所示:

 functionReturningStrArr = returnArray() 

否则,您将需要从名为“getDataFromActualProject”的variables中提取数组,如示例中所示。

编辑:

改变你的函数“functionReturningStrArr As Variant”返回“As String()”而不是Variant。 看来你不能像你所期望的那样将一个Varianttypes转换成一个string数组。

编辑:

我创build了一个函数来testing这个。 当您尝试将Variant转换为string数组时,会出现此编译错误。 这也包括一个修复,你的返回Variant的函数必须返回string数组。

 Sub RunTest() Debug.Print getStringFromArray(getArray()) Debug.Print getStringFromArray(getVariant()) ' compile error! you cannot cast variant to array of string End Sub Function getArray() As String() Dim returnArray(2) As String returnArray(0) = "A" returnArray(1) = "B" returnArray(2) = "C" getArray = returnArray() End Function Function getVariant() As Variant() Dim returnArray(2) As String returnArray(0) = "A" returnArray(1) = "B" returnArray(2) = "C" getArray = returnArray() ' Not a compile error, you can cast string array to variant End Function Function getStringFromArray(inputArray() As String) As String Dim returnString As String For i = LBound(inputArray()) To UBound(inputArray()) If returnString = "" Then returnString = inputArray(i) Else returnString = returnString & "," & inputArray(i) End If Next i getStringFromArray = returnString End Function 

你真的必须开始使用Dim明确地声明所有的东西 – 并强制你通过在你的模块的顶部写入Option Explicit来做到这一点。 这样你就可以更快地识别错误。

这里

 'get ID ID = Sheets(rawdataOverall).Cells(rowindex, getcolnumformcolname("ID")).Value 

你调用一个名为getcolnumformcolname的函数; 大概form是一个错字,你的意思是From getColNumFromColName 。 如果您有Option Explicit ,您将立即检测到该错误。

未声明以下三个variables/数组: rawdataOverallcellgetDataFromThisProject 。 你应该声明它们并明确地给它们分配一个types。

尝试修复这些东西,看看那些带给你的东西。