我从一本书中学习VBA,其中的示例函数是:
Function CubeRoot(number)
CubeRoot = number ^ (1 / 3)
End Function
如果我从子程序中调用该函数,我会得到正确的结果,但是当我尝试直接在Excel中使用它时,我得到一个" FALSE "导致细胞。我一步一步跟着这本书,并没有说要做任何我没做过的事情。我错过了什么/做错了或者我需要改变一些选择?我正在使用 Excel 2016 。
修改
这是我在excel单元格中写的内容:=CubeRoot(8)
我得到的结果是 FALSE 。但是,如果单击fX
按钮并弹出功能参数框,则会正确计算显示的公式结果。
答案 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也会产生整数。