运行时错误'1004':无法获取WorksheetFunction类的Combin属性

时间:2014-07-21 21:50:01

标签: excel vba excel-vba

我在Excel 2013中的工作簿中具有VBA功能,可根据泊松分布计算p值。当下面的代码中的 events 变量超过1029时,我得到运行时错误'1004':无法获取WorksheetFunction类的Combin属性。只要events1和events2的总和保持在1029或更低,就没有问题,宏也能正常执行。

是否有人知道如何通过更高的数字使其正常运行?非常感谢任何指导!

Sub poisson_meansB()
    Dim events1 As Long
    Dim events2 As Long
    Dim days1 As Long
    Dim days2 As Long

    events1 = Sheet1.Range("B6").Value
    events2 = Sheet1.Range("C6").Value
    days1 = Sheet1.Range("B7").Value
    days2 = Sheet1.Range("C7").Value

    If events2 > 0 Then
    events = events1 + events2
    p_c = days1 / (days1 + days2)
    p_lo = 0
    p_hi = 0
    For i = 0 To events1
        poisson_p_value_term = Application.WorksheetFunction.Combin(events, i) * Application.WorksheetFunction.Power(p_c, i) * Application.WorksheetFunction.Power(1 - p_c, events - i)
        p_lo = p_lo + poisson_p_value_term
    Next i
    For i = events1 To events
        poisson_p_value_term = Application.WorksheetFunction.Combin(events, i) * Application.WorksheetFunction.Power(p_c, i) * Application.WorksheetFunction.Power(1 - p_c, events - i)
        p_hi = p_hi + poisson_p_value_term
    Next i
    p = Application.WorksheetFunction.Min(2 * p_lo, 2 * p_hi)
    Sheet1.Range("C13") = p
    Else
    Sheet1.Range("C13") = "-"
    End If
End Sub

2 个答案:

答案 0 :(得分:2)

在Excel 2013中,公式可以返回的最大正数是1.7976931348623158e + 308在您描述的情况下,您的数字可能会大于某个值。您可以通过尝试使用变量的因子在工作表上执行COMBIN函数并查看它是否返回#NUM错误来确认这一点。

一种可能的解决方案是安装XNumbers add-in并使用其xComb_big函数。 XNumbers是一个免费的工具,允许使用大量和更高的精度。它据说适用于97-2010的Excel版本。我不知道它是否适用于2013.但如果确实如此,它可以配置为使用高达2147000000的指数和高达32760个有效数字(你可能不需要那么多,但它是可配置的,并且默认安装的位数较少。)

答案 1 :(得分:-1)

如果您明确声明所有变量,我打赌这个问题就会消失: eventsp_cp_lop_hiipoisson_p_value_term