0

我正在 VBA 中设计一个 myFunction(x,y,z) 形式的函数,其中 z 是一个表,x 可以采用列标题的值。作为函数的一部分,我需要找到 z 中的行数。

我遇到了这个问题,因为我在任何地方都建议使用length = z.Rows.Count,但是当我尝试输出这个值(如 set myFunction = length)时,它会产生一个 VALUE 错误。但是,当我输出myFunction = a不直接使用length的内容时(一旦我让它工作,它最终将成为 IF 语句的一部分),该函数工作正常。我的代码如下:

Public Function myFunction(x As String, y As Double, z As Range) As Double

    Dim upper_threshold As Double
    Dim lower_threshold As Double
    Dim a As Double

    Dim rates As Variant

    Dim u As Byte
    Dim l As Byte
    Dim r As Byte

    Dim length As Byte


    a = 0

    u = 2
    l = 1

    rates = Application.WorksheetFunction.Index(z, 1, 0)
    r = Application.WorksheetFunction.Match(x, rates, 0)

    length = z.rows.Count

    upper_threshold = z(u, 1)

    Do While y > upper_threshold

        u = u + 1
        l = l + 1

        upper_threshold = z(u, 1)
        lower_threshold = z(l, 1)

        If y < upper_threshold Then
            a = a + z(l, r) * (y - lower_threshold)
        Else
            a = a + z(l, r) * (upper_threshold - lower_threshold)
        End If

    Loop

myFunction = a

End Function

为了测试它,我还创建了另一个函数:

Public Function myRows(myTable As Range) As Double

    myRows = myTable.rows.Count

End Function

这个单独工作正常,但是当我尝试在另一个函数中使用它时,我仍然得到一个 VALUE 错误。我尝试将长度声明为我能想到的每种类型,但这似乎没有帮助。

谁能看到发生了什么?

编辑:我显然不是很清楚。没有两行引用长度的函数按我的意图工作。但是,我需要添加一些代码来增加它的功能,这涉及计算表 z 中的行数。当我将此处显示的两行添加到函数中时,它会继续工作,因为它不会影响输出。但是,如果我将输出设置为显示长度,即将倒数第二行更改为myFunction = length它会给我一个 VALUE 错误。据我所知,这给我留下了两个选择:要么程序中的其他东西影响了这两行(一些语法冲突或其他东西),要么我只是假设我可以length这样输出而犯了一个错误。

4

1 回答 1

1

你的问题是:

rates = Application.WorksheetFunction.Index(z, 1, 0)

Index只接受单行或单列,否则会VALUE出错。

于 2013-08-28T13:33:06.737 回答