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