Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EXCEL 2016 VBA:工作表函数.Power()未返回数字_Excel_Vba_Function_Numbers - Fatal编程技术网

EXCEL 2016 VBA:工作表函数.Power()未返回数字

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

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

当我运行代码时,收到以下错误消息:

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

但是,避免Fact()问题相对容易:我只写了一个条件语句,如下所示:

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