Gilbert tiene una hoja de trabajo (denominada «Control») que contiene una lista de los nombres de hoja de trabajo deseados en las celdas A1: A12. Necesita una forma, en una macro, de cambiar el nombre de cada una de las otras 12 hojas de trabajo en el libro de trabajo en función de ese rango de celdas. Los nombres de las hojas de trabajo no necesitan ser dinámicos; solo es necesario cambiarles el nombre cuando ejecuta la macro.

El núcleo del desarrollo de una macro para abordar esta necesidad es confiar en la propiedad Nombre de cada hoja de trabajo que desee cambiar de nombre. Por ejemplo, podrías usar una macro muy simple como esta:

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

La macro simplemente recorre el rango de celdas A1: A12 y, si la siguiente hoja de trabajo no se llama «Control», cambia el nombre de la hoja de trabajo al valor de celda.

Como se señaló, esta macro es muy simplista y, con toda probabilidad, debería ser mucho más sólida. Por ejemplo, ¿qué se debe hacer si hay más (o menos) de 13 hojas de trabajo en el libro de trabajo actual? ¿Qué se debe hacer si hay celdas vacías en el rango A1: A12? ¿Qué se debe hacer si alguien ejecuta la macro y «Control» no es la hoja de trabajo activa?

¿Qué se debe hacer si hay dos valores idénticos en A1: A12? ¿Qué sucede si hay espacios iniciales o finales en uno o más nombres en el rango A1: A12? Estas y (muy probablemente) una amplia gama de otras preguntas pueden afectar el aspecto final de la macro. Aquí hay una versión comentada de la macro que tiene en cuenta varias de las posibilidades que acabamos de mencionar:

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

¿Observa cuánto más larga es la segunda versión de la macro que la primera? Cada vez que empiece a agregar varias comprobaciones en una macro, puede alargarlo mucho más que sin las comprobaciones. El beneficio de agregar las comprobaciones, por supuesto, es que es menos probable que su macro tenga problemas, ya que la utilizan otras personas además de usted.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (1506) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.