代码之家  ›  专栏  ›  技术社区  ›  Marien Gébé

EXCEL VBA动态工作表名称根据单元格值-当公式位于单元格中时不起作用

  •  0
  • Marien Gébé  · 技术社区  · 7 年前

    我创建了一个小的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单元中放置一个连接2个单元值的公式时,它不会自动更新。 每次我在连接的2个单元格的on中更改一个值时,我都必须执行相同的操作。

    谢谢你们的帮助

    3 回复  |  直到 7 年前
        1
  •  2
  •   Gary's Student    7 年前

    你需要捕捉一个 不同的事件 :

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

    注:

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

        2
  •  0
  •   braX    7 年前

    这应该有效:

    代替

    ActiveSheet.Name = ActiveSheet.Range("C9")

    通过

    ActiveSheet.Name = ActiveSheet.Range("C9").Value

        3
  •  0
  •   Imran Malek Vijay Kumar    7 年前

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

    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