Macro que copia una pág. Nueva a partir de la actual, toma una celda de la misma, y la copia en una celda de la pág. Anterior

Estoy necesitado en crear una Macro con VBA que copie una pág. Nueva a partir de la actual, tome una celda de la misma, y la copie en una celda de la pág. Inicial.

1 Respuesta

Respuesta
1

.

Buenas, Valentín

La siguiente rutina hace lo que solicitas.

Nota que, al principio del código, hay unas variables donde indicarás las direcciones que desees

Accede al Editor de VBA (Atajo: Alt + F11), inserta un módulo - si no tuvieras uno ya- y pega el siguiente código:

Sub DupHoja()
'---- Variables de configuración:
'=== VALENTIN, modifica estos datos de acuerdo a tu proyecto:
CeldaORi = "d4" 'celda de donde toma valor a llevar
Hojadest = "Inicial" 'Nombre de la hoja donde pegar el contenido de la celda indicada
CeldaDest = "A1" ' Celda en la hoja Inicial donde pegar el contenido de la celda indicada
'---- fin Variables
'
'---- inicio de rutina:
'  
    ActiveSheet.Copy after:=ActiveSheet
    Range(CeldaORi).Copy
    With Sheets(Hojadest).Range(CeldaDest)
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
    End With
    MsgBox "Hoja " & ActiveSheet.Name & " duplicada."
End Sub

.

Hola fejoal.

Muchas gracias por la rapidez en que has respondido. El caso es que soy nuevo en este foro y también en la creación de macros de Excell. Por esto último y probablemente porque no he formulado bien la pregunta, no he comprendido bien la respuesta. Me explico:

1.- Consultando aquí, en todoexpertos y también en otras web he aprendido ha hacer una macro que simplemente copia la hoja actual. En el Editor de VBA, la he pegado directamente en la "Hoja". Como activo la macro desde un "botón" que está en la hoja que copio, la nueva hoja también tiene ese "botón", lo que me permite ir creando una nueva hoja a partir de la última, ya que el botón siempre funciona.

No conozco las funciones de las demás ventanas como "locales", "inspecciones", "inmediato" ni funciones como "depuración" y otras varias. 

2.- He aprendido que "ActiveSheet.Previous.Select" hace referencia a la hoja previa a la activa y  "ActiveSheet.Next.Select" se refiere a la hoja posterior a la activa.

3.- La razón de mi necesidad, es que cada día del año (sin excepción) rellenamos una hoja con información variada que implica entre otras cosas el "hacer click" en "Casilla (control de formulario)" que previamente hemos insertado y que vincula ese "Click" a una celda como VERDADERO o FALSO para posteriormente convertir esa información en números. ¡Y funciona! Ya ves, me emociono con poco, que para mi es mucho. 

4.- Lo que nos facilitaría las cosas es una macro que copiaría la hoja 1, (colocándola en la posición de hoja siguiente, es decir, hoja 2), después copiaría la celda F71 de la hoja 2 creada y la pegaría en la celda V73 de la hoja 1. A partir de ahí, trabajamos sobre la hoja 2 y repetimos la macro de manera que la hoja a copiar sea la 2 y la resultante sea la 3. Y así sucesivamente.

5.- He entendido en tu respuesta que he de nombrar en qué hoja tal y tal... Salvo que yo esté muy errado, prefiero utilizar el código "ActiveSheet.Previous.Select" que te comentaba en el punto 2 para decidir en qué hoja se pega la celda F71, ya que la necesidad es que un dato escrito hoy se copie en la hoja del día anterior.  

Espero haberme explicado mejor esta vez. Si me puedes ayudar te quedaría muy agradecido.

Ah! La cosa no termina aquí. Si funciona, y abusando de tu generosidad, te pediré después algo que ya he leído por aquí, he metido muchas horas intentándolo pero no lo he conseguido. Te hago un adelanto: La razón de este Libro de Excell es la de "medir" el rendimiento de trabajadores en 5 turnos por día.

Ejemplo: Día 1, 1º Turno; Columna G= Andrés. 2º Turno; Columna K= Pedro. 3º Turno; Columna O= María..., 4º... y 5º... Los turnos rotan aleatoriamente cada día. En las últimas filas de cada columna quedan grabados los totales por turno y por trabajador. Pues bien, lo ideal sería que los totales de cada trabajador, sea el turno que sea, se sumen en una sola hoja con el nombre de ese trabajador. 

¿Difícil? ¿Es un reto? Para mi desde luego que sí.

Muchas gracias.

.

Hola, Valentín

Te contesto sobre cada punto de tu consulta:

1.- Consultando aquí, en todoexpertos y también en otras web he aprendido ha hacer una macro que simplemente copia la hoja actual. En el Editor de VBA, la he pegado directamente en la "Hoja". Como activo la macro desde un "botón" que está en la hoja que copio, la nueva hoja también tiene ese "botón", lo que me permite ir creando una nueva hoja a partir de la última, ya que el botón siempre funciona.

Correcto. Todos los objetos de la hoja se replican cuando ejecutas la instrucción ActiveSheet.Copy after:=ActiveSheet

Con after, le indicas dónde quieres que quede la hoja copiada. En este caso, después de la actual.

No conozco las funciones de las demás ventanas como "locales", "inspecciones", "inmediato" ni funciones como "depuración" y otras varias.

Esas herramientas se suelen usar para recorrer la rutina paso a paso y ver qué valores van tomando las varibles que definas.

Una primera aproximación que puedes hacer, es ejecutar la macro que te propuse, paso a paso, avanzando con F8. Reduce el tamaño de la ventana del Editor de VBA para poder ver qué pasa en tu archivo mientras recorres cada instrucción. Si acercas el puntero del mouse a cada variable, una ventana te mostrará el valor que está considerando.

2.- He aprendido que "ActiveSheet.Previous.Select" hace referencia a la hoja previa a la activa y "ActiveSheet.Next.Select" se refiere a la hoja posterior a la activa.

En realidad, esas instrucciones no "hacen referencia" sino que llevan a la hoja anterior y posterior, respectivamente.

Si bien es un recurso válido, es más eficiente -y, si quieres, más profesional- ejecutar las instrucciones sin mover el cursor o cambiar de hoja.

Por ejemplo, en la rutina que te pasé, la isntrucción:

Range(CeldaOri). Copy

Copia la celda indicada en la variable CeldaOri, sin necesidad de ir a ella físicamente.

3.- La razón de mi necesidad, es que cada día del año (sin excepción) rellenamos una hoja con información variada que implica entre otras cosas el "hacer click" en "Casilla (control de formulario)" que previamente hemos insertado y que vincula ese "Click" a una celda como VERDADERO o FALSO para posteriormente convertir esa información en números. ¡Y funciona! Ya ves, me emociono con poco, que para mi es mucho.

Pues tiene mucho sentido que te emociones. Es la alegría de avanzar en el dominio de esta poderosísima herramienta. Así empezamos todos los que andamos por este sitio...

4.- Lo que nos facilitaría las cosas es una macro que copiaría la hoja 1, (colocándola en la posición de hoja siguiente, es decir, hoja 2), después copiaría la celda F71 de la hoja 2 creada y la pegaría en la celda V73 de la hoja 1. A partir de ahí, trabajamos sobre la hoja 2 y repetimos la macro de manera que la hoja a copiar sea la 2 y la resultante sea la 3. Y así sucesivamente.

5.- He entendido en tu respuesta que he de nombrar en qué hoja tal y tal... Salvo que yo esté muy errado, prefiero utilizar el código "ActiveSheet.Previous.Select" que te comentaba en el punto 2 para decidir en qué hoja se pega la celda F71, ya que la necesidad es que un dato escrito hoy se copie en la hoja del día anterior.

Entiendo mejor lo que buscas con estas aclaraciones.

Por lo dicho anteriormente, es más práctico referir a la hoja donde quieres que se peguen los datos sin necesidad de ir a ella. En la variante del procedimiento que te copio a continuación reemplacé las variables por las que mencionaste y además, la rutina toma el nombre de la hoja de destino ANTES de duplicarla, pues así sabes que esa será la hoja anterior dejando en en V73 el valor de la celda F71 de la nueva hoja.

Prueba con esta nueva macro, donde -en un intento didáctico- te detallo qué hace cada línea:

Sub DupHoja()
'---- Variables de configuración:
'=== VALENTIN, modifica estos datos de acuerdo a tu proyecto:
CeldaORi = "F71" 'celda de donde toma valor a llevar
CeldaDest = "V73" ' Celda en la hoja Inicial donde pegar el contenido de la celda indicada
'---- fin Variables
'
'---- inicio de rutina:
'
'1.- Captura del nombre de la hoja a duplicar  
Hojadest = ActiveSheet.Name ' básicamente solo tuve que generar esta linea para que haga lo que solicitaste
'2.- Duplicación de la hoja actual  
ActiveSheet.Copy after:=ActiveSheet
'3.- copiado del rango indicado  
Range(CeldaORi).Copy
'4.- Pegado del contenido y formato de la celda original  
Sheets(Hojadest).Range(CeldaDest).PasteSpecial Paste:=xlPasteValues
Sheets(Hojadest).Range(CeldaDest).PasteSpecial Paste:=xlPasteFormats
'5.- Aviso de terminado  
MsgBox "Hoja " & ActiveSheet.Name & " duplicada."
End Sub

Espero haberme explicado mejor esta vez. Si me puedes ayudar te quedaría muy agradecido.

Ah! La cosa no termina aquí. Si funciona, y abusando de tu generosidad, te pediré después algo que ya he leído por aquí, he metido muchas horas intentándolo pero no lo he conseguido. Te hago un adelanto: La razón de este Libro de Excell es la de "medir" el rendimiento de trabajadores en 5 turnos por día.

Ejemplo: Día 1, 1º Turno; Columna G= Andrés. 2º Turno; Columna K= Pedro. 3º Turno; Columna O= María..., 4º... y 5º... Los turnos rotan aleatoriamente cada día. En las últimas filas de cada columna quedan grabados los totales por turno y por trabajador. Pues bien, lo ideal sería que los totales de cada trabajador, sea el turno que sea, se sumen en una sola hoja con el nombre de ese trabajador.

Si organizarás la información como una base de datos, lo que solicitas sería muy sencillo de lograr usando Tablas Dinámicas.

Sí, ya sé, hay una pulsión a usar macros cuando uno toma conocimiento de ellas. Pero MS Excel cuenta con herramientas más perfectas y adecuadas que evitan horas de programación y errores.

Pero eso es otra historia.

Por ahora, prueba que te funcione bien la rutina que te compartí.

Un abrazo grande

Fernando

.

Hola Fernando.

Muchas gracias de nuevo. He copiado tu código y... ¡Ta-channnn! ¡Funciona!

Se ha duplicado la hoja. Se ha copiado la celda de la nueva hoja en la anterior. Hasta aquí ¡Perfecto! Cumple con lo solicitado...

Pero... Ay los peros! 

En mi pensamiento (probablemente erróneo) creía que posteriormente, si modificamos la celda F71 (algo que realmente es lo que tenemos que hacer), se modificaría también la celda de destino, tantas veces como sea necesario. Vamos, como si pusiéramos que la celda V73=F71.

¿Crees que hay solución?

Muchas gracias por tu trabajo.

.

Buenas,

Aquí va la macro modificada para que deje las celdas vinculadas. Al terminar la macro te dejará en esa celda para ver si es correcto el vínculo que hizo:

Sub DupHoja()
'---- Variables de configuración:
'=== VALENTIN, modifica estos datos de acuerdo a tu proyecto:
CeldaORi = "F71" 'celda de donde toma valor a llevar
CeldaDest = "V73" ' Celda en la hoja original donde pegar el contenido de la celda indicada
'---- fin Variables
'
'---- inicio de rutina:
'
'1.- Captura del nombre de la hoja a duplicar
Hojadest = ActiveSheet.Name ' básicamente solo tuve que generar esta linea para que haga lo que solicitaste
'2.- Duplicación de la hoja actual
ActiveSheet.Copy after:=ActiveSheet
'3.- copiado del rango indicado
Range(CeldaORi).Copy
'4.- Pegado del vínculo y formato de la celda original
Sheets(Hojadest).Range(CeldaDest).PasteSpecial Paste:=xlPasteFormats
Sheets(Hojadest).Select
Range(CeldaDest).Select
ActiveSheet.Paste Link:=True
'5.- Aviso de terminado
MsgBox "Hoja " & ActiveSheet.Name & " duplicada."
End Sub

Espero que ahora sí esté como necesitas.

Un consejo para otra vez que hagas una consulta a mi o cualquier experto: Espera a tener resuelto el problema antes de calificar. Tal vez, entonces, consideres que la respuesta recibida fue algo más que "util"

.

Ohhhh! Se fue todo al garete!

V73 debe ser igual a la celda F71, pero a la celda F71 de la nueva página creada. (Tal y como lo hiciste en el anterior código, solo que entonces lo hacía solo en el momento de ejecutar la macro y yo te pedía que fuese de forma permanente para que en la celda V73 se actualicen los datos con los hipotéticos futuros cambios realizados en la F71.

Además, a partir de la 2ª vez, copia la página pero vuelve automáticamente al editor VBA e indica error 400.

Lo ideal es que al acabar la ejecución, se quede en la última página creada pues es donde trabajaremos añadiendo datos.

Fernando, perdona por haber calificado. Lo he hecho en la creencia que en ese momento era lo mas adecuado. He pensado que una vez terminado, siempre puedo cambiar de "Votar" a "Excelente". (Son las dos opciones que me da, lo de útil no me aparece). Y estoy deseando de hacerlo. 

Muchas gracias de nuevo.

.

Buenas,

Me confunde la primera parte de tu última consulta.

La rutina que te pasé efectivamente coloca en la celda V73 de hoja original una referencia a la celda F71 de la nueva página. Fíjate que la macro termina dejándote en esa celda donde ves que se refiere a la nueva hoja creada. Esto coincide con lo que dices allí. Luego me explicas si lo que quieres es distinto a eso (o al revés).

La siguiente variante termina en la hoja nueva:

Sub DupHoja()
'---- Variables de configuración:
'=== VALENTIN, modifica estos datos de acuerdo a tu proyecto:
CeldaOri = "F71" 'celda de donde toma valor a llevar
CeldaDest = "V73" ' Celda en la hoja original donde pegar el contenido de la celda indicada
'---- fin Variables
'
'---- inicio de rutina:
'
'1.- Captura del nombre de la hoja a duplicar
Hojadest = ActiveSheet.Name ' básicamente solo tuve que generar esta linea para que haga lo que solicitaste
'2.- Duplicación de la hoja actual
ActiveSheet.Copy after:=ActiveSheet
'3.- copiado del rango indicado
Range(CeldaOri).Copy
'4.- Pegado del vínculo y formato de la celda original
HojaOri = ActiveSheet.Name
Sheets(Hojadest).Range(CeldaDest).PasteSpecial Paste:=xlPasteFormats
Sheets(Hojadest).Select
Range(CeldaDest).Select
ActiveSheet.Paste Link:=True
Sheets(HojaOri).Select
Range(CeldaOri).Select
'5.- Aviso de terminado
MsgBox "Hoja " & ActiveSheet.Name & " duplicada."
End Sub

Comentame si está OK así.

Saludos

Fernando

.

.

Ah!

Ejecuté la macro varias veces, aún desde la hoja nueva, y funcioné ok todas las veces.

Nunca saltó el error que mencionas, por lo que imagino que debe ser algún tema particular de tu archivo, no de la rutina.

Saludos de nuevo.

Nada. No hay manera. 

Repito lo escrito anteriormente: V73 debe ser igual a la celda F71, pero a la celda F71 de la nueva página creada

Y no es así. Tanto el resultado como la fórmula que se ve en la celda de la nueva hoja creada dice que V73=F71 de la misma pág. Más exactamente, lo que aparece el la celda V73 es: =$F$71. Por otro lado sigue apareciendo el error 400 sin que yo (por lo menos voluntariamente) haya añadido nada y antes no lo hacía. 

En fin, yo te agradezco sinceramente tu esfuerzo, pero ya me da corte seguir pidiéndote que continúes trabajando en ello. Desconozco el esfuerzo que te causa. No sé si te lleva segundos,  minutos u horas. 

Gracias.

.

Buenos días, Valentín

Primero que nada: vamos a continuar conversando hasta que tengas resuelto tu problema.

Ese es el objetivo de este lugar. Así que consultame todas las veces que sea necesario.

Como no sé que puede estar ocasionado aquel error 400, le coloqué a la siguiente macro una instrucción para que te dé una descripción más explícita del error. (Algunos dicen que ese error se produce por tener un complemento (add-in) de una versión anterior de MS Excel. En tal caso, se resuelve desinstalando ese complemento. Puedes revisar qué complementos tienes instalado en tu Excel en la ventana inicial de Opciones). Entonces, si se produce el error, anota el mensaje que te dé la macro y envíamelo por esta via.

Además adecué las instrucciones para que la celda V73 de la hoja original lea la celda F71 de la nueva página creada.

Sub DupHoja()
'---- Variables de configuración:
'=== VALENTIN, modifica estos datos de acuerdo a tu proyecto:
CeldaOri = "F71" 'celda de donde toma valor a llevar
CeldaDest = "V73" ' Celda en la hoja original donde pegar el contenido de la celda indicada
'---- fin Variables
'
'---- inicio de rutina:
'  
'1.- Captura del nombre de la hoja a duplicar  
Hojadest = ActiveSheet.Name ' básicamente solo tuve que generar esta linea para que haga lo que solicitaste
'2.- Duplicación de la hoja actual  
Application.DisplayAlerts = False
On Error GoTo VerError
ActiveSheet.Copy after:=ActiveSheet
Application.DisplayAlerts = True
'3.- copiado del rango indicado  
Range(CeldaOri).Copy
'4.- Pegado del vínculo y formato de la celda original  
HojaOri = ActiveSheet.Name
Sheets(Hojadest).Range(CeldaDest).PasteSpecial Paste:=xlPasteFormats
Sheets(Hojadest).Select
Range(CeldaDest).Select
ActiveSheet.Paste Link:=True
Sheets(HojaOri).Select
Range(CeldaOri).Select
Application.CutCopyMode = False
Application.Calculate
'5.- Aviso de terminado  
MsgBox "Hoja " & ActiveSheet.Name & " duplicada."
VerError:
    If Err.Number Then MsgBox Err.Description, vbInformation, "VALENTIN, anota este error:"
Err.Clear
End Sub

Yo lo probé sobre un archivo propio y en la celda V73 de la hoja vieja dejó el vínculo a la celda F71 de la hoja nueva, como podrás ver en la siguiente imagen:

Pruebalo y dime si ahora funciona OK.

Saludos

Fernando

.

Hola de nuevo Fernando.

Ocurre exactamente lo mismo. Lo que aparece el la celda V73 es: =$F$71.

Aunque ya no aparece el error 400, ahora aparece: VALENTÍN, anota este error (Como título del cuadro de dialogo) y Error en el método Select de la clase Range (como cuerpo del mensaje).

Saludos.

.

Buenas, Valentín

Efectivamente, no aparece el error 400 porque le incorporé un dispositivo para que indique concretamente cuál es el error que ocasiona esto y, probablemente, por ello yo puedo ver que hace el vínculo a la hoja nueva, como habrás visto en la imagen que te pasé.

Aparentemente, hay algo en la celda F71 que impide que sea seleccionada.

Puede ser que sea una celda combinada con otras o protegida o algo así.

Si fuera así prueba quitando la combinación o la protección.

. Si, eventualmente aún tuvieras problemas puedes enviarme el archivo a:

Hola Fernando, te acabo de enviar el archivo excel.

Muchas gracias.

.

Buenas, Valentín

En mi primera respuesta te dije:

Accede al Editor de VBA (Atajo: Alt + F11), inserta un módulo y pega el siguiente código:

Pero tu pegaste el código en el área de VBA de la hoja, nunca en un código y eso generó todo este inconveniente.

Ya te envié el archivo con eso corregido.

Espero que ahora sí esté como necesitas.

Abrazo

Fer

.

Saludos cordiales.

Antes de nada, pedirte disculpas por haber pegado el código (de la hoja según indicas) y no en un código (según indicas también). No inserté un módulo porque como te dije, no tenía ni idea de qué es un módulo ni para qué sirve. Escribí: "No conozco las funciones de las demás ventanas como "locales", "inspecciones", "inmediato" ni funciones como "depuración" y otras varias". 

El archivo que me has enviado simplemente lo ha roto todo y el resultado no puede ser más desastroso. Me explico:

1º Las "Casillas (Control de formulario)" generan un número (SUMA) en función de si están activadas o no. AHORA YA NO LO HACEN. (Y las fórmulas que creé siguen en su sitio)

2º Para evitar el error humano de que en una línea estén activadas las 2 o ninguna, había creado reglas que pintaban las celdas de rojo. (Y las reglas que creé siguen en su sitio) AHORA YA NO LO HACEN.

3º Cuando cambio el valor de la celda F71 de la nueva hoja, no ocurre nada en la V73 de la hoja original.

4º Me pides que te valore excelente aún cuando el trabajo no está terminado y aunque aprecio tu esfuerzo y buena fe, en cuanto a resultados estoy como al principio pero con un motón de tiempo perdido. (Aunque parte haya sido por mi culpa)

Muchas gracias una vez más por tu esfuerzo, pero ya no tengo tiempo para continuar.

Un saludo.

.

Buenas, Valentín

Me parece que pudo haber quedado en modo Recalculo Manual, porque todo lo que mencionas lo sigue haciendo. Prueba presionando F9 o cambiando en la pestaña "Fórmulas" "opciones para Cálculo" y cambiarlo a Automático.

Dos cosas son seguras: Ninguno de los problemas que mencionas tienen que ver con la rutina que te compartí. Y JAMAS te pedí -a ti o a nadie- que me valores excelente. Si me preocupara la calificación que recibo por mi esfuerzo hubiera dejado de contestarte a la segunda pregunta que me hiciste. Lo único que me importa es que tengas resuelto tu problema.

Te acabo de mandar el mismo archivo grabado con recalculo automático y verás que la doble selección de casillas se sigue marcando en rojo.

Hola de nuevo Fernando.

PERFECTO! Funciona de maravilla. Ahora sí. Muchas gracias por tu trabajo.

Qué ilusión me ha hecho y qué contento me he puesto. Muchas gracias de verdad.

Aunque ahora ha surgido otro problemilla. Me explico: De lo que me he dado cuenta es de que en las dos líneas siguientes, en la que indica "SUBIDA/BAJADA EN Nº TAREAS" y "SUBIDA/BAJADA EN %" respectivamente, tenemos el mismo problema pues, si te fijas, al igual que en la fila en la que has trabajado, toman un dato de la nueva hoja creada, (bueno, deberían de tomar). No sé si esto es fácilmente corregible o te supondría mucha liada para rematar el trabajo. Ya me dirás.

Muchas gracias de nuevo.

.

Muy bien, Valentín

Me alegro de que te funcione. No lo mencionas pero imagino que el problema debe haber sido aquel molesto recálculo manual.

Desde luego, lo que pides es posible. Interpreté -a priori- que quieres que esas dos celdas (V74 y V75) traigan el valor que tuvieran en la hoja nueva (F74 y F75).

Si, eventualmente, te hubiera interpretado bien, acabo de enviarte aquel archivo con la rutina modificada para que agregue esas fórmulas vinculantes.

De todos modos, por si le sirviere a alguien, aquí dejo la versión final del código:

Sub DupHoja()
'---- Variables de configuración:
'=== VALENTIN, modifica estos datos de acuerdo a tu proyecto:
CeldaOri = Array("F71", "F74", "F75") 'celdas de dónde toma valor a llevar
CeldaDest = Array("V73", "V74", "V75") ' Celdas en la hoja original donde pegar el contenido de la celdas indicadas
'---- fin Variables
'
'---- inicio de rutina:  
'
'1.- Captura del nombre de la hoja a duplicar  
Hojadest = ActiveSheet.Name ' básicamente solo tuve que generar esta linea para que haga lo que solicitaste
'2.- Duplicación de la hoja actual  
Application.DisplayAlerts = False
ActiveSheet.Copy after:=ActiveSheet
Application.DisplayAlerts = True
'3.- Copiado y Pegado de vínculos y formatos de la celdas originales:  
HojaOri = ActiveSheet.Name
For Lacelda = 0 To UBound(CeldaOri)
    Range(CeldaOri(Lacelda)).Copy
    Sheets(Hojadest).Select
    Sheets(Hojadest).Range(CeldaDest(Lacelda)).PasteSpecial Paste:=xlPasteFormats
    Range(CeldaDest(Lacelda)).Select
    ActiveSheet.Paste Link:=True
    Sheets(HojaOri).Select
    Range(CeldaOri(Lacelda)).Select
    Application.CutCopyMode = False
Next
Application.Calculate
'4.- Aviso de terminado  
MsgBox "Hoja " & ActiveSheet.Name & " duplicada."
End Sub

Ojalá esté OK, pero si lo que deseas fuera algo distinto, vuelve a escribirme.

¡Gracias! 

Funciona...!!!

Muchas gracias Fernando. Funciona a la perfección. Buen trabajo!

Saludos.

Fernando, ¿recuerdas lo que te hablé al principio sobre la 2ª parte de este trabajo? Te lo recuerdo pegándolo a continuación y te comunico que lo voy a publicar como un nuevo trabajo y explicándome mejor, espero. 

Estate atento y si quieres, te animo a resolverlo.

"Ah! La cosa no termina aquí. Si funciona, y abusando de tu generosidad, te pediré después algo que ya he leído por aquí, he metido muchas horas intentándolo pero no lo he conseguido. Te hago un adelanto: La razón de este Libro de Excell es la de "medir" el rendimiento de trabajadores en 5 turnos por día.

Ejemplo: Día 1, 1º Turno; Columna G= Andrés. 2º Turno; Columna K= Pedro. 3º Turno; Columna O= María..., 4º... y 5º... Los turnos rotan aleatoriamente cada día. En las últimas filas de cada columna quedan grabados los totales por turno y por trabajador. Pues bien, lo ideal sería que los totales de cada trabajador, sea el turno que sea, se sumen en una sola hoja con el nombre de ese trabajador".

Muchas gracias de nuevo. 

.

Hola, Valentín

En el mensaje de mi perfil había colocado que estaría de vacaciones hasta hoy, de allí la demora.

Acabo de enviarte un mail con aquel archivo que estábamos trabajando al cual le agregué una hoja que extrae los resultados de cada turno para cada trabajador.

Hubiera ayudado que dijeras qué dato de cada hoja es el que quieres medir para cada empleado, pero después me lo comentarás.

Saludos

Fernando

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas