Foros del Web » Programas, Hardware y Redes » Ofimática »

Macro para Copiar Datos de un archivo a otro cuando yo lo activo

Estas en el tema de Macro para Copiar Datos de un archivo a otro cuando yo lo activo en el foro de Ofimática en Foros del Web. Hola expertos: Necesito su ayuda. Estoy intentando crear una macro, pero estoy muy trabado, dada mi inexperiencia. Les cuento: Necesito que un archivo al que ...
  #1 (permalink)  
Antiguo 14/07/2010, 13:02
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 4 años, 3 meses
Puntos: 0
Macro para Copiar Datos de un archivo a otro cuando yo lo activo

Hola expertos:
Necesito su ayuda. Estoy intentando crear una macro, pero estoy muy trabado, dada mi inexperiencia. Les cuento:

Necesito que un archivo al que yo le llamo "Control", busque los numeros que aparecen en la primer columna, en otro archivo llamado "Notas de Pedido" (tambien en la primer columna), y pegue las siguientes 7 celdas de la fila de correspondientes a cada numero de nota de pedido. Es decir, que vaya recorriendo todos los numeros, que estan en la primer columna de control y poniendole a su derecha todos los mismos valores que aparecen en "Notas de Pedido".

Les cuento que actualmente lo hago relacionando las celdas, pero el archivo me queda muy pesado y tarda mucho en abrirse, dado que tiene que actualizarse cada vez que se abre. Entonces con la macro que les pido, eliminaría la necesidad de utilizar esos vinculos.

Espero una mano, muchas gracias
Saludos
Joaquin
  #2 (permalink)  
Antiguo 16/07/2010, 13:35
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.084
Antigüedad: 7 años, 6 meses
Puntos: 85
Respuesta: Macro para Copiar Datos de un archivo a otro cuando yo lo activo

En algún servidor gratuito "cuelga" un libro con dos hojas:

- En una hoja pon algunas varias filas de datos correspondientes al libro Control
- En la otra hoja pon algunas varias filas de datos correspondientes al libro Notas de Pedido

Y muestra como es que quieres que la información quede copiada.

Avisa cuando lo hayas hecho...
Saludos, Cacho.
  #3 (permalink)  
Antiguo 18/07/2010, 10:17
 
Fecha de Ingreso: mayo-2009
Mensajes: 23
Antigüedad: 5 años, 5 meses
Puntos: 0
Respuesta: Macro para Copiar Datos de un archivo a otro cuando yo lo activo

Hola yojoaco,

Prueba con el siguiente código. A mi me funciona.

Código:


Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Sub Macro1()
  4.     Dim uf1 As Long
  5.     Dim uf2 As Long
  6.     Dim Lista1() As Variant
  7.     Dim Lista2() As Variant
  8.     Dim i As Long
  9.     Dim j As Long
  10.    
  11.     'Carga en 2 arrays las dos tablas (Es más rapido que consultar la hoja directamente)
  12.    Cargar Lista("Control.xlsm", "Hoja1", "A1:H", Lista1, uf1)
  13.     Cargar Lista("Notas de Pedido.xlsm", "Hoja1", "A1:H", Lista2, uf2)
  14.    
  15.     'Si el dato de la columna 1 de la tabla "Control" es igual a otro dato de la tabla "Notas de pedido"
  16.    'copia la fila en la tabla "Control" en la posición correspondiente
  17.    For i = 1 To uf1
  18.         For j = 1 To uf2
  19.             If Lista1(1, i) = Lista2(1, j) Then
  20.                 Lista1(2, i) = Lista2(2, j)
  21.                 Lista1(3, i) = Lista2(3, j)
  22.                 Lista1(4, i) = Lista2(4, j)
  23.                 Lista1(5, i) = Lista2(5, j)
  24.                 Lista1(6, i) = Lista2(6, j)
  25.                 Lista1(7, i) = Lista2(7, j)
  26.             End If
  27.         Next j
  28.     Next i
  29.    
  30.     'Copia el array (en memoria) a la tabla de excel "Control"
  31.    Call Volcar_Tabla("Control.xlsm", "Hoja1", Lista1)
  32. End Sub
  33.  
  34. Public Function Calcular_UF(Libro As String, Hoja As String, Columna As Integer, Fila As Long) As Long
  35.     'Calcular la ultima fila de una columna de datos
  36.    While Not IsEmpty(Application.Workbooks(Libro).Sheets(Hoja).Cells(Fila, Columna))
  37.         Fila = Fila + 1
  38.     Wend
  39.     Calcular_UF = Fila - 1
  40. End Function
  41.  
  42. Public Sub Cargar_Lista(Libro As String, Hoja As String, Ran As String, list As Variant, Optional uf As Long)
  43.     'Copia la tabla de excel a un array en memoria
  44.    Dim Rango As Range
  45.     Ran = Ran & Calcular_UF(Libro, Hoja, 1, 2)
  46.     Set Rango = Application.Workbooks(Libro).Sheets(Hoja).Range(Ran)
  47.     list = Application.Transpose(Rango)
  48.     uf = UBound(list, 2)
  49. End Sub
  50.  
  51. Private Sub Volcar_Tabla(Libro As String, Hoja As String, Tabla() As Variant)
  52.     'Vuelca la tabla en memoria a el documento Excel
  53.    Dim m As Long
  54.     Dim n As Long
  55.     Dim Rango As Range
  56.     m = UBound(Tabla, 1)
  57.     n = UBound(Tabla, 2)
  58.     Set Rango = Range(Application.Workbooks(Libro).Sheets(Hoja).Cells(1, 1), Application.Workbooks(Libro).Sheets(Hoja).Cells(n, m))
  59.     Rango = Application.Transpose(Tabla)
  60. End Sub
Solo tienes que cambiar los nombres de los archivos "Control.xlsm" y "Notas de pedido.xlsm" por los nombres de tus archivos (.xlsm es de Excel 2007), puedes hacerlo con la herramienta buscar del editor de VBA. Tambien tienes que indicar el nombre de las hojas donde están los datos.

Además me parece que para que funcione tienen que estar los dos archivos Excel abiertos, si no, no funciona. Puedes incluir al principio una sentencia que abra el archivo "Notas de pedido" al ejecutarse la macro. La sintaxis la puedes ver con el grabador de macros, así es como aprendí yo.

Si en lugar de tener 2 libros, prefieres tener las dos tablas en un mismo archivo, borra las referencias a los libros asi como las variables libro.:
De: Application.Workbooks(Libro).Sheets(Hoja).Cells(Fi la, Columna)
A: Sheets(Hoja).Cells(Fila, Columna)

Si en la tabla "Hojas de pedido hay datos que se repiten en la primera columna, solo se tendrá en cuenta el último.

Salu2

Etiquetas: copiar, macro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:00.
SEO by vBSEO 3.3.2