2016-07-21 10 views
1

Ich versuche Tabs in meinem großen Excel zu umbenennen, indem Sie einen Zellwert in jedem Arbeitsblatt verwenden. Das Problem ist, ich möchte mehrere Tabs mit dem gleichen Namen umbenennen, was nicht erlaubt ist. Ich bin ok mit einer 1, dann eine 2 usw., aber ich bin mir nicht sicher, wie das geht.Benennen Sie Registerkarten mit demselben Namen in einer Excel-Tabelle

Wenn beispielsweise der Zellenwert in 3 Blättern Ohio ist, dann wären die Registerkarten Ohio1, Ohio2, Ohio3.

Der Name jedes Blatt sollte der Wert in A1 sein, aber ich möchte doppelte Namen berücksichtigen.

den VBA-Code, ohne Berücksichtigung des gleichen Namens zu tun ist:

Sub Worksheet_SelectionChange() 
Dim ws As Worksheet 

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

Next ws 

End Sub 

Antwort

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

Dank! Dies benennt jedoch alle von ihnen nach A1 auf dem ersten Blatt um, und ich würde jeden von ihnen nach A1 auf ihrem eigenen Blatt benennen. – Nechama

+0

Ich aktualisierte mit einer Lösung dafür :-). Beachten Sie jedoch, dass im Moment eine Nummer hinter jedem Namen steht, nicht nur Duplikate. Sie könnten also mit Indiana1, Ohio2, Ohio3, Indiana4, Iowa5, Ohio6 enden. – ale10ander

+0

Ich habe meine Antwort geändert. Dies sollte tun, was Sie wollen. Das einzige seltsame Verhalten hier ist, dass es nicht zählt, wie oft jeder Name verwendet wird, sondern einfach die Anzahl der Duplikate. So könnte man Ohio, Indiana, Ohio1, Alaska, Alaska2, Iowa, Kalifornien, Ohio3, Indiana4 haben. Wenn a1 leer ist, ist der Name des Blattes einfach eine Zahl. – 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 
Verwandte Themen