我如何确定我的函数正在工作的工作簿中的工作表名称?

想象一下,我有一个包含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。