我在EXCEL 2016 VBA中的WorksheetFunction.Power()函数遇到了与此处讨论的有关Fact()函数的问题类似的问题:
https://www.excelforum.com/excel-general/468208-range-of-factorial-function.html
当我运行我的代码时,我收到此错误消息:
对于大数字,Power()函数不返回数字。以下是电子表格中的快速演示:
但是,避免Fact()问题相对容易:我只是编写了一个这样的条件语句:
If NTestvar < 170 Then
KS = WorksheetFunction.Fact(NTestvar)
Else
KS = 7.2574E+306
End If
然而,有这么多基数/指数组合,这是一个更多维度。我尝试了这个,但仍然得到相同的消息:
If IsNumeric(WorksheetFunction.Power(NTestvar, NTestvar)) = True Then
KS_2 = 1 - ((2 / WorksheetFunction.Power(NTestvar, NTestvar))
Else
KS_2 = 1 - (2 / 1.79769313486232E+308)
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
= -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