Excel VBA数组 – 获取#Value! 尝试将数组转储到电子表格时出错

如果有人能帮我解决这个问题,我将不胜感激。 – 目标:我想填充一个数组只有两个数组之间的匹配(一个数组是我正在寻找第二个数组中的引用数据)。

代码和数组在开发屏幕的Watches和Locals屏幕中看起来不错,但是当我在Excel电子表格中检查函数时,它会返回#value! 错误。

提前谢谢了。

关心rodnei

Function FTE_Detail(sref As Range, eref As Range, esource As Range, bplan As Range, eplan As Range) As Variant 'Application.Volatile Dim rreference(34, 0) As String, dumper(150, 6) As String, vsource(17424, 11) As String, k As Integer, j As Integer Dim b As Integer, c As Integer, month As Integer, a As Integer Dim IDNUMBER As Integer, name As String, empID As String, fromCC As String, tocc As String month = Worksheets("Introduction").Cells(7, 6).Value For k = 0 To (eref.Row - sref.Row) rreference(k, 0) = Worksheets("data").Cells(sref.Row + k, sref.Column).Value Next k k = 0 j = 0 For k = 0 To 11 For j = 0 To esource.Row If Len(Worksheets("data").Cells(70 + j, esource.Column + k).Value) > 250 Then vsource(j, k) = Left(Worksheets("data").Cells(70 + j, esource.Column + k).Value, 250) Else vsource(j, k) = Worksheets("data").Cells(70 + j, esource.Column + k).Value End If Next j Next k i = 0 k = 0 j = 0 c = 0 IDNUMBER = 0 'hire array Do While i <= (eref.Row - sref.Row + 1) Do While k <= esource.Row If InStr(vsource(k, month - 2), rreference(i, 0)) Then If vsource(k, month - 3) = "" Then IDNUMBER = IDNUMBER + 1 name = Worksheets("data").Cells(70 + k, 1).Value 'Employee name empID = Worksheets("data").Cells(70 + k, 2).Value 'Employee ID dumper(j, 0) = "hire" dumper(j, 1) = Str(IDNUMBER) dumper(j, 2) = name dumper(j, 3) = Str(empID) dumper(j, 4) = "-" dumper(j, 5) = vsource(k, month - 2) dumper(j, 6) = Worksheets("data").Cells(70 + k, 133).Value 'Employee Country j = j + 1 Else End If Else End If k = k + 1 Loop k = 0 i = i + 1 Loop FTE_Detail = dumper() End Function 
  1. 首先,我select范围GH183:GH215
  2. 然后按下F2粘贴公式=FTE_detail(GG183,GG215,DP17424,'2013PlanfromBex'!P3,'2013PlanfromBex'!P2369)
  3. 返回#value! 在我之前select的所有单元格中。
  4. 我已经完成了这个程序之前的其他数据和工作。 不知道为什么不在这种情况下工作。

ps:看起来,它只是在debugging/监视窗口中生成所有数组时,只有当函数结束时,它才能将数据从“dumper”粘贴到电子表格。

编辑 :我看到@shahkalpesh击败了我…

不是一个真正的答案,而是要解决一些评论。 毫无疑问,您可以使用UDF来返回一组值。 看下面的例子:select一个2×2范围并input

=GetData()

并使用Ctrl+Shift+Enter将其作为数组公式input。

 Function GetData() Dim arr(1 To 2, 1 To 2) arr(1, 1) = "1,1" arr(1, 2) = "1,2" arr(2, 1) = "2,1" arr(2, 2) = "2,2" 'Err.Raise 13 'uncomment to demonstrate #VALUE in all cells GetData = arr End Function 

无法使用从工作表对象中调用的UDF来处理工作表上的一组单元格。

转贴 :

更多信息在这里:

https://stackoverflow.com/a/15647054/1467082

和这里:

http://www.excel-it.com/UDF.htm

一般来说,子程序可以操作工作表,function不能。

例外是在一个子程序中调用的函数可以,但是这可能是一个坏的习惯,除了向子程序返回值以外的其他任何东西。

我找出了什么错。 数组内容和175行的函数结果超过了自定义数组的150行的大小。 如果发生这种情况,Excel电子表格中的结果将返回#value !. 我已经增加了自卸车arrays的大小和代码工作得很好。 感谢你的帮助 ! 期待未来贡献更多。 关心Rodnei