【发布时间】:2016-12-16 06:05:09
【问题描述】:
在 Excel 的 VBA 中,我想创建一个从源单元格中获取值和格式的公式。
目前我有:
Function formEq(cellRefd As Range) As Variant
'thisBackCol = cellRefd.Interior.Color
'With Application.Caller
' .Interior.Color = thisBackCol
'End With
formEq = cellRefd.Value
End Function`
这将返回单元格的当前值。我注释掉的部分在单元格中返回 #VALUE 错误。取消注释时,似乎参考的颜色已保存,但 Application.Caller 返回 2023 错误。这是否意味着 this 没有返回所需的 Range 对象?
如果是这样,我如何获取引用该函数所使用单元格的范围对象? [显然是为了将颜色设置为源值]。
【问题讨论】:
-
用作 UDF 的函数只能返回一个值 - 它们本身无法更改调用它们的单元格或其他单元格的任何其他内容。
-
没有别的办法吗?这似乎是 VBA 应用程序中的一个巨大且非常奇怪的缺陷。可能有充分的理由,但 VBA 处理范围对象的方式似乎不一致。
-
我可以在函数之外调用一个单独的子程序吗?或者我可以通过其他方式解决这个问题吗?我猜这可能与 Excel 在源单元格更改值时所做的持续更新有关。
-
这是一种似乎可用的方法,但您需要进行测试以确保它不会产生任何意外后果:stackoverflow.com/questions/23433096/…
-
如果您需要引用调用单元格(例如使用
Application.Caller或Application.ThisCell),那么您可以在UDF 本身中执行此操作,并将地址作为参数传递给使用调用的代码Evaluate。为了安全起见,最好让 UDF 向调用单元格返回一个值,并且不要让 Evaluate'd 代码更新该单元格,否则您很可能会陷入循环。