我怎样才能得到一个事件产生的工作表的引用?

在工作表中,我可以将代码附加到事件,如下所示:

Private Sub Worksheet_Calculate() ' .. code here End Sub 

我怎样才能得到事件产生的工作表的引用?

我想有一个100%安全的方式,所以当名称工作表更改等时,我不必担心代码中断。

ActiveSheet是不正确的,因为它不能保证任何工作表在(重新)计算时处于活动状态。

你可以使用来电者:

 Application.Caller.Worksheet.Name 

您可以使用Codename属性:

 Private Sub Worksheet_Calculate() Debug.Print Me.CodeName End Sub 

默认情况下,它与工作表的名称相同,但是可以在VBE的“属性”窗口中更改它 – 这是名称属性。 用户不能改变它。 (复制工作表会为名称添加一个数字,例如Sheet1变为Sheet11。

您也可以在工作簿级别的事件中使用它:

 Private Sub Workbook_SheetCalculate(ByVal Sh As Object) If Sh.CodeName = "TheSheetICareAbout" Then Debug.Print Sh.Name End If End Sub 

因为你不会说如何使用这个参考,所以很难变得更有帮助。

有关代码名称的更多信息:

http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm