Crear hojas nuevas a partir de rango de celdas

10 envíos / 0 nuevos
Último envío
ernesmi
Imagen de ernesmi
Offline
última acción: Hace 10 años 2 meses
alta: 08/02/2013 - 11:52
Puntos: 30
Crear hojas nuevas a partir de rango de celdas

Hola cracks!

 

Tengo el mismo caso que nuestro compañero Fernando en este post, o al menos parecido:

 

Necesito que de un rango de celdas (B5 hasta B20) se creen tantas hojas nuevas copiadas de otra ("Modelo Cliente") como celdas tengo. El nombre de las hojas nuevas debe corresponderse con el contenido de cada una de las celdas.

 

¿Alguien puede hecharme una mano?

 

Gracias!

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 meses 1 semana
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Crear hojas nuevas a partir de rango de celdas

Lo que necesitas es una macro que recorra esas celdas B5 a B20 y vaya creando otras tantas copias de tu hoja modelo.

la macro podría ser algo así:

 

Sub crear_copias_hoja_modelo()
    Dim celda As Range
    For Each celda In Sheets("hojaconellistadoB5aB20").Range("B5:B20").Cells
        'creamos una copia
        Sheets("Modelo cliente").Copy After:=ActiveSheet
        'le cambiamos el nombre
        ActiveSheet.Name = celda.Value
    Next
End Sub

 

------
Ya sé Excel, pero necesito más.

dymarco
Imagen de dymarco
Offline
última acción: Hace 7 años 12 meses
alta: 08/11/2016 - 18:25
Puntos: 20
Ayuda

Hola Pacomegia gracias por ese codigo me sirvio muchisimo

pero me surgio un interrogante

yo necesito que los bucles sean dos: Que cree la hoja y la renombre con los valores de ("hojaconellistadoB5aB20") y despues en la hoja creada me planche un valor que tambien figura en ("hojaconellistado") pero en otra columna ("hojaconellistadoC5aC20")

empiezo a hacerlo pero me plancha en todas las hojas el mismo valor, y al final me da un debug creo que algo esta mal en los next

Te escribo el codigo con las referencias reales:

Sub crear_copias_hoja_modelo()

 

Dim Ajuste As Range

Dim Celda As Range

 

For Each Ajuste In Sheets("AUXILIAR").Range("j1:j11").Cells

For Each Celda In Sheets("AUXILIAR").Range("i1:i16").Cells

 

 

'chequeamos que haya valores para evitar debug

If Celda = "" Then

Exit For

End If

 

'creamos una copia

Sheets("Llave").Copy After:=ActiveSheet

 

'le cambiamos el nombre

ActiveSheet.Name = Celda.Value

 

'pintamos la pestaña

ActiveSheet.Tab.Color = vbRed

 

'planchamos el valor en la hoja creada

ActiveSheet.Range("A3").Value = Ajuste.Value

 

Next

 

Next

 

'volvemos a la hoja principal

Sheets("Param").Select

End Sub

 

Desde ya muchisimas gracias

 

 

 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 meses 1 semana
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
¿seguro que son dos bucles

¿seguro que son dos bucles anidados?

A mí me parece que lo que necesitas es sólo un bucle que haga dos cosas

Bucle for each por las celdas donde tienes los nombres para las nuevas hojas

   Para cada caso creas la hoja nueva, y le cmabias el nombre

   y además tomas un valor "Ajuste" que está en la hoja de configuración, en otra celda, y lo pones en la celda A3 de la nueva hoja

Next

Entiendo que cada nueva hoja tendrá sólo un valor de Ajuste ¿no?

 

Los bucles anidados de tu ejemplo hacen lo siguiente:

para el primer valor de ajuste crean todas las hojas y pone en A3 ese primer valor (en todas las hojas)

luego para el segundo valor de Ajuste, intenta crear otra vez todas las hojas, y supongo que ahí es donde te da el error.

 

 

 

------
Ya sé Excel, pero necesito más.

dymarco. (no verificado)
Imagen de dymarco.
ayuda

es muy probable q estes en lo cierto pero me podrias ayudar porq no se como corregirlo. se mucho de formulas y casi nada de vba. como hago para q funcione? Como quedaria el codigo segun tu explicacion? desde ya muchas gracias. 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 meses 1 semana
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
¿qué relación hay entre las

¿qué relación hay entre las celdas donde están los nombres de las hojas y la celdas donde está el valor "Ajuste" que quieres poner en esa hoja?

¿están en la misma fila?

es que en tu ejemplo haces un bucle en las celdas j1:j11

pero por otro lado haces un bucle en las celdas i1:i16

eso de que haya 11 ajustes para 16 hojas no sé cómo lo quieres hacer 

 

------
Ya sé Excel, pero necesito más.

visitante (no verificado)
Imagen de dymarco.
exacto. estan en la misma

exacto. estan en la misma fila. la hoja "auxiliar" es producto de formulas q vienen de otra hoja donde hay casillas de verificacion y demas. pero al fin y al cabo el nombre de la hoja (codigo de ajuste de impuesto) y el valor q necesito poner en esa hoja (nombre del ajuste del impuesto) estan en la misma fila.

dymarco
Imagen de dymarco
Offline
última acción: Hace 7 años 12 meses
alta: 08/11/2016 - 18:25
Puntos: 20
lo de las filas es un error

lo de las filas es un error las dos tienen 16

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 meses 1 semana
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
entonces

pues entonces establece Ajuste como la celda que está a la derecha de la celda con el nombre

Sub crear_copias_hoja_modelo()

    Dim Ajuste As Range

    Dim Celda As Range

    For Each Celda In Sheets("AUXILIAR").Range("i1:i16").Cells

        Set Ajuste = Celda.Offset(0, 1) 'Ajuste es la celda a la derecha de Celda

    ' aquí lo mismo que tenías

        'chequeamos que haya valores para evitar debug

        If Celda = "" Then

           Exit For

        End If

        'creamos una copia

        Sheets("Llave").Copy After:=ActiveSheet

        'le cambiamos el nombre

        ActiveSheet.Name = Celda.Value

        'pintamos la pestaña

        ActiveSheet.Tab.Color = vbRed

        'planchamos el valor en la hoja creada

        ActiveSheet.Range("A3").Value = Ajuste.Value

    Next

    'volvemos a la hoja principal

    Sheets("Param").Select

End Sub

 

 

------
Ya sé Excel, pero necesito más.

julian (no verificado)
Imagen de dymarco.
copiar y nombrar