我编写了一个函数,用于计算工作簿中特定工作表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循环来清理函数,但现在我只想让函数在工作簿中运行,然后稍后重新编写。
答案 0 :(得分:6)
从工作表may not change sheets调用的函数是正确的(如果尝试使用技巧来解决这个问题,您可能会run into problems),但直接的问题是{{1} }是有效的Excel范围地址(第13403列(sum2014
),第2014行),因此,当您尝试执行SUM
时出现#REF!
错误。就像您的函数被称为=SUM2014("A1151")
一样。
公式中可用的名称可能看起来不像有效的Excel范围。选择另一个名称(并确保不要从该函数更改其他单元格,否则将发生A1
错误)。
如果需要从例程中更改各种单元格,请将其作为子对象并从外部事件(例如按钮按下或#VAL!
处理程序)中调用它,而不是从单元格中的公式进行调用。 / p>