【问题标题】:Unable to get correl property of the worksheetfunction class Error无法获取工作表函数类错误的相关属性
【发布时间】:2018-05-15 17:10:41
【问题描述】:

当我尝试获取两个数组 Arr1Arr2 的相关系数时,我在 VBA 中遇到此错误

Dim arr1() As Variant
Dim arr2() As Variant

arr1 and arr2 are initialized in the function.

Dim result As Double
result = Application.WorksheetFunction.Correl(arr1, arr2)

Correl 方法抛出异常

“无法获取工作表函数类的相关属性”

知道异常的原因是什么。

编辑:

我认为当数组之一的所有元素都相同时会出现此问题。在这种情况下,相关系数会导致#DIV0 错误。

谢谢

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    基兰,

    防止此错误的两种可能的解决方案...但是查看您的数据会更有帮助

    1. 一个(或两个)变量数组包含字符串而不是数字
    2. 您的数组大小不相等

    【讨论】:

    • 我注意到其中一个数组(arr1)的所有值都是 1。corr 导致 #DIV0 错误。我认为,这就是为什么它给出“无法获得工作表函数类的相关属性”的原因。你认为这是问题吗
    • @kiranchandrashekhar 是的 - 这就是问题所在。
    【解决方案2】:

    我想你忘记初始化你的数组了。

    这个非常简单的例子有效:

    Public Sub Test()
        Dim arr1() As Variant
        Dim arr2() As Variant
        Dim result As Double
    
        arr1() = Array(1, 2, 3, 4)
        arr2() = Array(1, 2, 3, 4)
    
        result = Application.WorksheetFunction.Correl(arr1, arr2)
    
        MsgBox ("The result is: " & result)
    End Sub
    

    【讨论】:

    • 否 - 省略 arr1arr2 的值会产生与发布的错误不同的错误。
    • 哦,对不起,我忘了粘贴那部分代码。数组被初始化。数组arr1arr2 是函数的参数。
    • @KiranChandrashekhar:那你为什么不现在粘贴而不是强迫我们猜测......你应该编辑你的问题。
    【解决方案3】:

    与许多工作表函数一样,Application.WorksheetFunction.Correl 的参数必须具有 Range,而不是 Variant 类型。

    另外,在Correl 函数中,这两个范围中的任何一个的标准差都不能为 0。

    空值而不是零有时也会导致此错误。

    不遵守这些规则,会导致 OP 遇到完全相同的错误。

    Dim A as Range, B as Range
    Dim myStDevA as Double, myStDevB as Double, myCorrel as Double
    
    myStDevA = Application.WorksheetFunction.StDev(A)
    myStDevB = Application.WorksheetFunction.StDev(B)
    
    If myStDevA <> 0 and myStDevB <> 0 Then myCorrel = Application.WorksheetFunction.Correl(A,B)
    

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2020-09-21
      • 1970-01-01
      相关资源
      最近更新 更多