2017-10-10 83 views
0

HeJ小鼠,EXCEL VBA动态表名称 - 不工作时式中的细胞

我已经创建了一个小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倍细胞的值就不会自动更新。 为了使它工作,我需要输入单元格,然后再次输入ENTER,它才起作用。 我每次改变连接的2单元的值时,都必须进行相同的操作。

感谢您的帮助球员

回答

2

您需要捕获不同的事件

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

注:

我们的情况下,名称变更期间禁用活动工作表包含一个引用tab-name的公式。

+0

感谢加里!它完美的作品! –

+0

@MarienGébé你很受欢迎! –

0

这应该工作:

通过

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

+0

感谢@Max但如果没有相交(目标,范围(“C9”))是Nothing然后就是问题它不会改变任何东西...... –

+0

行。如果此单元格只能查找公式中的更改。离开它然后它工作。 – Max

0

这就是,如果有人还想在工作表更改事件执行此备选答案更换

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

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