【问题标题】:UDF works in VBA, returns #REF! in workbookUDF 在 VBA 中工作,返回 #REF!在工作簿中
【发布时间】:2020-04-09 12:18:25
【问题描述】:

我编写了一个函数,计算工作簿中特定工作表的 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 循环来清理该函数,但现在我只想让该函数在工作簿中工作,然后稍后重新重写。

【问题讨论】:

  • 除了调用单元格之外,您不能让 UDF 更改工作表
  • 只是为了确保我理解你,我的 UDF 不能更改值,除非在我输入 UDF 的单元格中?因此,如果我将我的 UDF 放在单元格 A25 中,但想将总销售额的值返回到单元格 E3 中,我不能?

标签: excel vba


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多