Cambiar nombres a hojas de Excel mediante formulario vba
Desde hace algún tiempo tenía la inquietud de desarrollar un formulario donde pueda cambiarle el nombre a diferentes hojas de Excel sin necesidad de andar moviéndote a las diferentes pestañas para cambiarles el nombre.
Pues este artículo está dedica precisamente a eso, a compartirles el formulario que desarrollé.
Cómo funciona
Lo más difícil es un formulario no es que haga lo que quieras, sino que lo haga de la manera correcta previendo todos los escenarios posibles… pensando en el usuario final. Es decir, desarrollar la lógica adecuada para que funcione como lo deseamos.
Tenemos un formulario que a su vez contiene un ListBox el cual recoge el nombre de todas las hojas de nuestro archivo.
También tenemos un TextBox donde se mostrará el nombre de la hoja que haya elegido de la lista de nombres.
Figura 1. Cambiar nombres a las hojas de Excel desde un formulario.
El primer pasó será elegir el nombre del ListBox y después presionar el botón Cambiar nombre. Al presionar el botón veremos que el TextBox se pone disponible para modificar el nombre de la la hoja. Además de que el botón Cambiar nombre ahora cambia a “Guardar”. Tal como lo vemos en la Figura 2.
Figura 2. Al elegir el botón Cambiar nombre se habilita el TextBox para el nuevo nombre.
Qué pasa si tengo hojas ocultas
Pensando en casi todo, le añadí un CheckBox que servirá para poder elegir si deseamos que el ListBox también contenga las hojas ocultas.
Código de la macro
Primero validamos que el archivo no tenga la estructura protegida.
Ubicación: Código de la Hoja1.
Option Explicit ' Private Sub CommandButton1_Click() 'Declaramos variables Dim VentanaProtegida As Boolean Dim EstructuraProtegida As Boolean ' With ActiveWorkbook ' 'Damos valores a las variables VentanaProtegida = .ProtectWindows EstructuraProtegida = .ProtectStructure ' End With ' 'En caso de que el libro tenga la estructura protegida no contiúa. If VentanaProtegida Or EstructuraProtegida Then MsgBox "Este comando no se puede ejecutar en un libro con estructura protegida.", _ vbExclamation, "EXCELeINFO" Else frmNombresHojas.Show End If ' End Sub
Con la macro MostrarHojas vamos a llenar los nombres de las hojas en el ListBox.
Ubicación: Módulo1.
Public strNombreItem As String ' Sub MostrarHojas() frmNombresHojas.lstVisibles.Clear For Each Hoja In ActiveWorkbook.Sheets ' Select Case frmNombresHojas.CheckBox1.Value Case Is = True frmNombresHojas.lstVisibles.AddItem Hoja.Name Case Is = False If Hoja.Visible = True Then frmNombresHojas.lstVisibles.AddItem Hoja.Name Case Else End Select ' Next Hoja ' End Sub
Con el siguiente código realizamo todas las opciones para cambiar nombre.
Ubicación: Código del formulario.
'--------------------------------------------------------------------------------------- ' Module : frmNombresHojas ' Author : MVP Excel, Sergio Alejandro Campos ' Date : 30/10/2014 ' Purpose : Cambiar nombres a hojas de un archivo de Excel mediante formulario de vba '--------------------------------------------------------------------------------------- ' Private Sub btnCambiar_Click() NombreActual = Me.txtNombre.Value ' 'En caso de error... On Error GoTo ErrorHandler ' If Me.txtNombre.Enabled = False And Me.lstVisibles.ListIndex < 0 Then ' MsgBox "Hay que elegir un nombre de la lista.", vbExclamation, "EXCELeINFO" ' ElseIf Me.txtNombre.Enabled = False Then ' Me.txtNombre.Enabled = True Me.txtNombre.SetFocus btnCambiar.Caption = "Guardar" ' If Me.txtNombre = "" Then ' MsgBox "No puede dejar el campo en blanco.", vbExclamation, "EXCELeINFO" ' Else ' End If ' ElseIf Me.txtNombre.Enabled = True Then ' If Me.txtNombre.Value = "" Then ' MsgBox "No puede dejar el campo en blanco.", vbExclamation, "EXCELeINFO" ' Else ' 'Recorremos el ListBox y pasamos el nombre del elemento elegido For i = 1 To ThisWorkbook.Sheets.Count ' If Sheets(i).Name = strNombreItem Then Sheets(i).Name = Me.txtNombre.Value Me.txtNombre.Enabled = False Me.txtNombre.Value = "" Me.btnCambiar.Caption = "Cambiar nombre" Call MostrarHojas Else End If ' Next i End If End If ' Exit Sub ErrorHandler: ' MsgBox Err.Description, vbExclamation, "EXCELeINFO" ' End Sub Private Sub CheckBox1_Click() ' Me.txtNombre.Enabled = False Me.txtNombre.Value = "" Me.btnCambiar.Caption = "Cambiar nombre" Me.txtNombre.Enabled = False ' Call MostrarHojas End Sub ' Private Sub CommandButton5_Click() Unload Me End Sub ' Private Sub lstVisibles_Click() Me.txtNombre.Enabled = False Me.btnCambiar.Caption = "Cambiar nombre" 'Al dar click ' 'Declaramos variables Dim Cuenta As Integer Dim Numero As Integer Dim j As Integer Dim i As Integer 'Dim strNombreItem As String ' Cuenta = Me.lstVisibles.ListCount ' 'Validamos que haya un elemento seleccionado. For j = 0 To Cuenta - 1 If Me.lstVisibles.Selected(j) = True Then Numero = Numero + 1 End If Next j ' 'La hoja seleccionada se pasará al ListBox de hojas visibles. For i = 0 To Cuenta - 1 'If ListBox1.Selected(i) Then If Me.lstVisibles.Selected(i) = True Then strNombreItem = Me.lstVisibles.List(i) Me.txtNombre.Value = strNombreItem End If Next i End Sub ' Private Sub UserForm_Initialize() Me.txtNombre.Enabled = False Call MostrarHojas End Sub
Anexos
:: Descarga el ejemplo Cambiar nombres a hojas de Excel en formulario.rar