Searching...
jueves, 11 de julio de 2013

CREAR/AÑADIR HOJAS/PESTAÑAS CON VBA

En este artículo vamos a abordar la posibilidad de añadir nuevas hojas o pestañas a nuestro libro de Excel de manera automática.  Estos pequeños programas nos pueden servir a su vez para incluirlos en otros más complejos que requieran la opción de crear una nueva hoja de trabajo.

En este ejemplo, como se muestra en la imagen nos pregunta cuál es el nombre que le queremos dar a la nueva hoja y en caso  de presionar cancelar nos ofrece un nuevo mensaje.

Nota: Tiene un inconveniente: si intentamos crear una hoja con igual nombre nos dará error, por lo que os recomiendo leer el ejemplo y seguir con los siguientes.
Analizamos la macro para estudiar la estructura SELECT CASE.

·        sheet_Name: es la variable nombre de la hoja, que va ser resultado del imputbox que vemos en la imagen.

·        La estructura SELECT CASE es:
o   SELECT CASE sheet_Name ‘nombre_de_la_variable
‘Opciones:
o   Case is = False ‘Primera_opción. En este caso FALSE es como cancelar
‘Resultado del primer Case.
o   MsgBox "No se ha insertado una hoja"  ‘Mensaje de que no se ha creado hoja.
o   Exit Sub ‘Esto significa que el programa va dejar de correr y va ir directamente al final.

‘Segundo caso
o   Case Is = "" ‘Si no escribimos nada en el cuadro que pregunta el nombre y le damos a aceptar tampoco se creará.

o   Case Else  ‘Es como decir: si no se dan las dos anteriores entonces:
o   Sheets.Add After:=Sheets(Sheets.Count) ‘la hoja se creará a la derecha de la última.
o   ActiveSheet.Name = sheet_Name ‘el nombre de la hoja será el que hemos escrito en el cuadro.
o   End Select ‘No olvidar el cierre de la estructura.

Sub Agregarpestaña()
Dim sheet_Name As String
    If ActiveWorkbook Is Nothing Then Exit Sub
    sheet_Name = Application.InputBox(prompt:="¿Nombre de la hoja?", Title:="Nombre", Type:=2)
    Select Case sheet_Name
    Case Is = False
    MsgBox "No se ha insertado una hoja"
    Exit Sub
    Case Is = ""
    MsgBox "No se ha insertado una hoja"
    Case Else
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = sheet_Name
    End Select
End Sub

Vemos otro ejemplo similar al anterior. Sin embargo en este vamos a darle el valor de una celda fija (este ejemplo o encontré en todoexpertos) y vamos a añadir una variante que añade una nueva hoja con el nombre de la ultima celda con datos de una columna.

Nota:  Este ejemplo ya tiene un control sobre hojas con el mismo nombre.

Sub AñadirHoja()
    NombreHoja = Range("A1").Value
    sw_existe = False
    For i = 1 To Sheets.Count
        If Sheets(i).Name = NombreHoja Then
            sw_existe = True
            MsgBox ("Hoja <" + NombreHoja + "> ya existente")
        End If
    Next
    If Not sw_existe Then
        Sheets.Add.Name = NombreHoja
    End If

Con la variante: ‘ Esta forma de seleccionar la ultima celda con datos no fue mencionada en el articulo” Seleccionar celdas a distancia de la activa”, de este modo ya conocéis otra manera, pero un poco mas liosa al estar en dos líneas.

Sub AñadirHoja()
    ultimoregistro = Cells(Rows.Count, 1).End(xlUp).Row  'esto define el ultimo renglón ocupado
    nombrehoja = Range("a" & ultimoregistro).Value
        sw_existe = False
    For i = 1 To Sheets.Count
        If Sheets(i).Name = NombreHoja Then
            sw_existe = True
            MsgBox ("Hoja <" + NombreHoja + "> ya existente")
        End If
    Next
    If Not sw_existe Then
        Sheets.Add.Name = NombreHoja
    End If
End Sub

Vemos otro ejemplo similar al primero con línea de control para hojas con el mismo nombre:

Sub Agregarpestaña_control()
    Dim Hoja As Worksheet
    Dim yaExiste As Boolean
    Dim HojaNueva As String
    HojaNueva = InputBox("¿Nombre de la hoja que desea crear?")
    If HojaNueva = Empty Then Exit Sub
    For Each Hoja In Worksheets
        If Hoja.Name = HojaNueva Then yaExiste = True
    Next Hoja
    If yaExiste = False Then
        Sheets.Add(Sheets(Sheets.Count)).Name = HojaNueva
        Exit Sub
    End If
    MsgBox "Ya existe una hoja con ese nombre."
End Sub

En este ejemplo vamos  a ver cómo crear varias hojas al mismo tiempo tomando como nombres un rango de celdas.

Sub CrearHoja()
Dim Lista As Range
Dim Num_hojas As Long
On Error Resume Next
Set Lista = Application.InputBox(prompt:="Señalar rango de la lista. Ejemplo A1:A3", _
Title:="Lista de nombres", Type:=8)
For Num_hojas = Lista.Count To 1 Step -1
Sheets.Add.Name = Lista(Num_hojas)
Next Num_hojas
End Sub


0 comentarios:

Publicar un comentario

 
Back to top!