我在Excel中有一个自定义函数,它处理作为参数传入的日期。它通常工作正常,但如果我直接传入NOW()作为参数,它会导致#VALUE!错误。但是,如果我将NOW()放在一个单元格中,并将该单元格作为参数传递它。我在Excel 2007和Excel 2016中都尝试了这一点,它们都有相同的结果。
我做了一个简单的功能来强调这个(而不是我原来的功能):
更令人困惑的是,如果我在代码中放置一个Stop并逐步执行它,NOW()中的值实际上已经传入并且函数正确运行。但是在电子表格中它仍然显示为#VALUE!错误。
有谁知道为什么会这样,以及让它发挥作用的方法?就像我说的,我知道我可以使用= NOW()添加一个列并使用该单元格作为参数,但我希望能够在不采取额外步骤的情况下完成此操作。
答案 0 :(得分:1)
传入范围地址时,参数将作为范围Object
传递,然后在函数内成功评估。但是当您传递实际Date
时,传递的参数不是 VBA 中的对象,因此调用失败。
如果你将功能原型改为:
,一切都会好的Function doStuff(inputThing as Variant)
VBA中的Variant
参数根据定义可以匹配任何,因此您可以传递范围对象和原始值。