Visual Basic para Aplicaciones - Crear hojas desde Vba

Life is soft - evento anual de software empresarial
 
Vista:

Crear hojas desde Vba

Publicado por David (9 intervenciones) el 18/08/2015 22:36:35
Hola a todos de nuevo!

Vamos a ver si esta vez alguien me puede ayudar con esto que me ha atascado de nuevo.

Tengo una hoja de excel que contiene una lista de nombres y necesito que Vba me cree una hoja correspondiente a cada registro. He visto que eso se puede hacer pero el problema es que si introduzco el código en el evento open del libro, me crea las hojas cada vez que lo habro y si ya existen me deja el nombre de la hoja por defecto. Había pensado en crear cada hoja manualmente y olvidarme pero, el número de registros aumenta periódicamente y es tedioso crear cada hoja y dar formato a cada campo para que se queden iguales todas. Sin pasar por alto que se me podría olvidar crear alguna hoja nueva si se introducen demasiados registros nuevos.

Hablando claro, ¿alguien sabría decirme un código que lea la lista y reconozca si existe una hoja con ese nombre? en cuyo caso me gustaría que creara una para cada registro nuevo que se haya introducido desde la ultima vez. Algo asi como un código que cree una hoja por cada registro encontrado y valide si dichos registros ya tienen alguna hoja asignada al mismo nombre.

Dar formato a cada hoja es lo de menos porque he pensado en crear un módulo sencillo que lo haga y solo tendría que ejecutarlo o llamarlo desde cualquier linea de código, pero lo anterior me lleva de cabeza.

Muchas gracias a todos. y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Crear hojas desde Vba

Publicado por nm (13 intervenciones) el 19/08/2015 01:59:13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub hello_world()
Dim ws As Worksheet
Dim cell As Range, sName$
Dim bExiste As Boolean
For Each cell In Sheets("Hoja1").Range("A1:A6")
    bExiste = False
    sName = VBA.UCase(VBA.Trim(cell.Value))
    For Each ws In ThisWorkbook.Sheets
        If VBA.UCase(ws.Name) = sName Then
           bExiste = True
           Exit For
        End If
    Next
    If Not bExiste Then
       Set ws = ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count))
       ws.Name = sName
    End If
Next
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Crear hojas desde Vba

Publicado por David (9 intervenciones) el 19/08/2015 03:51:59
Muchas gracias funciona!!

Lo que no entiendo es por qué me da un error 1004 en tiempo de ejecucion cuando me crea las nuevas hojas y después crea una hoja genérica más.

Me sale un cuadro de texto con el error 1004 error de metodo "name" de objeto "_worksheet". Si pulso en depurar me marca la linea del final "ws.Name = sName".

Lo he llamado desde el evento thisworkbook_open para que cargue todos los registros que existan en la columna y cada vez que inicio me crea una hoja generica más.

Qué puede ser? Yo aun estoy un poco verde para solventar este tipo de errores.

Pero muchísimas gracias igualmente!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear hojas desde Vba

Publicado por nn (13 intervenciones) el 19/08/2015 12:50:13
habría que revisar el rango de valores que luego serán Nombre de la hoja...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear hojas desde Vba

Publicado por David (9 intervenciones) el 19/08/2015 16:18:07
Hola nn He revisado la columna y no existen fallas que yo vea a menos que sea el titulo de la columna. He probado con otras columnas y me hace exactamente lo mismo. No se, no encuentro el error en tiempo de ejecucion y siempre me marca la misma linea de código a depurar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear hojas desde Vba

Publicado por David (9 intervenciones) el 19/08/2015 19:24:11
Solucionado!

Al final he encontrado un código que me sirve, a saber:

1°- Creo un modulo (yo ya lo tenía creado para las hojas nuevas) e introduzco el siguiente código:

1
2
3
4
5
6
7
8
9
10
Function ExisteHoja() As Boolean
For h = 1 To Sheets.Count
If Sheets(h).Name = formulario_insercion.Combo_lugar.Value Then
ExisteHoja = True
Exit Function
Else
ExisteHoja = False
End If
Next h
End Function


2° En el evento AfterUpdate he introducido lo siguiente:

1
2
3
4
5
6
7
8
9
10
Private Sub Combo_lugar_AfterUpdate()
 
Call ExisteHoja
 
If ExisteHoja Then
Exit Sub
Else
Worksheets.Add
ActiveSheet.Name = Combo_lugar.Value
End If


He subrayado código propio y asi si alguien más necesita utilizar esta función solo tiene que editar en esa zona su código personal.

En un principio intenté crear cada hoja dependiendo de un combobox y no podía, asi que pensé que cargando los datos desde una lista al iniciar el libro sería una opción viable también, pero el código me repetía el error en tiempo de ejecución y no supe solventarlo. De todas formas os doy las gracias por haber perdido algo de tiempo con mi problema para intentar ayudarme.

Gracias y un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

Crear hojas desde Vba

Publicado por xve (15 intervenciones) el 19/08/2015 20:31:07
Gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar