¿Cómo puedo crear hojas y nombrarlas con los datos ingresados en la columna 0 de la fila seleccionada en un Listbox?

He creado un userform para crear hojas que poseen el formato contenido en una hoja denominada "FORMATO" por medio de hacer click en un botón denominado "Crear o Modificar". El nombre que dichas hojas toman es el indicado en la columna 0 de la fila seleccionada en el Listbox denominado "ListPRO" y contenido en el Userform creado.

Lo que no he podido controlar con los códigos es el error 1004, lo que necesito es que cuando se seleccione una fila del Listbox y se presione el botón "crear o modificar" se verifique el nombre de la hoja para identificar si esta ya fue creada. A fin de que el boton "crear o modificar (boton 6)" genere las siguientes acciones

  • Hoja repetida según el nombre: seleccionar e ir la hoja indicada en la columna 0 de la fila seleccionada en el Listbox "ListPRO".
  • Hoja con nombre no repetido: generar copia de la hoja formato y asignar el nombre de la columna 0 de fila seleccionada en el Listbox "ListPRO" e ir a la nueva hoja creada

Dejo mas abajo el código de antemano muchas gracias por vuestra ayuda.

Private Sub CommandButton6_Click()
Select Case ListPRO.ListIndex
Case Is >= 0: Me.Hide
Application.DisplayAlerts = False
nombre = ListPRO.Column(0)
Application.ScreenUpdating = True
Sheets("FORMATO").Visible = True
Sheets("FORMATO").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = nombre
Sheets("FORMATO").Visible = Falso
Load GENPR1
GENPR1.Show

Case Else

MsgBox "Debe seleccionar un procedimiento de la lista"
Exit Sub
End Select
Unload Me
End Sub

2 respuestas

Respuesta
2

Algunas recomendaciones:

- No es necesario un select case para revisar el listindex, con un if es suficiente.

- No es necesario hacer visible la hoja "formato", puede estar oculta y la puedes copiar

- Tampoco es necesario ocultar, después cargar y mostrar nuevamente el userform

Quedaría de esta forma:

Private Sub CommandButton6_Click()
    Application.DisplayAlerts = False
    If ListPRO.ListIndex = -1 Then
        MsgBox "Debe seleccionar un procedimiento de la lista"
        Exit Sub
    End If
    nombre = ListPRO.Column(0)
    For Each hoja In Sheets
        If LCase(h.Name) = LCase(nombre) Then existe = True
    Next
    If existe Then
        Sheets(nombre).Select
    Else
        Application.ScreenUpdating = True
        Sheets("FORMATO").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = nombre
    End If
End Sub

Sal u dos . Dante Amor

Respuesta
1

Una forma de saber si existe una hoja con el nombre elegido es la siguiente:

Dim Hoja As Worksheet
For Each Hoja In Worksheets
If Nombre = Hoja.Name Then
MsgBox "La hoja ya existe"
Sheets(Nombre).Select
Exit Sub
End If
Next

De ese modo si ya existe, selecciona la hoja y sale de la rutina, tal cual has mencionado. Solo adáptalo a tu código.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas