Umbenennen von Arbeitsblättern basierend auf einer Liste (Microsoft Excel)
Gilbert hat ein Arbeitsblatt (mit dem Namen „Control“), das eine Liste der gewünschten Arbeitsblattnamen in den Zellen A1: A12 enthält. Er benötigt in einem Makro eine Möglichkeit, jedes der anderen 12 Arbeitsblätter in der Arbeitsmappe basierend auf diesem Zellbereich umzubenennen. Die Arbeitsblattnamen müssen nicht dynamisch sein. Sie müssen nur umbenannt werden, wenn er das Makro ausführt.
Der Kern der Entwicklung eines Makros, um diesen Bedarf zu decken, besteht darin, sich auf die Name-Eigenschaft jedes Arbeitsblatts zu verlassen, das Sie umbenennen möchten. Sie könnten beispielsweise ein sehr einfaches Makro wie das folgende verwenden:
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
Das Makro durchläuft einfach den Zellbereich A1: A12 und benennt das Arbeitsblatt in den Zellenwert um, wenn das nächste Arbeitsblatt nicht „Steuerelement“ heißt.
Wie bereits erwähnt, ist dieses Makro sehr simpel und sollte aller Wahrscheinlichkeit nach viel robuster sein. Was ist beispielsweise zu tun, wenn die aktuelle Arbeitsmappe mehr (oder weniger) als 13 Arbeitsblätter enthält? Was ist zu tun, wenn sich leere Zellen im Bereich A1: A12 befinden? Was ist zu tun, wenn jemand das Makro ausführt und „Steuerung“ nicht das aktive Arbeitsblatt ist?
Was ist zu tun, wenn A1 zwei identische Werte enthält: A12? Was ist, wenn ein oder mehrere Namen im Bereich A1: A12 führende oder nachfolgende Leerzeichen enthalten? Diese und (höchstwahrscheinlich) eine ganze Reihe anderer Fragen können sich auf das endgültige Aussehen des Makros auswirken. Hier ist eine kommentierte Version des Makros, die einige der gerade erwähnten Möglichkeiten berücksichtigt:
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
Beachten Sie, wie lange die zweite Version des Makros länger ist als die erste? Jedes Mal, wenn Sie anfangen, einem Makro mehrere Prüfungen hinzuzufügen, kann dies die Dauer erheblich verlängern als ohne Prüfungen. Der Vorteil beim Hinzufügen der Überprüfungen besteht natürlich darin, dass Ihr Makro weniger wahrscheinlich auf Probleme stößt, da es von anderen Personen als Ihnen verwendet wird.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (1506) gilt für Microsoft Excel 2007, 2010, 2013 und 2016.