EXCEL 2016 VBA:WorksheetFunction.Power()不返回数字

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

我在EXCEL 2016 VBA中的WorksheetFunction.Power()函数遇到了与此处讨论的有关Fact()函数的问题类似的问题:

https://www.excelforum.com/excel-general/468208-range-of-factorial-function.html

当我运行我的代码时,我收到此错误消息:

enter image description here

对于大数字,Power()函数不返回数字。以下是电子表格中的快速演示:

enter image description here

但是,避免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

任何帮助表示赞赏。

excel vba function numbers
2个回答
1
投票

如果它被抛出,可能最容易处理错误。将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它会抛出“除以零”。


0
投票

我最终概括了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
© www.soinside.com 2019 - 2024. All rights reserved.