Excel 自定义函数错误更新

Posted

技术标签:

【中文标题】Excel 自定义函数错误更新【英文标题】:Excel custom function incorrectly updating 【发布时间】:2012-05-24 07:30:10 【问题描述】:

我正在尝试编写(我的第一个)自定义函数,该函数本质上将循环通过报告来总结未来 1、3、6 个月(等)内机器的成本

该函数返回值,但是,这些值不正确,并且在包含自定义函数的单元格上更成问题地 double 会更改使用自定义函数的周围单元格的值。

我正在处理的代码在这里:

Option Explicit

Dim months As Integer 'a month is considered as 30 days
Dim cost As Long
Dim FleetData As Range
Dim rowCounter As Long
Dim lastRow As Long
Dim firstRow As Long
Dim component As Range
Dim dateOfAction As Range
Dim totalApprox As Range
Dim dateHorizon As Date 'Date to which the user wants to total the maintenance cost for

Private Function totalCosts(xMonths As Range)
'Dim totalCosts As Long
Application.Volatile

dateHorizon = Date + (30 * months)

firstRow = [A10].Row
rowCounter = firstRow
lastRow = Range("A65000").End(xlUp).Row
Set FleetData = [A10:S14]

If IsNumeric(xMonths.Value) Then months = xMonths.Value Else
If IsDate(xMonths.Value) Then months = (xMonths.Value - Date) / 30
cost = 0
    Do While rowCounter < lastRow
        Set component = Range(Cells(rowCounter, 1), Cells(rowCounter, 19))
        Set dateOfAction = Cells(rowCounter, 7)
        Set totalApprox = Cells(rowCounter, 12)
        If dateOfAction <= dateHorizon Then
            cost = cost + totalApprox
        End If
        totalCosts = cost
        rowCounter = rowCounter + 1
    Loop

End Function

我使用的数据是:

DateOfAction totalApprox 
5/07/2014    $30,068.62 
24/05/2005   $6,300.00 
5/07/2012    $29,742.00
5/07/2012    $4,360.28
27/12/2012   $5,555.89

单击一个单元格似乎会改变值,但没有可识别的顺序。

谷歌搜索并查看了here,但到目前为止似乎没有任何解决问题的方法。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

一些提示和检查事项:

    不要使用模块范围的变量(除非您需要与其他模块共享这些变量。即便如此,通常也有更好的方法) 除非你真的需要,否则不要使用 Volatile(我认为你在这种情况下不会这样做) 将所有范围作为参数传递给函数 如果您必须使用直接范围引用,请记住诸如Range(...Cell(... 之类的非限定引用指的是活动工作表上的范围。如果您的数据表未激活,此 UDF 将返回意外结果。请改用Worksheets("Sheet1").Range(... 之类的东西。但我再说一遍,将范围引用作为参数传递给函数要好得多。 您的代码在设置之前引用了变量months。 如果您在单元格中的公式中调用 UDF,尝试设置单元格值(如 totalCosts = cost将不起作用。这在您提供的链接中明确说明(您不能直接制作 VBA UDF: 列表的第一点)。另一方面,如果您从 Sub 调用 UDF 并将该 Sub 作为宏运行,它工作。

如果您提供数据布局的完整详细信息以及您希望如何使用 UDF,我可以提供更具体的建议。

【讨论】:

我意识到我的代码计划得多么糟糕。谢谢你的提醒。我试图在 UDF 中投入大量精力,并在我真正需要宏时真正尝试使用函数。非常感谢您的提醒和对迟到的回复表示歉意

以上是关于Excel 自定义函数错误更新的主要内容,如果未能解决你的问题,请参考以下文章

从自定义 VBA 函数(非子函数)写入 Excel 工作表

SQL自定义函数返回记录

用PowerBI自定义函数批量处理复杂表格

帆软自定义函数其他系统也要用怎么做

Excel 自定义函数

具有单元格引用输入的自定义函数