EXCEL 2016 VBA:工作表函数.Power()未返回数字
我在EXCEL 2016 VBA中的WorksheetFunction.Power()函数中遇到了与此处讨论的Fact()函数类似的问题: 当我运行代码时,收到以下错误消息: 对于大数字,Power()函数不返回数字。以下是电子表格中的快速演示: 但是,避免Fact()问题相对容易:我只写了一个条件语句,如下所示:EXCEL 2016 VBA:工作表函数.Power()未返回数字,excel,vba,function,numbers,Excel,Vba,Function,Numbers,我在EXCEL 2016 VBA中的WorksheetFunction.Power()函数中遇到了与此处讨论的Fact()函数类似的问题: 当我运行代码时,收到以下错误消息: 对于大数字,Power()函数不返回数字。以下是电子表格中的快速演示: 但是,避免Fact()问题相对容易:我只写了一个条件语句,如下所示: If NTestvar < 170 Then KS = WorksheetFunction.Fact(NTestvar) Else KS = 7.2574
If NTestvar < 170 Then
KS = WorksheetFunction.Fact(NTestvar)
Else
KS = 7.2574E+306
End If
非常感谢您的帮助。如果抛出错误,可能最容易处理。在它自己的函数中包装
Power
,可能也会更整洁
Sub Demo()
Dim KS_2 As Double
On Error GoTo EH
KS_2 = MyPower(100, 200)
Debug.Print "KS_2 = ", KS_2
Exit Sub
EH:
Err.Raise Err.Number
End Sub
Function MyPower(Base As Double, Exp as Double) As Double
On Error GoTo EH
MyPower = 1# - (2# / WorksheetFunction.Power(Base, Exp))
Exit Function
EH:
If Err.Number = 1004 Then
MyPower = 1#
Else
Err.Raise Err.Number
End If
End Function
请注意,您的函数可能会抛出其他错误,例如,如果
NTestvar
=say-1000,它会抛出一个“零除” 我最终推广了Chris的方法,并编写了这个函数,我可以在我的应用程序的其他部分使用它(对于我来说,指数是正定的,所以我不需要担心这种可能性)。非常感谢克里斯!!你的方法是正确的
Function MyPower(Base As Variant, Exp As Variant) As Double
On Error GoTo MyPowerErr
MyPower = WorksheetFunction.Power(Base, Exp)
Exit Function
MyPowerErr:
MyPower = 1.79769313486232E+307
End Function
谢谢你的回复。是的,我在问问题之前读过那篇文章:这就是为什么我用1.79769313486232E+308这个数字——我从那篇文章中得到的。但是,我的问题不是变量类型问题:我没有将结果存储在发生错误的语句中的变量中:If IsNumeric(WorksheetFunction.Power(NTestvar,NTestvar))=True然后是
KS_2
声明为double?错误发生在KS_2赋值语句之前的IF语句中。我认为IsNumeric有一个限制。测试时,1.0e309
抛出溢出错误,而1.0e308
没有。谢谢Chris!这是一条重要的路线。我把它加在上面了。
Function MyPower(Base As Variant, Exp As Variant) As Double
On Error GoTo MyPowerErr
MyPower = WorksheetFunction.Power(Base, Exp)
Exit Function
MyPowerErr:
MyPower = 1.79769313486232E+307
End Function