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
我想在 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