【问题标题】:When a cell with list validation gets updated (user selects different value from list), another cell automatically updates当具有列表验证的单元格更新(用户从列表中选择不同的值)时,另一个单元格会自动更新
【发布时间】:2015-04-03 13:39:15
【问题描述】:

我有一个具有列表验证的单元格,用户可以从名称列表中进行选择。当用户选择一个名称(来自“C7”中的列表验证)时,我希望“C9”中它正下方的一个单元格自动调用我在名为CalculateGrade()的类模块中编写的函数。如何从列表验证中选择不同名称的用户触发单元格值更改事件以在不同的单元格中执行函数 CalculateGrade()?

【问题讨论】:

标签: vba excel excel-2010 spreadsheet


【解决方案1】:

您的函数不会重新计算,因为它无法知道改变值的单元格(例如 C7)会改变其结果。您应该编写函数以将 C7 作为参数传递给它。一旦此函数将 C7 作为 precedent,C7 中的任何更改都将触发函数的重新计算。

您已决定对 CalculateGrade() 函数的代码保密,但它可能是这样的:

function CalculateGrade()
    dim tmp as double, str as string

    str = range("C7").value
    'do something here to get a grade from the name in C7
    CalculateGrade = tmp

end function

应该这样写:

function CalculateGrade(rList as range)
    dim tmp as double, str as string

    str = rList.value
    'do something here to get a grade from the new name in C7 (aka rList)
    CalculateGrade = tmp

end function

这个修改后的函数不像=CalculateGrade()那样调用;它被称为=CalculateGrade(C7)。以 C7 作为函数的先例,C7 中的任何更改都会重新计算函数并返回新值。

UDF 可以利用本机工作表函数可用的所有工具 公式 ► 公式审核组中的命令是强大的诊断工具,但未得到充分利用。 Find and correct errors in formulas 中对可用的审计工具进行了很好的讨论。确定先例在Display the relationships between formulas and cells 部分。

还有一个使用 Application.Volatile Method 的替代方法,只要工作簿中的任何内容发生更改,该函数就会重新计算,但作为先例传入包含列表验证的单元格会提供更多功能并且不会锁定您可以使用单个单元格进行列表验证,就像对单元格地址进行硬编码一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多