重命名基于列表的工作表(Microsoft Excel)
Gilbert有一个工作表(名为“控件”),该工作表在单元格A1:A12中包含所需的工作表名称列表。他需要一种宏方式,根据该单元格范围来重命名工作簿中的其他12个工作表。工作表名称不必动态。他们只需要在他运行宏时重命名即可。
开发宏以解决此需求的核心是依赖于要重命名的每个工作表的Name属性。例如,您可以使用一个非常简单的宏,如下所示:
Sub RenameSheets() Dim c As Range Dim J As Integer J = 0 For Each c In Range("A1:A12") J = J + 1 If Sheets(J).Name = "Control" Then J = J + 1 Sheets(J).Name = c.Text Next c End Sub
该宏仅浏览单元格区域A1:A12,如果下一个工作表未命名为“控件”,则它将工作表重命名为单元格值。
如前所述,此宏非常简单,并且很有可能会更健壮。例如,如果当前工作簿中的工作表多于(或少于)13个,应该怎么办?如果在A1:A12范围内有空单元格该怎么办?如果有人运行宏并且“控件”不是活动工作表,该怎么办?
如果A1:A12中有两个相同的值怎么办?如果一个或多个名称在A1:A12范围内有前导或尾随空格怎么办?这些以及(很可能是)其他一系列问题都可能影响宏的最终外观。这是宏的注释版本,其中考虑了刚才提到的几种可能性:
Sub RenameSheets() Dim c As Range Dim J As Integer Dim K As Integer Dim sName As String Dim w(12) As String Dim bGo As Boolean Dim sTemp As String bGo = True If Worksheets.Count <> 13 Then ' Check to make sure exactly 13 worksheets in workbook bGo = False sTemp = "There are more than 13 worksheets." End If If ActiveSheet.Name <> "Control" Then ' Check to make sure Control is active bGo = False sTemp = "Control worksheet is not active." Else ' Check for empty and duplicate cells in range J = 0 For Each c In Range("A1:A12") sName = Trim(c.Text) If sName <> "" Then For K = 1 to J If LCase(w(K)) = LCase(sName) Then bGo = False sTemp = "Duplicate sheet names in list." End If Next K If bGo Then ' Everything still good; add name J = J + 1 w(J) = sName End If End If Next c End If If bGo Then K = 0 For J = 1 To 12 K = K + 1 If Sheets(K).Name = "Control" Then K = K + 1 Sheets(K).Name = w(J) Next J Else MsgBox(sTemp) End If End Sub
注意宏的第二个版本比第一个版本长多少?每当您开始在宏中添加多个检查时,它的确比没有检查时要长得多。当然,添加支票的好处是,您的宏被您以外的其他人使用时,不太可能出现问题。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(1506)适用于Microsoft Excel 2007、2010、2013和2016。