¿Cómo copiar los valores de un libro a otro sin romper los vínculos a los que hacen referencia?

Solicito de su amplia experiencia para resolver lo siguiente:

Necesito actualizar un libro que contiene dos hojas con cientos de registros "Detalle de Ventas 1" y "Detalle de Ventas 2", la diferencia radica en que la segunda hoja contiene los números de factura y este dato está vinculado (color azul) con la factura (.pdf)

Lo que se pretende es actualizar la hoja "Detalle de Ventas 1" con los números de factura pero sin que se rompan los vínculos, ya que dicho valor a copiar se va agregar en una columna diferente al del origen.

Lo intente con la función BUSCARV para traer los valores ya que los productos no están en el mismo orden, sin embargo, el vínculo se rompe.

Requiero toda la ayuda posible para resolver este lío lo más pronto posible de una forma ágil y eficiente.

2 respuestas

Respuesta
3

La siguiente macro copia el valor si perder el vínculo.

Ejecuta la siguiente macro:

Sub copiaceldas()
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim dic As Object
  Dim i As Long, j As Long
  Dim cad As String
  Dim a As Variant, b As Variant
  '
  Application.DisplayAlerts = False
  '
  Set sh1 = Sheets("RESUMEN")
  Set sh2 = Sheets("PARA FILTRO")
  Set dic = CreateObject("Scripting.Dictionary")
  '
  If sh1.AutoFilterMode Then sh1.AutoFilterMode = False
  If sh2.AutoFilterMode Then sh2.AutoFilterMode = False
  '
  a = sh2.Range("A1", sh2.Range("Y" & Rows.Count).End(3)).Value
  For i = 10 To UBound(a, 1)
    cad = a(i, 11) & "|" & a(i, 13) & "|" & a(i, 15) & "|" & a(i, 16) & "|" & a(i, 22)
    dic(cad) = i
  Next
  '
  b = sh1.Range("A1", sh1.Range("AA" & Rows.Count).End(3)).Value
  For i = 2 To UBound(b, 1)
    If b(i, 11) <> "" Then
      cad = b(i, 11) & "|" & b(i, 22) & "|" & b(i, 25) & "|" & b(i, 26) & "|" & b(i, 27)
      If dic.exists(cad) Then
        j = dic(cad)
        sh2.Range("O" & j).Copy sh1.Range("AU" & i)
      End If
    End If
  Next
End Sub

En esta línea, puedes cambiar la columna origen y la columna destino:

Sh2.Range("O" & j). Copy sh1. Range("AU
Respuesta
2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas