将NOW()作为Excel自定义函数中的parameter passing给了#VALUE! 错误?

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

我做了一个简单的函数来突出显示(而不是我原来的function):

#值! 错误

更令人困惑的是,如果我在代码中放入一个Stop,并且通过它,NOW()的值确实会被传入,函数将正确运行。 但在电子表格中,它仍然显示为#VALUE! 错误。

传入的价值

有谁知道为什么发生这种情况,并使其工作? 就像我说的,我知道我可以添加一个= NOW()列,并使用该单元格作为参数,但我希望能够做到这一点,而不需要额外的步骤。

当你传递一个范围地址时,这个参数将作为一个范围Object传递,然后在你的函数中成功地进行评估。 但是当你传递一个实际的Date ,传入的参数不是VBA中的一个对象,所以调用失败。

一切都会好起来的,如果你改变你的函数原型:

 Function doStuff(inputThing as Variant) 

VBA中的Variant参数被定义为可以匹配任何东西的东西 ,所以你可以传递它的范围对象以及原始值。