我的代码中没有错误。我整个上午都在搜索错误!所以我希望你能帮助我。
首先,这是问题代码(变量的名称不是它们的真实姓名):
Sheets(sheet).Range(nameOfTheRange).FormulaR1C1 = _
functionReturningString(functionReturningStrArr( _
Range(nameOfAnotherRange).Value, AnInputWorkSheet, "colNameInInputSheet"))
所以我对此的描述:
所有功能都可以单独使用,但是总是会出现这种错误(语言:德语):
Fehler beim Kompilieren:
Unverträglicher类型:Datenfeld oder benutzerdefinierter Typ erwartet
functionReturningString
是具有以下参数的函数(strArr()作为Variant) - >它返回一个像子弹列表一样的字符串。
functionReturningStrArr(nameWhichISearchInSheet as String, dataSheet as Worksheet, dataColumn, as String)
- >它返回bulletListing的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
,这是一种非常好的方法,我也在其他项目中使用它。
答案 0 :(得分:3)
您必须开始使用Dim
明确声明所有内容 - 并强制自己通过在模块顶部编写Option Explicit
来执行此操作。这样您就可以更快地识别错误。
下面
'get ID
ID = Sheets(rawdataOverall).Cells(rowindex, getcolnumformcolname("ID")).Value
你调用一个名为getcolnumformcolname
的函数;大概form
是一个拼写错误,你的意思是From
和getColNumFromColName
一样。如果您有Option Explicit
,您会立即检测到该错误。
未声明以下三个变量/数组:rawdataOverall
,cell
,getDataFromThisProject
。您应该声明它们并明确地为它们分配类型。
尝试修理这些东西,看看它带给你的地方。
答案 1 :(得分:0)
似乎功能代码片段的一小部分是错误的。在最后一行,你应该将returnArray()的值赋值给你的函数名,如下所示:
functionReturningStrArr = returnArray()
否则,您需要从名为“getDataFromActualProject”的变量中提取数组,如示例所示。
编辑:
更改函数“functionReturningStrArr As Variant”以返回“As String()”而不是Variant。看起来你不能像你期望的那样将Variant转换为字符串数组。
编辑:
我创建了一个测试它的函数。当您尝试将Variant强制转换为字符串数组时,将显示此编译错误。这还包括一个修复,你的函数返回Variant MUST返回字符串数组。
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