我正在 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
这样输出而犯了一个错误。