0

技術的に 完璧に機能するExcelのUDFがあります。ただし、その UDF を呼び出すセルを含むシートに切り替えると、#N/A が返されることがあります。ファイルを開いてそのシートに切り替えると、一貫して発生します。
「完全に機能する」と私が言う理由は、そのセルに入ってEnterキーを押すと(つまり、関数を手動で実行すると)、正しい値が返されるからです!同様に、依存するセルのいずれかの値をいつでも変更できます。
問題の原因を見つけるためにトラブルシューティングを試みましたが、自分の udf が呼び出されていないことに気付きました! (そこにある debug.print ステートメントは印刷されません)

ここに私のudfがあります:

Function AvgPrice(myWS As String, r As Range, bCol As Range, szCol As Range, ttlCol As Range)
    Application.Volatile

    Dim cell As Range, MinArb As Boolean
    Dim val As Variant, inc As Variant, thisRow As Long, iSum As Long, thisCol As Long, total As Long, price As Long
    Dim fabric As String, book As String, size As String, Lookup As String, fab As String
    Dim rLookUp As Range, cIndex As Variant

    Dim ws As Worksheet, prices As Worksheet
    Set ws = ThisWorkbook.Worksheets(myWS)
    Set prices = ThisWorkbook.Worksheets("Prices")

    Debug.Print (ws.Name)

    Set r = ws.Range(r.Address)
    Set bCol = ws.Range(bCol.Address)
    Set szCol = ws.Range(szCol.Address)
    Set ttlCol = ws.Range(ttlCol.Address)

    thisRow = r.Cells(1).row
    book = bCol.Value
    size = szCol.Value
    total = ttlCol.Value


    For Each cell In r.Cells
        inc = cell.Value
        If inc = vbNullString Then GoTo NXT
        If Not (IsNumeric(inc)) Then GoTo NXT

        thisCol = cell.Column
        fabric = getFabric2(cell, ws)

        Debug.Print (ws.Parent.Name)

        fabric = Mid(fabric, 1, 1) & LCase(Mid(fabric, 2))
        Lookup = book & "-" & size & "-" & fabric
        Set rLookUp = prices.Range("A:A")

        cIndex = Application.Match(Lookup, rLookUp, 0)
        If IsError(cIndex) Then
            Debug.Print ("1 -- Error: " & Lookup)
            Debug.Print (Err.Description)
            GoTo QuitIt
        End If
        val = prices.Cells(cIndex, 3).Value
        If val = vbNullString Or Not (IsNumeric(val)) Then
            val = prices.Cells(cIndex, 2).Value
            If val = vbNullString Or Not (IsNumeric(val)) Then GoTo NXT
        End If

        inc = inc * val
        iSum = iSum + inc
NXT:
    Next cell

QuitIt:
    If iSum > 0 Then
        AvgPrice = iSum / total
    Else
        AvgPrice = ""
    End If

End Function
4

1 に答える 1