UDF在VBA中工作,返回#REF!在工作簿中

Luk*_*rry 1 excel vba excel-vba

我编写了一个函数来计算工作簿中特定工作表的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
Run Code Online (Sandbox Code Playgroud)

在VBA中调用函数的示例:

Sub testfunction()
sum2014 ("A1151")
sum2014 ("B1808")
sum2014 ("C3711")
sum2014 ("D3265")
End Sub
Run Code Online (Sandbox Code Playgroud)

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

 sum2014=("A1151") 
Run Code Online (Sandbox Code Playgroud)

任何提示或建议将不胜感激.我可以使用do while来清理函数,或者直到循环而不是for循环,但是现在我只想让函数在工作簿内部工作然后再重新访问.

GSe*_*erg 6

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

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

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