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

时间:2018-11-03 19:00:57

标签: 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

在VBA中调用函数的示例:

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

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

调用该函数
 sum2014=("A1151") 

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

1 个答案:

答案 0 :(得分:6)

从工作表may not change sheets调用的函数是正确的(如果尝试使用技巧来解决这个问题,您可能会run into problems),但直接的问题是{{1} }是有效的Excel范围地址(第13403列(sum2014),第2014行),因此,当您尝试执行SUM时出现#REF!错误。就像您的函数被称为=SUM2014("A1151")一样。

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

如果需要从例程中更改各种单元格,请将其作为子对象并从外部事件(例如按钮按下或#VAL!处理程序)中调用它,而不是从单元格中的公式进行调用。 / p>