2013-07-09 15 views
2

想象一下,我有一個包含3個選項卡,SheetA,SheetB和SheetC的xls工作簿。我想寫一個簡單的VBA函數,它返回調用該函數的表的名稱。如何確定我的功能所在的工作簿中的工作表名稱?

Function SheetName as String 
    SheetName = ??? 
End Function 

因此,如果我在TabB中調用= SheetName(),它將總是返回SheetB。

注:

ActiveSheet.Name 

,如果你是在希達不會因爲工作和計算工作簿,它將返回希達。

+2

'SheetName = Application.Caller.Worksheet.Name'? – 2013-07-09 14:44:18

回答

2

你可以做這樣的事情:

Function sheetName(rng As Range) As String 
    sheetName = rng.Parent.Name 
End Function 

只需通過片從(甚至同一範圍的公式是)調用的範圍內。

在Sheet1,

=sheetName(A1) 

返回工作表Sheet1

在Sheet2中

=sheetName(Sheet1!A1) 

返回Sheet1中也是如此。

3

這工作:

Function SheetName as String 
    SheetName = Application.Caller.Worksheet.Name 
End Function 

我應該指出,作爲一個實際問題,你應該約在任何功能使用這樣主叫敏感的特性非常謹慎。之後,當你(或者更糟糕的是,別人)試圖調試某些東西時,如果你沒有意識到函數在從代碼或調試器/立即窗口中調用時的行爲不同,那麼它可能是一場真正的噩夢。在實際使用中。

相關問題