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.

image

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.

image

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

También te podría gustar...