2016-07-21 47 views
1

我想通过在每个工作表中使用单元格值来重命名我的大型Excel中的选项卡。问题是,我想用相同的名称重命名多个选项卡,这是不允许的。我可以添加1,然后2等,但我不知道如何做到这一点。重命名在Excel工作表中具有相同名称的选项卡

例如,如果3张单元格的值是俄亥俄州,那么标签将是Ohio1,Ohio2,Ohio3。

每个表的名称应该是A1中的值,但我想要说明重复的名称。

VBA代码做到这一点不占相同的名称是:

Sub Worksheet_SelectionChange() 
Dim ws As Worksheet 

For Each ws In Sheets 
ws.Activate 
ActiveSheet.Name = Range("a1").Value 

Next ws 

End Sub 

回答

0
Sub Worksheet_SelectionChange() 
Dim ws As Worksheet 
Dim i As Integer 

i = 1 

On Error GoTo fixName 

For Each ws In Me.Worksheets 

ws.name = ws.Range("A1").Value 


Next ws 


Exit Sub 
fixName: 
ws.name = ws.Range("A1").Value & i 
i = i + 1 

End Sub 
+0

谢谢!但是,根据第一张纸上的A1重新命名所有纸张,并且我想在他们自己的纸上根据A1命名它们中的每一张。 – Nechama

+0

我更新了一个解决方案:-)。但是请注意,现在这将在每个名字后面加上一个数字,而不仅仅是重复。所以你可能会以印第安纳州1,俄亥俄州2,俄亥俄州3,印第安纳州4,爱荷华州5,俄亥俄州6结束。 – ale10ander

+0

我改变了我的答案。这应该做你想做的。这里唯一不可思议的行为是,它不会计算每个名称的使用次数,它只是记录重复次数。 所以你可以有俄亥俄州,印第安纳州,俄亥俄州1,阿拉斯加州,阿拉斯加州2,爱荷华州,加利福尼亚州,俄亥俄州3,印第安纳州4。 另外,如果a1是空白,表格的名称将只是一个数字。 – ale10ander

0
Sub RenameTabs() 
    Dim ws As Worksheet, wsName$, wsCount%, dict ' $ is short for " As String" and % for " As Integer" 
    Set dict = CreateObject("Scripting.Dictionary") 

    For Each ws In Sheets 
     wsName = ws.Range("A1").Value 
     wsCount = IIf(dict.Exists(wsName), dict(wsName) + 1, 1) 
     dict(wsName) = wsCount 

     If wsCount = 1 Then 
      ws.Name = wsName 
     Else 
      If wsCount = 2 Then Sheets(wsName).Name = wsName & 1 ' optional to rename the previous Ohio sheet to Ohio1 
      ws.Name = wsName & wsCount 
     End If 
    Next ws 
End Sub 
相关问题