我创建了一个名为 的用户定义函数,SheetAtIndex该函数返回工作簿中指定索引处的工作表名称。
起初我习惯于ActiveWorkbook.Sheets(Index).Name获取该表的名称。每当我切换到另一个打开的工作簿时,结果都会变得混乱。这并不奇怪。
ThisWorkbook.Sheets(Index).Name工作了一段时间,直到我意识到我必须在每个需要 UDF 的工作簿中复制代码。此外,每个需要该功能的文件都必须保存为启用宏的工作簿
最终决定:将该函数放入我个人的宏书中。
问题:如何引用调用函数的工作簿/工作表?
UDF 可以获得对调用它的单元格的引用Application.ThisCell
一旦您引用了调用单元格,您就可以从那里获取工作表 ( .WorkSheet) 和工作簿 ( ).WorkSheet.Parent
Function SheetAtIndex(Index As Variant) As String
SheetAtIndex = Application.ThisCell.Worksheet.Parent.Worksheets(Index).Name
End Function
Run Code Online (Sandbox Code Playgroud)
或者,获取工作表的参考
Function SheetAtIndex(Index As Variant) As Worksheet
Set SheetAtIndex = Application.ThisCell.Worksheet.Parent.Worksheets(Index)
End Function
Run Code Online (Sandbox Code Playgroud)