创建Excel函数以返回工作表的名称

创建Excel函数以返回工作表的名称,excel,vba,function,Excel,Vba,Function,我试图创建一个函数来返回函数所在的工作表的名称。但是,下面的代码返回函数所在的活动工作表,而不是静态工作表。 我以前有一个标准的excel公式来给我工作表的名称,如果vba无法返回函数所在的工作表,我可以返回到这个公式 图纸名称“TTD” Excel公式 +文件表名称(C1) =TTD VBA函数 Function FileSheetName(aCellLocation) Application.Volatile aCellLocation = aCellLocation.A

我试图创建一个函数来返回函数所在的工作表的名称。但是,下面的代码返回函数所在的活动工作表,而不是静态工作表。 我以前有一个标准的excel公式来给我工作表的名称,如果vba无法返回函数所在的工作表,我可以返回到这个公式

图纸名称“TTD”

Excel公式 +文件表名称(C1)

=TTD

VBA函数

Function FileSheetName(aCellLocation)

    Application.Volatile

    aCellLocation = aCellLocation.Address
    Set aCellLocation = Range(aCellLocation)
    aSheetName = aCellLocation.Parent.Name

    FileSheetName = aSheetName

End Function

您的函数参数已经是一个范围-无需获取地址,然后从中创建一个范围:

Function FileSheetName(aCellLocation As Range)
    Application.Volatile 
    FileSheetName = aCellLocation.Parent.Name
End Function
在这里:


范围的范围默认为活动工作表:这就是为什么当带有公式的工作表不是所选工作表时,您的结果是错误的。

您的函数参数已经是一个范围-无需获取地址,然后从中创建一个范围:

Function FileSheetName(aCellLocation As Range)
    Application.Volatile 
    FileSheetName = aCellLocation.Parent.Name
End Function
在这里:


范围的范围默认为活动工作表:这就是为什么当带有公式的工作表不是所选工作表时,结果是错误的。

您可以使用application.caller: 不需要使用范围,因为range.parent.name将给出范围的sheetname,而不是函数所在的位置(可能不同)


您可以使用application.caller: 不需要使用范围,因为range.parent.name将给出范围的sheetname,而不是函数所在的位置(可能不同)


太好了,正是我想要的!我喜欢答案这么简单。太棒了,正是我想要的!我喜欢答案如此简单。
Function FileSheetName2()
    FileSheetName2 = Application.Caller.Parent.Name
End Function