EXCEL VBA 动态 Sheet 根据单元格值命名 - 当公式在单元格中时不起作用
EXCEL VBA Dynamic Sheet Name according to a cell value - Not working when formula in the cell
他,
我创建了一个 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 个单元格中的一个值时,我都必须执行相同的操作。
感谢你们的帮助
您需要捕获一个不同的事件:
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
如果有人仍想在工作表更改事件中执行此操作,则这是替代答案
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
他,
我创建了一个 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 个单元格中的一个值时,我都必须执行相同的操作。
感谢你们的帮助
您需要捕获一个不同的事件:
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
如果有人仍想在工作表更改事件中执行此操作,则这是替代答案
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