无法获得vba函数以返回正确答案

时间:2017-12-25 05:11:53

标签: excel vba excel-vba

我从一本书中学习VBA,其中的示例函数是:

Function CubeRoot(number)
CubeRoot = number ^ (1 / 3)
End Function

如果我从子程序中调用该函数,我会得到正确的结果,但是当我尝试直接在Excel中使用它时,我得到一个" FALSE "导致细胞。我一步一步跟着这本书,并没有说要做任何我没做过的事情。我错过了什么/做错了或者我需要改变一些选择?我正在使用 Excel 2016

修改 这是我在excel单元格中写的内容:=CubeRoot(8)我得到的结果是 FALSE 。但是,如果单击fX按钮并弹出功能参数框,则会正确计算显示的公式结果。

2 个答案:

答案 0 :(得分:0)

  

我写了一个excel单元格:= CubeRoot(8)我得到的结果是FALSE

首先尝试正确声明变量类型:

Function CubeRoot(number As Variant) As Double
 CubeRoot = number ^ (1 / 3)
End Function

但我不相信这会有所帮助,因为错误结果会是#VALUE!而不是布尔FALSE

但是^运算符可能会重载。也许是你正在使用的一些AddIn。所以它似乎被重载为一些布尔运算符。

尝试以下方法:

Function CubeRoot(number As Variant) As Double
 CubeRoot = Application.Power(number, (1 / 3))
End Function

如果这有帮助,那么我的怀疑是正确的,您应该通过已安装的AddIns来确定哪一个正在进行奇怪的过载。

如果即使使用Application.Power(number, (1 / 3))也无济于事,那么包含该公式的单元格似乎使用奇怪的数字格式进行格式化。尝试使用General数字格式对其进行格式化。

根据你的提及:“如果我点击fX按钮并弹出功能参数框,那么显示的公式结果就可以正确计算。”,我怀疑它是奇怪的数字格式,而不是前两个怀疑。因此,请选择包含公式=CubeRoot(8)的单元格,并使用主页标签和数字组为其设置数字格式General

最后问题是工作表函数已输入Excel4宏表而不是工作表。可能使用类型xlExcel4MacroSheet使用Sheets.Add Method添加Excel4宏表。但在Excel4宏表中,只有Excel4宏代码可能不是工作表中的默认公式。 Excel4宏是Excel 4.0(1992)中的古代宏语言。由于Excel 5.0(1993)VBA用于Excel宏。

答案 1 :(得分:0)

将所有变量声明为double,并将函数返回类型声明为double。

默认情况下,8被视为整数,因此即使x是单个或双精度,8 * X也会产生整数。