当重命名 sheet 时,如何触发 运行 的宏?

How do I trigger a macro to run when a sheet is renamed?

我有一个工作sheet,我想运行一个宏,当活动sheet被重命名(重命名为任何东西)时。

原因如下:

我有一个基于单元格 (D1) 值过滤的数据透视表 table,使用 VBA。 (当 D1 改变时,枢轴 table 过滤器改变)。 反过来,D1 由 sheet 名称使用公式确定(匹配)。 (即如果sheet名字是RG01,那么D1自动改成RG01)

问题是,当 sheet 名称更改(D1 随之更改)时,它不会触发 Pivot table 过滤器中的更改。只有当我编辑 D1 时,Pivot table 过滤器才会发生变化。 IE。如果我 select D1 并重新输入公式,数据透视表 Table 过滤器会发生变化。

所以,我在想,我可以编写一个宏,在重命名 sheet 时重新输入 D1 中的公式。我可以通过 'recording' 宏来完成大部分工作,但我不知道如何在重命名 sheet 时触发宏。

“重新输入”是指单击单元格 (D1),单击编辑栏,然后按回车键。

抱歉,我不精通 VBA 或 excel,所以我的术语可能有误。我离让我的传播sheet工作如此接近,这是我似乎无法绕过的最后一个障碍。

感谢期待!

对于我想要捕获 sheet 重命名的项目,我使用 public 变量作为活动 sheet 名称,并使用 Workbook_SheetCalculate 捕获更改. (请注意,这适用于手动重命名的活动 sheet,而不是以编程方式从宏中重命名其他 sheet 的名称。这可能需要一个 public array/dict 和所有sheet 打开工作簿时存储的名称) 示例代码为:

(本工作簿):

Public LastSheet As String

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    LastSheet = ActiveSheet.Name

End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

    If LastSheet <> ActiveSheet.Name Then

        '... do something here

        LastSheet = ActiveSheet.Name

    End If

End Sub

计算子程序会在活动 sheet 的每次更改中触发,但 运行 仅当 sheet 名称更改时才会触发所需的代码。