.
Buenos días, Diego
Te comparto un código que genera hojas a partir de una hoja-plantilla que está en blanco y que se agrega con el nombre que aparece en el listado y deja un hipervínculo a la hoja creada.
Es muy probable que haya que ajustar algunas cuestiones, como por ejemplo qué hacer cuando encuentra una hoja creada anteriormente.
Dado que repetirás esta rutina semanalmente, voy a suponer que las hojas pre existentes NO deben ser reemplazadas, sino sólo agregar las nuevas.
Luego me dirás si esto es correcto o hay algún ajuste que hacer.
Vé al Editor de VBA (atajo: Alt + F11) inserta un módulo nuevo y pega todo esto en él:
Public ColLetr
Public CeldaTit
Public Cont
Sub creatodas()
'Diego, completa estas variables:
ColLetr = "C8:C40000" 'escribir rango amplio donde están los Codigos:
CeldaTit = "D4" ' Celda dentro de la hoja creada donde colocar el código correspondiente
'-------------------------
'control de columna con nombres
Set isect = Application.Intersect(Range(ColLetr), ActiveCell)
If isect Is Nothing Or Len(ActiveCell.Value) < 1 Then
MsgBox "Esta rutina sólo funciona para un código ingresado en la columna " & Left(ColLetr, 1) & Chr(10) & "NO se agrega hoja alguna." & Chr(10), vbExclamation, "AREA ERRONEA"
GoTo TheEnd
End If
HojaPrinc = ActiveSheet.Name
For Each CODIGO In Range(ColLetr)
CODIGO.Select
If IsEmpty(CODIGO) Then GoTo FIN
Call AddNSht
Sheets(HojaPrinc).Select
Next
FIN:
MsgBox "Listo! Se agregaron " & Cont & "hojas.", vbInformation
TheEnd:
Set isect = Nothing
End Sub
Sub AddNSht()
'
'by FeJoAl
'
HojaPrinc = ActiveSheet.Name
NombHoja = ActiveCell.Value
'control de existencia de Hoja
On Error Resume Next
Set HojaObjeto = ActiveWorkbook.Sheets(NombHoja)
If Err = 0 Then GoTo TheEnd2 ' Hoja existe ===> No hacer nada
On Error GoTo 0
Application.ScreenUpdating = False
Cod_Name = NombHoja
Sheets("_UltCod").Visible = True
Sheets("_Template").Visible = True
Sheets("_UltCod").Select
Sheets("_Template").Copy Before:=ActiveSheet
Sheets("_UltCod").Select
ActiveSheet.Previous.Select
Range(CeldaTit).Value = Cod_Name
ActiveSheet.Name = NombHoja
Cont = Cont + 1
Sheets("_Template").Visible = False
Sheets("_UltCod").Visible = False
Sheets(HojaPrinc).Select
' coloca hypervinculo y fórmulas en el listado
vinc = "'" & ActiveCell.Value & "'!" & CeldaTit
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=vinc
Sheets(NombHoja).Select
Application.ScreenUpdating = True
TheEnd2:
Set HojaObjeto = Nothing
End Sub
Verás que incluye dos macros
AddNews que agrega hoja por hoja.
CreaTodas, que ejecuta la anterior, recorriendo el listado que tengas en la columna que le indicaste hasta que encuentra una celda en blanco.
La Hoja que llamé "_Templat"e es aquella que se duplicará cada vez que cree una.
Si ya tienes una creada, y sin datos, cámbiale el nombre por el indicado. Verás que esta hoja permanecerá oculta para preservarla.
Tendrás que agregar al final una hoja que se llame "_UltCod". En blanco, es sólo una guia.
Verás en el principio que te dejé indicadas algunas variables para que completes con los datos reales de tu archivo: uno es el rango donde están los códigos, amplio para que incluya los que agregues posteriormente. Y una celda de la hoja creada donde estárá indicado el nombre del código que creó.
Bueno, más largo de escribir que de hacer, espero que te sea de ayuda.
En caso de que tuvieras que modificar su comportamiento, avisame y lo ajustamos.
Abrazo
Fernando
(Buenos Aires, Argentina)
.