Application.Caller对象需要错误

时间:2015-03-16 07:42:44

标签: excel vba excel-vba

如何从函数中获取当前工作表(非活动工作表)的名称? “当前表”是指放置和调用功能的表名。

我试着像那样

Function MySheet()

   MySheet = Application.Caller.Worksheet.Name
MsgBox MySheet
End Function

但我得到了错误对象。

2 个答案:

答案 0 :(得分:3)

您将不得不小心如何调用该功能。你提供了很多关于你想用它做什么的细节。

Function MySheet()
    Select Case TypeName(Application.Caller)
        Case "Range"
            MySheet = Application.Caller.Parent.Name
        Case "String"
            MySheet = Application.Caller
        Case "Error"
            MySheet = "Error"
        Case Else
            MySheet = "unknown"
    End Select
End Function

上面至少尝试在使用它来确定相关工作表对象的名称之前,先确定Application.Caller是什么。

您可以在Application.Caller Property (Excel)了解更多信息。

答案 1 :(得分:-2)

Is it Me you're looking for?

  

http://www.formulaoldies.com/uploads/2012/06/Lionel-Richie.jpg

MsgBox Me.Name

如果你所说的“功能放置的工作表名称”是指放置功能代码的Sheet模块,那么这就是你想要的。 (Documentation)。

但是,如果您的意思是,包含从中调用用户定义函数的单元格的工作表,您可以使用:

MsgBox Application.Caller.Parent.Name

Application.Caller返回一个引用该单元格的Range对象;这个范围的Parent就是表格。