3

我正在尝试在我的程序中使用错误函数和免费错误函数。两者都没有工作。我不断收到错误Compile Error: Sub or Function not defined。但是,如果我进入一个单元格并手动尝试使用错误功能,它就可以工作。

这是为什么?如何在我的实际代码中使用它?

误差函数是ERF(x)和互补误差函数是ERFC(x)

下面是一个不起作用的例子:

Sub SeriouslyWHYIsntThisWorking()
    x = 3
    Range("A1") = Erf(x)
End Sub

即使这样也行不通:

Sub PleaseWork()
    Range("A1") = Erfc(1)
End Sub

但是,如果我进入 Excel 并输入=ERF(3)=ERFC(1)输入一个单元格,它就会起作用。

我对此很陌生,可能错过了一些非常简单的东西。帮助将不胜感激!

4

3 回答 3

3

您是否安装/引用了适用于 VBA 加载项的 Analysis Toolpak?(查找 atpvbaen.xls)

ERF函数是该加载项的一部分,它有两个版本(一个用于 Excel 函数,一个用于 VBA),您需要设置正确的版本并由您的项目引用才能使用。

插件是 MSFT 的标准插件,但并非总是默认设置。如果您可以在 Excel 中正常使用它,那么您至少已经设置了 Excel 版本。因此,无论您如何实现/使用该功能,都像您想要的那样使用它需要加载项。这意味着,如果您想与其他人共享此内容,他们将需要安装/激活插件。


要将此答案与提供的其他答案(同样准确和正确)联系在一起,请使用以下方式设置单元格值

Range("A1").value = Application.WorksheetFunction.ERF(x)

或设置一个单元格公式

Range("A1").Formula = "=Erfc(" + x + ")"

将要求最终用户使用加载项。

于 2012-07-23T21:15:24.777 回答
2

试试这个:

Sub ThisShouldWorkNow()
    x = 3
    formula = "=Erfc(" + x + ")"
    Range("A1").Formula = formula
End Sub

完全未经测试,因为我的 Linux 机器上没有 Excel……但我想我明白了——你需要使用 Range 对象的 .Formula 属性。

这里有更多信息:

http://msdn.microsoft.com/en-us/library/office/gg192736.aspx

于 2012-07-23T21:11:57.507 回答
2

要在 vba 中使用工作表公式,您需要将其放在Application.WorksheetFunction.前面。

有些函数确实有 vba 等价物,但(据我所知)不是erfanderfc

于 2012-07-23T21:12:31.810 回答