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!
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.
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
¿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.
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.
¿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.
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.
lo de las filas es un error las dos tienen 16
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.
[comentario movido a tema nuevo en el foro http://www.necesitomas.com/copiar-hoja-varias-veces-cambiando-nombre]