VBA - 函数无法使用来自其他工作表的输入

VBA - Function doesn't work using inputs from other worksheets

我想在 VBA 中创建一个函数,returns 用户指定区间内两个价格之间的变化。为此,我创建了以下函数:

Public Function ret(p, i)

    ret = (p / Cells((p.Row - i), p.Column)) - 1

End Function

其中输入 'p' 代表价格向量的最后一次观察,输入 'i' 指的是我想在价格向量中向上移动的周期数。

当我使用定义该函数的同一个工作表中的输入时,该函数工作正常。但是,当使用来自其他工作表的输入时,函数 returns '#VALUE!'.

缺少什么函数可以工作"globally"?

谢谢!!

我会用

ret = (p / p.parent.Cells((p.Row - i), p.Column)) - 1

cells单独指当前sheet

放置 UDF 代码的正确位置不在 Worksheet_Module 中,这些通常用于与工作表相关的事件,例如 Worksheet_Change 等.

如果您想使用所有工作表中的 UDF,请将其放在常规模块中,以便所有工作表都可用。

此外,您应该正确定义 UDF 参数,不要将它们留空。

在您的情况下,请在常规模块中使用以下代码:

Public Function ret(p As Range, i As Long)

    ret = (p.Value / Cells(p.Row - 1, p.Column)) - 1

End Function

VBAProject Explorer 的屏幕截图

避免Cells:

Public Function ret(p, i)
    If p.Row > i Then
        ret = (p / p.Offset(- i, 0)) - 1
    Else
        ret = "???"
    End If
End Function