EXCEL VBA动态工作表名称(根据单元格值)-单元格中的公式不起作用

EXCEL VBA动态工作表名称(根据单元格值)-单元格中的公式不起作用,excel,vba,excel-2013,Excel,Vba,Excel 2013,嘿 我创建了一个小的VBA代码来动态重命名工作表 当单元格只是手动输入时,它工作得很好 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C9")) Is Nothing Then ActiveSheet.Name = ActiveSheet.Range("C9") End If End Sub 但一旦我在C9单元中加入一个连接两个单元值的公式

我创建了一个小的VBA代码来动态重命名工作表

当单元格只是手动输入时,它工作得很好

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C9")) Is Nothing Then
        ActiveSheet.Name = ActiveSheet.Range("C9")

    End If
End Sub
但一旦我在C9单元中加入一个连接两个单元值的公式,它就不会自动更新。 要使它工作,我需要进入单元格,然后再次键入enter,它就工作了。 每次我更改连接的2个单元格的on值时,我都必须执行相同的操作


感谢各位的帮助

您需要捕捉不同的事件:

  Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
        ActiveSheet.Name = ActiveSheet.Range("C9")
    Application.EnableEvents = True
 End Sub
注意:


如果工作表包含引用选项卡名称的公式,我们将在名称更改期间禁用事件。

您需要捕获不同的事件:

  Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
        ActiveSheet.Name = ActiveSheet.Range("C9")
    Application.EnableEvents = True
 End Sub
注意:

如果工作表包含引用选项卡名称的公式,我们将在名称更改期间禁用事件。

这应该可以:

替换

ActiveSheet.Name=ActiveSheet.Range(“C9”)

ActiveSheet.Name=ActiveSheet.Range(“C9”).Value

这应该可以:

替换

ActiveSheet.Name=ActiveSheet.Range(“C9”)


ActiveSheet.Name=ActiveSheet.Range(“C9”).Value

如果仍有人希望在工作表更改事件中执行此操作,则这是另一个答案

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    Dim formulacell As Range
    Set formulacell = Range("C9")
    Set formulacell = Application.Union(formulacell, formulacell.Precedents)

    If Not Intersect(Target, formulacell) Is Nothing Then
        ActiveSheet.Name = ActiveSheet.Range("C9").Value
    End If

    Application.EnableEvents = True
End Sub

如果仍有人希望在工作表更改事件中执行此操作,则这是另一个答案

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    Dim formulacell As Range
    Set formulacell = Range("C9")
    Set formulacell = Application.Union(formulacell, formulacell.Precedents)

    If Not Intersect(Target, formulacell) Is Nothing Then
        ActiveSheet.Name = ActiveSheet.Range("C9").Value
    End If

    Application.EnableEvents = True
End Sub
如果直线不相交(目标,范围(“C9”)),则不存在任何问题。如果此单元格不可用,则仅查找公式中的更改。如果直线不相交(目标,范围(“C9”)),那就是问题所在。如果此单元格不可用,则仅查找公式中的更改。离开它,它就会工作。