Cambio de nombre de hojas de trabajo basadas en una lista (Microsoft Excel)
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.