在Excel自定义函数中传递NOW()作为参数会产生#VALUE!错误?

时间:2017-06-23 19:00:00

标签: excel vba function

我在Excel中有一个自定义函数,它处理作为参数传入的日期。它通常工作正常,但如果我直接传入NOW()作为参数,它会导致#VALUE!错误。但是,如果我将NOW()放在一个单元格中,并将该单元格作为参数传递它。我在Excel 2007和Excel 2016中都尝试了这一点,它们都有相同的结果。

我做了一个简单的功能来强调这个(而不是我原来的功能):

#VALUE! error

更令人困惑的是,如果我在代码中放置一个Stop并逐步执行它,NOW()中的值实际上已经传入并且函数正确运行。但是在电子表格中它仍然显示为#VALUE!错误。

Value passed in

有谁知道为什么会这样,以及让它发挥作用的方法?就像我说的,我知道我可以使用= NOW()添加一个列并使用该单元格作为参数,但我希望能够在不采取额外步骤的情况下完成此操作。

1 个答案:

答案 0 :(得分:1)

传入范围地址时,参数将作为范围Object传递,然后在函数内成功评估。但是当您传递实际Date时,传递的参数不是 VBA 中的对象,因此调用失败。

如果你将功能原型改为:

,一切都会好的
Function doStuff(inputThing  as Variant)

VBA中的Variant参数根据定义可以匹配任何,因此您可以传递范围对象和原始值。