Excel 如何在VBA中创建一个用户定义函数,将调用用户定义函数的单元格替换为另一个公式?

Excel 如何在VBA中创建一个用户定义函数,将调用用户定义函数的单元格替换为另一个公式?,excel,vba,Excel,Vba,例如,我有一个用户定义的函数,但如果我使用=Hours\u alot()它将导致单元格填充字符串“=min(8,[@[Hours Worked]])”,而不是替换excel中的公式,如下图所示: 您应该在单元格赋值的末尾添加.FormulaLocal,以便在excel中将其作为公式读取 工作表。单元格[1,1]。FormulaLocal=Hours\u allocated()但是为什么使用能够创建公式而不是公式结果的公式呢。当然,在VBA函数中计算…自定义项只能用于设置值,而不能用于设置公式。

例如,我有一个用户定义的函数,但如果我使用
=Hours\u alot()
它将导致单元格填充字符串
“=min(8,[@[Hours Worked]])”
,而不是替换excel中的公式,如下图所示:


您应该在单元格赋值的末尾添加
.FormulaLocal
,以便在excel中将其作为公式读取


工作表。单元格[1,1]。FormulaLocal=Hours\u allocated()

但是为什么使用能够创建公式而不是公式结果的公式呢。当然,在VBA函数中计算…

自定义项只能用于设置值,而不能用于设置公式。如果函数返回的公式与您的示例类似,那么您必须在代码中使用它(如下面的示例所示),而不是作为UDF使用。我认为这是不幸的。我想我可以通过使用UDF简化我的代码。我的问题是,我必须使用事件来实际激活代码,这很麻烦,因为当单元格被更改或工作表被激活/停用(对于我的情况)时,通常会触发事件,有时单元格不会更新或更新太频繁,并且更容易出错。我曾经在没有VBA的情况下硬编码单元格中的所有条件,但这是一个半页到一页长的公式——这太难查看,并且由于嵌套循环太多而容易出错。但是现在我考虑到,这种方法也很容易出错,因为一旦UDF可以被硬编码的公式替换,就不会考虑对数据的更改公式我想使用事件是实现自动化的一种方式,尽管我在问这个问题时考虑到了自动化。但如上所述,UDF不可能将其替换为公式。我希望它能为使用excel工作表的用户带来视觉效果。但显然这是不可能的,这使得它更容易出错,灵活性也更低。因此,我想我坚持在VBA函数中计算。在VBA中重现工作表函数并不复杂。随便你怎么说都行。但它应该返回结果。。。
Function Hours_allotted()
    Hours_allotted = "=min(8, [@[Hours Worked]])"
End Function