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

问题描述 投票:2回答:2

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

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

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

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

excel vba excel-vba
2个回答
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)的单元格并使用Home选项卡和Number组将数字格式General设置为它。

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.