【问题标题】:How to refer to the workbook where a function is used in Excel VBA?如何参考 Excel VBA 中使用函数的工作簿?
【发布时间】:2019-07-20 03:06:28
【问题描述】:

我创建了一个名为SheetAtIndex 的用户定义函数,它返回工作簿中指定索引处的工作表名称。

起初我使用ActiveWorkbook.Sheets(Index).Name 来获取工作表的名称。每当我切换到另一个打开的工作簿时,结果就会变得一团糟。 这并不奇怪。

ThisWorkbook.Sheets(Index).Name 工作了一段时间,直到我意识到我必须在每个需要 UDF 的工作簿中复制代码。此外,每个需要该功能的文件都必须保存为启用宏的工作簿

最终决定:把函数放到我的个人宏本里。

问题:如何引用将从中调用函数的工作簿/工作表?

【问题讨论】:

  • 除了Application.ThisCell,您还可以查看Application.Caller。见here

标签: excel vba


【解决方案1】:

UDF 可以获取对使用 Application.ThisCell 调用它的单元格的引用

一旦您引用了调用单元格,您就可以从那里获取工作表 (.WorkSheet) 和工作簿 (.WorkSheet.Parent)

Function SheetAtIndex(Index As Variant) As String
    SheetAtIndex = Application.ThisCell.Worksheet.Parent.Worksheets(Index).Name
End Function

或者,获取对工作表的引用

Function SheetAtIndex(Index As Variant) As Worksheet
    Set SheetAtIndex = Application.ThisCell.Worksheet.Parent.Worksheets(Index)
End Function

【讨论】:

  • 为什么Index参数被指定为Variant?
  • 为什么将 Index 参数指定为 Variant?:习惯。如果这是 all 您正在使用此 UDF 进行操作,那么将其键入为 Long 就可以了。我倾向于为 UDF 使用 Variant 参数,这样我就可以访问传递的范围对象(如果传递了一个范围)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 2011-04-22
相关资源
最近更新 更多