您可能已经知道,可以通过双击工作表选项卡的名称并提供新名称来更改其名称。但是,如果要动态执行该怎么办?如果要让单元格A1中的值自动显示为选项卡名称怎么办?

不幸的是,Excel没有提供内部函数来处理此类任务。使用将为您完成工作的宏开发此类功能是一项相对简单的任务。例如,以下宏会将选项卡名称更改为A1的内容:

Sub myTabName()

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

End Sub

关于此宏,有几个重要的注意事项。首先,没有错误检查。这意味着,如果A1包含对于制表符名称而言是非法的值,则宏会生成错误。

其次,该宏必须手动运行。

如果您想要一个更强大的宏来检查错误并自动运行该怎么办?结果会更长一点,但仍然不会太复杂:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Set Target = Range("A1")

If Target = "" Then Exit Sub     On Error GoTo Badname     ActiveSheet.Name = Left(Target, 31)

Exit Sub Badname:

MsgBox "Please revise the entry in A1." & Chr(13) _     & "It appears to contain one or more " & Chr(13) _     & "illegal characters." & Chr(13)

Range("A1").Activate End Sub

要设置此宏,请按照下列步骤操作:

。打开一个只有一个工作表的新工作簿。

。右键单击工作表选项卡,然后从出现的“上下文”菜单中选择“查看代码”。 Excel将显示VBA编辑器。

。将上面的宏粘贴(或键入)到代码窗口中。

。关闭VBA编辑器。

。在系统上找到XLStart文件夹。 (使用Windows搜索功能找到该文件夹​​。)

。使用XLStart目录中的名称Book.xltm将工作簿另存为启用Excel宏的模板。这会使模板成为您创建的任何新工作簿的模式。

。再次将工作簿另存为同一目录中启用宏的模板,这一次使用名称Sheet.xltm。这使模板成为您插入工作簿中任何新工作表的模式。

。关闭并重新启动Excel。

现在,只要您更改单元格A1中的值,工作表选项卡也会更新。

使用此技巧有一个警告:如果单元格A1中的值是一个日期,并且您希望工作表选项卡包含该日期,那么您可能无法获得期望的结果。原因很简单:Excel在内部将日期存储为序列号,这是分配给工作表选项卡的内容,而不是格式化的日期。如果要处理日期,则需要更改为选项卡名称实际分配的内容:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Set Target = Range("A1")

If Target = "" Then Exit Sub     On Error GoTo Badname     ActiveSheet.Name = Format(Target, "mmm-dd-yy")

Exit Sub Badname:

MsgBox "Please revise the entry in A1." & Chr(13) _     & "It appears to contain one or more " & Chr(13) _     & "illegal characters." & Chr(13)

Range("A1").Activate End Sub

请注意,这里唯一的更改是分配给工作表的Name属性的内容-它是格式化日期。如果愿意,可以修改宏中使用的日期格式。但是,您不应选择使用斜杠的格式,因为这些斜杠在工作表名称中是非法的。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(7993)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较早菜单界面找到此技巧的版本:

链接:/ excel-Dynamic_Worksheet_Tab_Names [动态工作表标签名称]。