我在下面的代码中得到了这个错误:
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
调用isStringInFirstColumnOfMultidimensionalArray函数时发生。
函数如下:
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
2条答案
按热度按时间ljo96ir51#
正如评论中提到的:您显示的代码存在几个问题。
代码根本无法编译,因为您缺少一个
End If
。下一个问题是你什么都不回。在VBA中,需要将返回值赋给函数本身(就像函数是一个变量一样)。你的函数名是
isStringInFirstColumnOfMultidimensionalArray
,因此你需要写isStringInFirstColumnOfMultidimensionalArray = True
。它看起来就像是从另一个名为
isStringInArray
的函数中复制了该函数,并且在分配返回值时没有调整名称。假设你的代码中仍然存在一个函数isStringInArray
,这就可以解释你在标题中显示的错误消息:isStringInArray = False
在VBA中看起来就像你在给那个函数赋值一样,这是不允许的(也是没有意义的)。小事:正如Tim Williams已经提到的,
isMissing
不能在Variant
以外的可选参数上工作。但是,这并不重要,您可以完全删除该检查。您的函数可能类似于
指定
False
作为返回值也可以删除(因为它是布尔值的默认值),我保留它只是为了更好的可读性。mrfwxfqh2#
如果你想使用
IsMissing
来确定一个参数是否传递给了一个标记为Optional
的参数,那么这个参数需要声明为Variant
。https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/ismissing-function
返回一个布尔值,该值指示是否已将可选的Variant参数传递给过程。