我在以下代码中收到此错误:
Dim posOfProdInArray As Integer
If isStringInFirstColumnOfMultidimensionalArray(firstCellOfRowTBRead.Offset(0, 2).Value, aggregatedProdsAndTheirData, posOfProdInArray) Then
sumOfActualDay = sumOfActualDay + firstCellOfRowTBRead.Offset(0, 4).Value * aggregatedProdsAndTheirData(posOfProdInArray, 2)
End If
Run Code Online (Sandbox Code Playgroud)
它在调用 isStringInFirstColumnOfMultiDimensionArray 函数时发生。
这是函数:
Public Function isStringInFirstColumnOfMultidimensionalArray( _
stringToBeFound As String, arr As Variant, _
Optional ByRef varToReceivePositionOfString As Integer) As Boolean
Dim i
For i = LBound(arr) To UBound(arr)
If arr(i, 1) = stringToBeFound Then
isStringInArray = True
If IsMissing(varToReceivePositionOfString) Then
Else
varToReceivePositionOfString = i
Exit Function
End If
Next i
isStringInArray = False
End Function
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的:您显示的代码存在几个问题。
该代码根本无法编译,因为您缺少End If.
下一个问题是您不会返回任何东西。在 VBA 中,您需要将返回值分配给函数本身(就好像函数是一个变量一样)。您的函数名称是isStringInFirstColumnOfMultidimensionalArray,因此您需要编写isStringInFirstColumnOfMultidimensionalArray = True.
看起来好像您从另一个调用的函数复制了该函数isStringInArray,并且在分配返回值时没有调整名称。假设isStringInArray您的代码中仍然存在某个函数,这将解释您在标题中显示的错误消息:isStringInArray = False看起来 VBA 就好像您正在向该函数分配某些内容,而这是不允许的(并且没有意义)。
小事:正如 Tim Williams 已经提到的,isMissing不适用于除 之外的可选参数Variant。不过,这并不重要,您可以完全删除该检查。
你的函数可能看起来像
Public Function isStringInFirstColumnOfMultidimensionalArray(stringToBeFound As String, arr As Variant, Optional ByRef varToReceivePositionOfString As Integer) As Boolean
Dim i As Long
For i = LBound(arr) To UBound(arr)
If arr(i, 1) = stringToBeFound Then
isStringInFirstColumnOfMultidimensionalArray = True
varToReceivePositionOfString = i
Exit Function
End If
Next i
isStringInFirstColumnOfMultidimensionalArray = False
End Function
Run Code Online (Sandbox Code Playgroud)
False也可以删除指定为返回值(因为它是布尔值的默认值),我保留它只是为了更好的可读性。