【发布时间】:2023-03-29 08:57:02
【问题描述】:
在我的第一个用户定义函数(“UDF”)上工作了几天后,我终于得到了一个按预期工作的函数。我的函数的目的是简化一个“索引+匹配+偏移”的excel函数。
例如,这是它的代码:
Public Function DADOSMACRO(Data_I_want As String, Date_I_want As Date) As Double
Application.Volatile
Dim year As Integer
Dim row As Integer
Dim column As Integer
Year = Year(Data_Procurada)
Row = Application.WorksheetFunction.Match(Data_I_want, Range("Macro").Columns(2), 0)
Column = Application.WorksheetFunction.Match(Year, Range("Macro!6:6").Rows(1), 0)
DADOSMACRO = Application.WorksheetFunction.Index(Range("Macro"), row, column)
End Function
问题是,我的函数在我的工作台上的几个工作表上都能完美运行,但我不知道为什么,有一个工作表每次重新计算时都会“破坏”我的 UDF。
所以,如果我去任何其他工作表并按 F9,我的数字就在那里,如果我去那个特定的表格并按 F9,我的整个工作簿就会“损坏”
【问题讨论】:
-
您的函数需要某种方式来知道要查看哪个工作表以进行匹配操作 - 您没有指定工作表,因此
Range()调用默认为 ActiveSheet。这就是为什么当您使用不同的工作表重新计算时它会中断。 -
谢谢蒂姆。 Range() 上设置的“宏”是 excel 上的命名范围。我的 UDF 可以在其他 7 张纸上使用,但新的纸是唯一不起作用的。
-
想想你的难过,我就知道是哪里出了问题。
标签: excel vba user-defined-functions