** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Copiar dos hojas a otro Libro
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Copiar dos hojas a otro Libro

 Responder Responder
Autor
Mensaje
Erick Gamer Ver desplegable
Habitual
Habitual
Avatar

Unido: 08/Mayo/2016
Localización: Mexico
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Erick Gamer Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Copiar dos hojas a otro Libro
    Enviado: 04/Julio/2018 a las 05:50
Hola de nuevo a todos, una vez mas necesito de su ayuda.

Tengo un Libro con Macros, con varias hojas de calculo y con muchas formulas, de este libro necesito copiar dos hojas a otro libro guardado en una ruta especifica, antes de guardarlos en el libro necesito borrar lo que tienen las hojas destino del libro ya guardado y posterior a eso copiar las dos hojas conservando el formato de las hojas destino (Tipos de Fecha, Porcentajes, números, etc...)

He visto varios ejemplos en Internet, pero muchos tienen Arrays para enviar todas las hojas a un nuevo libro y otros como el siguiente código copian solo una hoja.

El libro a donde se enviaran los datos, tienen Tablas Pivote y algunas gráficas que se enlazaran a las hojas enviadas. 

Este es el ejemplo que estoy usando, pero no he podido adaptarlo para enviar las dos hojas que necesito:


Aqui el codigo adaptado:

'**************************************************

Sub SendData()

'Desactivar Movimientos de pantalla y Alertas

Application.ScreenUpdating = False
Application.DisplayAlerts = False


'Definir objetos a utilizar
Dim wbDestino As Workbook, _
    wsOrigen As Excel.Worksheet, _
    wsDestino As Excel.Worksheet, _
    rngOrigen As Excel.Range, _
    rngDestino As Excel.Range

'Indicar el libro de Excel destino
Set wbDestino = Workbooks.Open("C:\OEE\Graficas.xlsx")
 
'Activar este libro
ThisWorkbook.Activate
 
'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Totales")
Set wsDestino = wbDestino.Worksheets("Datos")
 
'Indicar la celda de origen y destino
Const celdaOrigen = "A2:G2"
Const celdaDestino = "A1:G1"

'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
Set rngDestino = wsDestino.Range(celdaDestino)

'Seleccionar rango de celdas origen
rngOrigen.Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy

'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteValues
Application.CutCopyMode = False

'Guardar y cerrar el libro de Excel destino
wbDestino.Save
wbDestino.Close

'Activar Movimientos de pantalla y Alertas
Application.ScreenUpdating = True
Application.DisplayAlerts = True

MsgBox "Finished Process....!", vbExclamation, "Finished...!"

Workbooks.Open ("C:\OEE\Graficas.xlsx")

End Sub

NOTA: No soy experto en excel por ello recurro a su ayuda.

Saludos

Erick Gamer




Aprendiz de todos, maestro de nadie.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5199
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 04/Julio/2018 a las 19:34
Como en los detalles aportados no hay imágenes de como están tus datos de origen y destino, me he limitado a lo que 'se ve' en el código. Ten en cuenta que (en esta ocasión) yo no puedo hacer pruebas con datos/rangos/archivos reales, y no puedo saber si hay algún error de sintaxis (en tu código y el mío), etc. Prueba y nos cuentas.

Sub SendData()
'Desactivar Movimientos de pantalla y Alertas
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Definir objetos a utilizar
Dim wbDestino As Workbook, wsOrigen As Excel.Worksheet, _
    wsDestino As Excel.Worksheet, rngOrigen As Excel.Range, _
    rngDestino As Excel.Range, hojas&, filaUO&
   
'Indicar el libro de Excel destino
Set wbDestino = Workbooks.Open("C:\OEE\Graficas.xlsx")
 
'Activar este libro
'ThisWorkbook.Activate
1
  hojas = hojas + 1
'Indicar las hojas de origen y destino
Set wsOrigen = ThisWorkbook.Worksheets(InputBox("?Nombre de la hoja origen?", "ASV", "Totales"))
Set wsDestino = wbDestino.Worksheets(InputBox("?Nombre de la hoja destino?", "ASV", "Datos"))
'?ltima fila con datos en origen.
  filaUO = wsOrigen.Cells(Rows.Count, 1).End(xlUp).Row
 
'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range("A2:G2").Resize(filaUO - 1)
Set rngDestino = wsDestino.Range("A1")
rngOrigen.Copy
'Borra datos en destino.
rngDestino.Range("A1").CurrentRegion.ClearContents
'Pegar datos en celda destino
With rngDestino
  .Range("A1").Select
  .PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
'Repite para segunda hoja.
If hojas = 1 Then GoTo 1
'Guardar y cerrar el libro de Excel destino
wbDestino.Save
wbDestino.Close
'Activar Movimientos de pantalla y Alertas
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Finished Process....!", vbExclamation, "Finished...!"
Workbooks.Open ("C:\OEE\Graficas.xlsx")
End Sub


Aprendemos viendo respuestas de otros. Aprendemos más intentando resolver dudas (pregunta/responde).

Mi sitio_web con ejemplos Excel.
Arriba
Erick Gamer Ver desplegable
Habitual
Habitual
Avatar

Unido: 08/Mayo/2016
Localización: Mexico
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Erick Gamer Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 04/Julio/2018 a las 20:33
Hola, gracias por contestar,

Tengo algunas dudas que he comentado en su código ademas de que me marca un error, mismo que tambien lo comente en el codigo en los ejemplos que he subido a mi Drive.


EDITO:

El libro origen es ASV
El libro destino Graficas

Las hojas a copiar las coloreadas en azul.

Espero  me pueda ayudar

Saludos

Erick Gamer




Editado por Erick Gamer - 04/Julio/2018 a las 20:36
Aprendiz de todos, maestro de nadie.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5199
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 04/Julio/2018 a las 22:19

1.- « 1   'Esto que es lo que hace? » 

ASV -  Es una etiqueta. Aquí es desviada la ejecución cuando pasa por primera vez por ...

 hojas = hojas + 1: If hojas = 1 Then GoTo 1

... para que te pregunte por el nombre de la segunda hoja. Por defecto tendrá los mismos nombres que en la primera pasada, pero los puedes cambiar por otros.


2.- « ¿Se puede omitir el InputBox?, ¿La otra hoja origen/destino donde la nombro? » 

ASV - 2.2.- La segunda pregunta está contestada en el punto anterior.

ASV - 2.1.- A la primera pregunta: SI, si quieres poner los nombres de las hojas directamente en el código, puedes incluirlos en las variables  antes de la etiqueta  1 , y nombrar nuevamente dichas variables (con los segundos nombres) una línea antes antes de...

 hojas = hojas + 1: If hojas = 1 Then GoTo 1 (observa el nuevo código).



A continuación el código modificado y sin los INPUTs (quité cerrar el libro destino y reabrirlo porque no le veo sentido):

Sub SendData()

'Desactivar Movimientos de pantalla y Alertas

Application.ScreenUpdating = False

Application.DisplayAlerts = False

'Definir objetos a utilizar

Dim wbDestino As Workbook, wsOrigen As Excel.Worksheet, _

    wsDestino As Excel.Worksheet, rngOrigen As Excel.Range, _

    rngDestino As Excel.Range, hojas&, filaUO&

'Indicar el libro de Excel destino

Set wbDestino = Workbooks.Open("C:\OEE\Graficas.xlsx")

'Indicar las primeras hojas de origen y destino.

Set wsOrigen = ThisWorkbook.Worksheets("Machine by Shift Log (<10%)")

Set wsDestino = wbDestino.Worksheets("Machine by Shift Log (<10%)")

1

'Última fila con datos en origen.

  filaUO = wsOrigen.Cells(Rows.Count, 1).End(xlUp).Row

 

'Pegar datos en destino.

wsDestino.Range("A1:G" & filaUO - 1).Value = wsOrigen.Range("A2:G" & filaUO).Value

'Indicar las segundas hojas de origen y destino.

Set wsOrigen = ThisWorkbook.Worksheets("Nombre de la segunda hoja de origen") ' <<< Escribe el nombre que corresponda

Set wsDestino = wbDestino.Worksheets("Nombre de la segunda hoja de destino") ' <<< Escribe el nombre que corresponda

'Control de hojas copiadas. Repite para segunda hoja.

hojas = hojas + 1: If hojas = 1 Then GoTo 1

'Guardar y cerrar el libro de Excel destino

wbDestino.Save

'Activar Movimientos de pantalla y Alertas

Application.ScreenUpdating = True

Application.DisplayAlerts = True

MsgBox "Finished Process....!", vbExclamation, "Finished...!"

End Sub



NOTA: Aún no lo he probado (creo que no tendré tiempo hoy). 



Aprendemos viendo respuestas de otros. Aprendemos más intentando resolver dudas (pregunta/responde).

Mi sitio_web con ejemplos Excel.
Arriba
Erick Gamer Ver desplegable
Habitual
Habitual
Avatar

Unido: 08/Mayo/2016
Localización: Mexico
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Erick Gamer Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 11/Julio/2018 a las 15:51
Gracias Antonio y una disculpa por no contestar antes.

Solo un detalle, la hoja dos origen los rangos a copiar son diferentes a la hoja uno.

La hoja dos necesito tomar los datos desde A1:AG (todo hasta la ultima fila que tenga datos)

Y pegarlos en la hoja destino en A1, tendria que crear otra variable Origen y Destino, como esta?

'Pegar datos en destino.
wsDestino.Range("A1:G" & filaUO - 1).Value = wsOrigen.Range("A2:G" & filaUO).Value

Saludos

Erick Gamer
Aprendiz de todos, maestro de nadie.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable