2016-07-21 46 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 
相關問題