[英]Excel VBA Array - Getting #Value! error when trying to dump array into spreadsheet
如果有人可以幫助我提供此代碼,我將不勝感激。 -目標:我試圖僅使用兩個數組之間的匹配來填充一個數組(一個數組是我在第二個數組中尋找的參考數據)。
代碼和數組在開發屏幕的“監視和本地”屏幕中看起來不錯,但是當我檢查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!
在我之前選擇的所有單元格中 ps:似乎它在debug / watches窗口中構建了所有的數組,只有當函數結束時,它才將數據從“ dumper”粘貼到電子表格中失敗。
編輯 :我看到@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
無法使用從工作表對象調用的UDF來操縱工作表上的一系列單元格。
轉貼 :
此處有更多信息:
https://stackoverflow.com/a/15647054/1467082
和這里:
http://www.excel-it.com/UDF.htm
通常,子例程可以操縱工作表,而函數則不能。
唯一的例外是可以從子例程中調用函數,但是將函數用於將值返回到子例程以外的其他用途可能是個壞習慣。
我弄清楚出了什么問題。 數組內容和函數結果為175行,超過了轉儲程序數組的大小,為150行。 如果發生這種情況,excel電子表格中的結果將返回#value!。 我增加了轉儲器數組的大小,並且代碼工作得很漂亮。 感謝你的幫助 ! 期待將來做出更多貢獻。 問候羅德尼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.