我如何确定我的函数正在工作的工作簿中的工作表名称?
想象一下,我有一个包含3个选项卡,SheetA,SheetB和SheetC的xls工作簿。 我想写一个简单的VBA函数,它返callback用该函数的表的名称。
Function SheetName as String SheetName = ??? End Function
所以如果我在TabB中调用= SheetName(),它总是返回SheetB。
注意:
ActiveSheet.Name
不起作用,因为如果您在SheetA上并计算工作簿,它将返回SheetA。
这工作:
Function SheetName as String SheetName = Application.Caller.Worksheet.Name End Function
我应该提到,作为一个实际的问题,在任何函数中使用这样的调用者敏感特性都应该非常谨慎。 之后当你(或者更糟糕的是,别人)正在尝试debugging某些东西的时候,如果你没有意识到这个函数在从代码或者debugging器/立即窗口中调用时的行为是不同的,那么这可能是一场真正的噩梦。在实际使用中。
你可以做这样的事情:
Function sheetName(rng As Range) As String sheetName = rng.Parent.Name End Function
只要通过表单所调用的范围(即使是公式相同的范围)。
在Sheet1中,
=sheetName(A1)
返回Sheet1
在Sheet2中
=sheetName(Sheet1!A1)
还返回Sheet1。