我在VBA中设计一个myFunction(x,y,z)形式的函数,其中z是一个表,x可以取列标题的值。作为函数的一部分,我需要在z中找到行数。
我遇到了这方面的问题,因为我看起来建议使用length = z.Rows.Count
,但当我尝试输出此值(如设置myFunction = length
)时,会产生VALUE错误。但是,当我输出不直接使用myFunction = a
的{{1}}时(一旦我使它工作,它最终将成为IF语句的一部分),该函数工作正常。我的代码如下:
length
为了测试它我还创建了另一个函数:
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
这个可以自行运行,但是当我尝试在其他函数中使用它时,我仍然会收到VALUE错误。我已经尝试将长度称为我能想到的每种类型,并且似乎没有帮助。
有谁能看到发生了什么?
编辑:我显然不是很清楚自己。没有引用长度的两行的功能按照我的意图工作。但是,我需要添加一些代码来增加其功能,这涉及计算表z中的行数。当我将这里显示的两行添加到函数中时,它继续工作,因为它不会影响输出。但是,如果我然后将输出设置为显示长度,即将倒数第二行更改为Public Function myRows(myTable As Range) As Double
myRows = myTable.rows.Count
End Function
,则会给出一个VALUE错误。据我所知,这让我有两个选择:程序中的其他东西正在影响这两行(语法或某些东西的冲突),或者我假设我可以输出{{1像那样。
答案 0 :(得分:1)
你的问题在于:
rates = Application.WorksheetFunction.Index(z, 1, 0)
Index
只接受一行或一列,否则会出现VALUE
错误。