Excel VBA – 数组公式返回#VALUE! (错误2015)以防单元包含超过255个字符的情况

亲爱的,我使用一个数组公式的结果传递给VBAmacros,这意味着公式的结果作为数组传递给我的macros。

在某些情况下,我在数组中获得#VALUE(错误2015),我不知道为什么。 当我和受影响的细胞一起玩的时候,当细胞有相当数量的字符(~3000个字符)时,就会发生这种情况。

有没有人有线索我可以尝试解决isuse?

式:

{=arrayToCSV(removeElementsFrom2DimArray(IF('sheet'!$G$1:$G$2000=A1;'sheet'!$F$1:$F$2000)))} 

IF('sheet'!$G$1:$G$2000=A1;'sheet'!$F$1:$F$2000)部分返回一个数组,如{FALSE, FALSE, FALSE... Value, Value, FALSE , ...} 。 这一个我传递给我的mVBA函数removeElementsFrom2DimArray去除FALSE元素

现在看来IF('sheet'!$G$1:$G$2000=A1;'sheet'!$F$1:$F$2000)在某些情况下会返回#VALUE(Error 2015) {FALSE, FALSE, FALSE... #VALUE!, Value, FALSE , ...}

 Function removeElementsFrom2DimArray(ByRef arr() As Variant, Optional value As Variant = False) As String() On Error GoTo ErrorHandler Dim coll As New Collection Dim i As Integer If (IsArray(arr)) Then For i = 1 To UBound(arr, 1) If (arr(i, 1) <> value) Then --> Here happens the error that arr(i, 1) return #VALUE! Error 2015. Why? coll.Add (arr(i, 1)) End If Next i End If removeElementsFrom2DimArray = collectionToArray(coll) Exit Function ErrorHandler: MsgBox Err.Description Resume End Function 

更新

  • 我试图修改以通过作为VariantByVal ARR。 它没有任何区别。

  • 我试图修改,作为数组arr()和不使用()来传递arr。 它没有任何区别。

  • 如果我减less受影响的单元格'sheet'!$F$1:$F$2000的字符数'sheet'!$F$1:$F$2000到低于256个字符,那么它的工作原理!

  • 如果我只用公式{=IF(sheet!$G$1:$G$2000=A1;sheet!$F$1:$F$2000)} (数组公式),那么它也可以工作!

所以我认为从本地公式传递数组到自己的函数是有限制的? 所以数组中超过255个字符的值会被#VALUE传递! 错误?

任何想法? 我正在使用Excel 2010 Plus(v14.0.7)