我怎样才能得到一个事件产生的工作表的引用?
在工作表中,我可以将代码附加到事件,如下所示:
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
因为你不会说如何使用这个参考,所以很难变得更有帮助。
有关代码名称的更多信息: