簡體   English   中英

Excel VBA數組-獲得#值! 嘗試將數組轉儲到電子表格時發生錯誤

[英]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
  1. 首先,我選擇范圍GH183:GH215
  2. 然后按F2並粘貼公式=FTE_detail(GG183,GG215,DP17424,'2013PlanfromBex'!P3,'2013PlanfromBex'!P2369)
  3. 返回#值#value! 在我之前選擇的所有單元格中
  4. 我之前已經使用其他數據完成了此過程,然后開始工作。 不知道為什么在這種情況下不起作用。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM