【问题标题】:Automatically change sheet names自动更改工作表名称
【发布时间】:2018-01-10 09:28:00
【问题描述】:

以下代码添加/删除工作表并插入所有工作表名称的列表,同时使它们成为超链接:

https://stackoverflow.com/a/48159499/9102830

以下代码根据几个单元格名称更改工作表名称:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address(0, 0) = "C13" Then
    Sh.Name = Sh.Range("B33").Value + "_" + Sh.Range("C13").Value + "_" + Sh.Range("C22").Value + "_N01"
End If
End Sub

问题是:

  1. 不是在单元格输入更改时更改,而是可以自动完成吗?
  2. 它可以是“Sub add_sheet”代码的一部分吗?就像,如果我添加一个工作表,它应该根据单元格命名,并且由于它被复制并且单元格相同,因此显然会采用名称,在这种情况下,名称应该是“N02”而不是“N01” "(而不是 Excel 所做的默认 "(2)")。
  3. 最后,当/如果单元格发生变化,使工作表名称不等于以前的工作表名称,它会自动回到“N01”吗?

提前致谢!

【问题讨论】:

  • 什么标准可以让它自动化?在我看来,当单元格更改并且您的工作表名称在此过程中更新时,它是自动的。
  • 问题是“Private Sub Workbook_SheetChange”仅在通过输入单元格并更改输入来更改单元格输入时才有效,但是,我的单元格会根据其他单元格中的输入而更改,因此“ Private Sub Workbook_SheetChange" 无法识别更改。

标签: vba excel


【解决方案1】:

有几种方法可以解决这个问题。一种方法是将Worksheet_ActivateWorksheet_Calculate 组合在一起,并放入一个公共变量。

当你第一次打开你的工作表时,你会自动设置变量,并且每次更改都会设置变量。

Option Explicit

Public myVar As Variant

Private Sub Worksheet_Activate()

    'Set the public variable
    myVar = Range("B33").Value

End Sub

Private Sub Worksheet_Calculate()

    If myVar <> Range("B33").Value Then
        sh.Name = ...
        myVar = Range("B33")
    End If

End Sub

您也可以在使用Workbook_Open 打开工作簿时设置变量。真的只是取决于您的特定需求。

【讨论】:

  • 可能是一个愚蠢的问题:如何添加此代码?作为一个模块并在我运行“addList”宏时调用它,或者?
  • 这在标准模块中不起作用。您需要将其放入工作表的对象模块中。最简单的方法是右键单击工作表上的选项卡,然后单击查看代码。
猜你喜欢
  • 1970-01-01
  • 2018-07-29
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多