【发布时间】:2018-04-26 13:36:05
【问题描述】:
我尝试了一个明显的代码,但它不起作用。
Function SelectedRange(Optional ShiftRow As Long = 0, Optional ShiftColumn As Long = 0) As Range
Set SelectedRange = Selection.Offset(ShiftRow, ShiftColumn)
End Function
输出始终是带有公式的单元格的值(或多或少是 ShiftRow 和 ShiftColumn),即使之后我选择其他单元格并手动重新计算整个工作表。
我做错了什么?
【问题讨论】:
-
鉴于函数的参数没有改变,Excel 不知道它需要重新计算结果值。要强制重新计算该值,您需要使用
Application.Volatile告诉该函数是 volatile -
请注意,选择一个单元格并不需要重新计算,因此即使使用
Application.Volatile,您的单元格也不会更新,除非您强制重新计算或修改其他内容。 -
with Application.Volatile 只有当我按 F9 时才能成功重新计算单元格。
-
正如我所说,选择一个单元格不会强制重新计算(从不),因此只有在另一个单元格值更改或您强制重新计算(使用 F9 或其他方式)时,该值才会更改跨度>
-
如果需要,您可以随时在
SelectionChange事件中添加Application.Calculate。
标签: vba excel user-defined-functions