Copiar datos a otra hoja sin sobre escribir, adicionalmente

Solo consultas sobre macros y código VBA Excel.
Reglas del Foro 1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!

Copiar datos a otra hoja sin sobre escribir, adicionalmente

Notapor Ggarcia » 01 Oct 2018 11:39

Buen Día,

Tengo el siguiente código, lo que quiero es copiar datos a la otra hoja sin sobrescribir lo existente y que no copie filas en blanco, de antemano gracias por la ayuda.

Sub Copiar_Datos()

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

'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("FR_Compras")
Set wsDestino = Worksheets("BD_Compras")

'Indicar la celda de origen y destino
Const celdaOrigen = "C12"
Const celdaDestino = "A2"

'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

End Sub
Ggarcia
Miembro Nuevo
Miembro Nuevo
 
Mensajes: 4
Registrado: 01 Oct 2018 11:16

Re: Copiar datos a otra hoja sin sobre escribir, adicionalme

Notapor Héctor Miguel » 02 Oct 2018 00:01

1) si ejecutas esa macro estando activa cualquier hoja diferente de "FR_Compras" va a fallar en esta instruccion: => rngOrigen.Select

2) si las acciones del tipo ".Select" ".Activate" (y otras) solo funcionan en la hoja activa, tampoco tiene sentido el uso de esas variables de objeto (Dim wsOrigen As Excel.Worksheet etc.)

3) para que funcione un ".Select" desde cualquiera otra hoja (si fuera necesario ".Select"ionar objetos), cambia a: => Application.Goto rngOrigen

4) si NO quieres sobre-escribir los datos en "destino", NO utilices como constante la celda inicial: => Const celdaDestino = "A2", investiga la siguiente fila libre y... adelante !

5) leer codigos que (ab)usan de selecciones tipo Selection.End(xlDown)) o xlToRight no ayudan a visualizar "que hay" en el entorno de la celda "de partida" (???)

para ofrecer una propuesta o alternativa a tu codigo SIN riesgo de que lo supuesto sea diferente de TU realidad, comenta que hay en las columnas y en las filas ANTES de la celdaOrigen ("C12"), ya que al ".Select"ionar con xlDown y xlToRight se supone que solo se seleccionan celdas con datos, NO vacias, a menos que contengan formulas que devuelvan un "" o similar (?)

saludos,
hector.
Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 4733
Registrado: 26 Mar 2005 18:31

Re: Copiar datos a otra hoja sin sobre escribir, adicionalme

Notapor Ggarcia » 02 Oct 2018 10:33

Gracias por tu respuesta Hector, lo que quiero y discula mi ignorancia en el tema, apenas estoy incursionando en el, es copiar los datos que tengo en FR_Ventas a la hoja BD_Ventas sin borrar lo que este alli (Solo adicionando), adicionalmente que si hay un campo en blanco no lo copie, te adjunto el excel para ver como me apoyas, nuevamente, gracias.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Ggarcia
Miembro Nuevo
Miembro Nuevo
 
Mensajes: 4
Registrado: 01 Oct 2018 11:16

Re: Copiar datos a otra hoja sin sobre escribir, adicionalme

Notapor Héctor Miguel » 02 Oct 2018 23:10

Ggarcia escribió:... lo que quiero... es copiar los datos que tengo en FR_Ventas a la hoja BD_Ventas sin borrar lo que este alli... si hay un campo en blanco no lo copie...

si por "campo en blanco" te refieres a "items" que tienen formula en la ultima columna pero no datos en las primeras (?)
analizando tu archivo y corrigiendo la macro que expones, prueba con esta otra forma:
Código: Seleccionar todo
Sub copiaDatos()
  With Worksheets("fr_compras")
    With .Range(.Range("c12"), .Range("c12").End(xlDown).End(xlToRight))
      Worksheets("bd_compras").Cells(Rows.Count, 1).End(xlUp).Offset(1) _
        .Resize(.Rows.Count, .Columns.Count).Value = .Value
    End With
  End With
End Sub

no importa cual sea la hoja activa (NO hay ".select"ion de objetos) solo que existan (tampoco importa si [may/min]usculas en los nombres)

saludos,
hecctor.
Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 4733
Registrado: 26 Mar 2005 18:31

Re: Copiar datos a otra hoja sin sobre escribir, adicionalme

Notapor Ggarcia » 03 Oct 2018 09:56

Buen Día,

Excelente Hector, eso era tal cual lo que necesitaba :D
Ggarcia
Miembro Nuevo
Miembro Nuevo
 
Mensajes: 4
Registrado: 01 Oct 2018 11:16


Volver a Macros

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 3 invitados
cron