如果有人能帮我解决这个问题,我将不胜感激。 - 目标:我试图填充一个只有两个数组之间匹配的数组(一个数组是我在第二个数组中寻找的参考数据)。
代码和数组在开发屏幕的Watches and Locals屏幕中看起来不错,但是当我检查excel电子表格中的函数时,它返回一个#value!错误。
非常感谢提前。
此致 罗德尼
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
GH183:GH215
=FTE_detail(GG183,GG215,DP17424,'2013PlanfromBex'!P3,'2013PlanfromBex'!P2369)
#value!
。p.s。:它似乎在调试/监视窗口中构建了所有数组,只有当函数结束时才会将数据从“转储器”粘贴到电子表格中。
答案 0 :(得分:1)
编辑:我看到@shahkalpesh打败了我...
不是一个真正的答案,而是为了解决一些评论。毫无疑问,可以使用UDF返回值数组。请参阅以下示例:选择2x2范围并输入
=GetData()
并使用Ctrl+Shift+Enter
将其作为数组公式输入。
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
答案 1 :(得分:0)
无法使用从Worksheet对象调用的UDF来操作工作表上的一系列单元格。
此处提供更多信息:
https://stackoverflow.com/a/15647054/1467082
在这里:
http://www.excel-it.com/UDF.htm
通常,子程序可以操作工作表和函数 不能。例外是在子程序中调用的函数可以, 然而,这可能是一个习惯使用函数的坏习惯 而不是将值返回到子程序。
答案 2 :(得分:0)
我弄清楚出了什么问题。 数组内容和175行的功能结果超过了自卸车阵列的大小,即150行。如果发生这种情况,excel电子表格中的结果将返回#value!。 我增加了转储器数组的大小,代码运行得很漂亮。 感谢你的帮助 ! 期待在未来做出更多贡献。 问候 罗德尼