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.