首页 > 解决方案 > UDF 在 VBA 中工作,返回 #REF!在工作簿中

问题描述

我编写了一个函数,计算工作簿中特定工作表的 2014 年销售额,然后在特定单元格中打印 2014 年的总销售额。我可以在 VBA 中调用该函数,没问题。但是,如果尝试使用工作簿中的函数,则会出现参考错误。我知道#REF!表示该公式引用了一个无效的单元格,我是否需要将某种值返回到我试图调用该函数的单元格中?例如,如果我在单元格 F25 中键入 sum2014("A1151"),我是否需要返回某种布尔值才能使函数正常工作?

Function sum2014(someaccount As String) As Currency
Dim i As Integer
Dim total As Currency
Dim ws As Worksheet
total = 0
Set ws = ActiveWorkbook.Worksheets(someaccount)
     For i = 1 To 50
          If ws.Range("A3").Offset(i, 0) >= DateValue("January 1, 2014") And ws.Range("A3").Offset(i, 0) <= DateValue("December 1, 2014") Then
          total = total + ws.Range("A3").Offset(i, 1)
          sum2014 = total
          End If
     Next
     If Worksheets("New Charges").Range("C3").Offset(i, 0) = someaccount Then
          Worksheets("New Charges").Range("E3").Offset(i, 0) = total
     End If
     For i = 1 To 5
          If Worksheets("New Charges").Range("C3").Offset(i, 0).Value = someaccount Then
          Worksheets("New Charges").Range("E3").Offset(i, 0).Value = total
          End If
     Next  

End Function

在 VBA 中调用函数的示例:

Sub testfunction()
sum2014 ("A1151")
sum2014 ("B1808")
sum2014 ("C3711")
sum2014 ("D3265")
End Sub

我可以在 VBA 中调用该函数,它工作正常。计算销售额并将其放置在适当的位置。但是我不能在工作簿中调用 UDF。我正在调用该函数

 sum2014=("A1151") 

任何提示或建议将不胜感激。我可能可以使用 do while 或 do until 循环而不是 for 循环来清理该函数,但现在我只想让该函数在工作簿中工作,然后稍后重新重写。

标签: excelvba

解决方案


虽然从工作表调用的函数可能不会更改工作表是正确的(如果您尝试使用技巧来解决它,您可能会遇到问题sum2014),但您的直接问题是这是一个有效的 Excel 范围地址(第 13403 列(SUM),第 2014 行),因此#REF!当您尝试执行=SUM2014("A1151"). 就像你的函数被调用一样A1

可在公式中使用的名称可能看起来不像有效的 Excel 范围。选择另一个名称(并确保您不要更改该函数的其他单元格,否则会#VAL!出错)。

如果您需要从例程更改各种单元格,请将其设为子程序并从外部事件(例如按钮按下或Worksheet_Change处理程序)调用它,而不是从单元格中的公式调用。


推荐阅读