【问题标题】:Excel VBA User Defined Function | Does not work on specific worksheetExcel VBA 用户定义函数 |不适用于特定工作表
【发布时间】: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


【解决方案1】:

在蒂姆的评论之后,我去检查了我的命名范围。我的工作簿过去只有一个命名范围,即范围“宏”。

该错误与我的 Excel 从我同时使用的另一个工作簿导入并复制公式的新命名范围有关。

由于某种原因,旧工作表仍然可以正常工作,因为这些工作表是在新命名范围出现之前创建的。

新工作表是在导入其他命名范围后创建的,因此它不起作用。

我清理命名范围后,UDF 就开始在所有工作表上工作。

问候,

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2019-07-20
    • 2020-08-04
    相关资源
    最近更新 更多