首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EXCEL VBA根据单元格值动态工作表名-当单元格中的公式不工作时

EXCEL VBA根据单元格值动态工作表名-当单元格中的公式不工作时
EN

Stack Overflow用户
提问于 2017-10-10 11:51:51
回答 3查看 8.4K关注 0票数 0

嘿嘿,

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

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

代码语言:javascript
复制
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单元格中更改一个值时,我都必须执行相同的操作。

谢谢你们的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-10 12:01:00

您需要捕获一个不同的事件

代码语言:javascript
复制
  Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
        ActiveSheet.Name = ActiveSheet.Range("C9")
    Application.EnableEvents = True
 End Sub

注:

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

票数 2
EN

Stack Overflow用户

发布于 2017-10-10 12:11:30

这应该是可行的:

替换

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

通过

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

票数 0
EN

Stack Overflow用户

发布于 2017-10-10 12:39:59

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46666069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档