Foros del Web » Soporte técnico » Ofimática »

Macro para copiar datos de varios libros

Estas en el tema de Macro para copiar datos de varios libros en el foro de Ofimática en Foros del Web. Hola a todos, Tengo varios archivos que se encuentran en una ruta de intranet, periodicamente alguien une la información de estos archivos en un archivo ...
  #1 (permalink)  
Antiguo 25/08/2014, 15:57
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Macro para copiar datos de varios libros

Hola a todos,

Tengo varios archivos que se encuentran en una ruta de intranet, periodicamente alguien une la información de estos archivos en un archivo local para trabajar.

Todos los archivos (tanto en linea como local) tienen hojas ocultas con acceso a base de datos apra recuperar información actualizada y completar el formato.

A grandes rasgos la macro abre cada uno de los archivos en linea, copia las celdas necesarias y las pega en ela archivo local mediante ciclos For y un If.

Cuando la ejecuto me arroja un error despues de pegar la infromación, cuando intenta regresar al archivo origen. El error es el "13 - No coinciden los tipos".

Esto es parte del codigo:

Código:
For i = 1 To 16
                rangos(i) = celdas(i) & "3:" & celdas(i) & fila
                If i = 1 Then
                    copiar = rangos(i)
                Else
                    copiar = copiar & "," & rangos(i)
                End If
            Next
            Range(copiar).Copy
                
            'cambiamos de archivo para pergar los datos
            Windows(macro).Activate
            ActiveWorkbook.Worksheets("Temporal").Select
            Range("A" & total).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            Range("A" & total).Select
            
            'Regresamos al archivo origen para copiar la siguiente columna
            Windows(Serie).Activate 'aqui genera el error
            Range("C3").Select
            ActiveWindow.Close
El valor "Serie" corresponde al primer ciclo donde toma los nombres de los archivos.

Si necesitan el codigo completo, con gusto lo agrego. Ojala alguien pueda apoyarme a solucionar este error.
  #2 (permalink)  
Antiguo 25/08/2014, 16:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Macro para copiar datos de varios libros

Definiste las variables fila y total como long?, a veces recorrer el número de fila con enteros puede provocar ese error.

Cómo sabes que el error está en ese bloque de código?
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 26/08/2014, 10:38
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Macro para copiar datos de varios libros

Hola Triby, gracias por la respuesta.

Las variables las defini como arreglo de enteros, ya que son los valores de fila supuse que no deberian llenar la memoria.

Cuando ejecuto la macro, me envia el error cuando intenta ejecutar esa linea.

pego todo el codigo para que ver el flujo completo, y si de algo sirve, tengo una versión que no se conecta a base de datos, por si necesitas algo mas.

Código:
Sub Agrupa_movimientos()
'Macro para unificar todos los archivos de movimientos regionales en uno solo para su procesamiento

'Declaración de variables
    Dim Serie, subserie As Object
    Dim fila, i, total As Integer
    Dim copiar, rangos(1 To 16), macro, nombre, ruta, celdas(1 To 16) As String
    i = 1
    macro = Range("D10").Value
    nombre = Range("D6").Value
    total = 3

'Comienza proceso

    'Ciclo For para almacenar las columnas a copiar
    For Each subserie In Range("F2:F17")
        celdas(i) = subserie
        i = i + 1
    Next
    
'Comienza Ciclo para copiado de información
    For Each Serie In Range("B2:B11")
        
        'Se arma el String para abrir el archivo correcto
        ActiveWorkbook.Worksheets("Datos").Select
        ruta = nombre & Serie
        
        'Abre el archivo del que se tomaran los datos
        Workbooks.Open Filename:=ruta
        
        'Codigo de retraso para actualización de información
        Call WaitOpen
        
        ActiveWorkbook.Worksheets("Plantilla").Select
        Range("C999").Select
        Selection.End(xlUp).Select
        fila = ActiveCell.Row
        
        If fila = 3 Then
            'Recorrido de arreglos para copiar columnas
            For i = 1 To 16
                rangos(i) = celdas(i) & "3"
                If i = 1 Then
                    copiar = rangos(i)
                Else
                    copiar = copiar & "," & rangos(i)
                End If
            Next
            Range(copiar).Copy
                
            'cambiamos de archivo para pergar los datos
            Windows(macro).Activate
            ActiveWorkbook.Worksheets("Plantilla").Select
            Range(celdas(i) & total).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                
            'Regresamos al archivo origen para copiar la siguiente columna
            Windows(Serie).Close (False)
        ElseIf fila > 3 Then
            'Recorrido de arreglos para copiar columnas
            For i = 1 To 16
                rangos(i) = celdas(i) & "3:" & celdas(i) & fila
                If i = 1 Then
                    copiar = rangos(i)
                Else
                    copiar = copiar & "," & rangos(i)
                End If
            Next
            Range(copiar).Copy
                
            'cambiamos de archivo para pergar los datos
            Windows(macro).Activate
            ActiveWorkbook.Worksheets("Temporal").Select
            Range("A" & total).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            Range("A" & total).Select
            
            'Regresamos al archivo origen para copiar la siguiente columna
            Windows(Serie).Activate 'aqui se genera el error
            Range("C3").Select
            ActiveWindow.Close
        Else
        End If
        
        'Asignamos la nueva posición de pegado para el archivo destino
        total = total + fila - 2
        
        'Cerramos el archivo origen para continuar el ciclo
        ActiveWorkbook.Close (False)
    Next
End Sub
  #4 (permalink)  
Antiguo 28/08/2014, 09:55
 
Fecha de Ingreso: marzo-2010
Ubicación: Lima
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Macro para copiar datos de varios libros

Hola:
Veo que en alguna linea tienes este codigo
Código vb:
Ver original
  1. Windows(Serie).Close (False)
Y luego mas abajo esta linea
Código vb:
Ver original
  1. Windows(Serie).Activate
Estas tratado de activar una ventana que esta cerrada.
__________________
Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro.
  #5 (permalink)  
Antiguo 29/08/2014, 01:07
 
Fecha de Ingreso: julio-2006
Ubicación: Madrid
Mensajes: 943
Antigüedad: 18 años, 3 meses
Puntos: 56
Respuesta: Macro para copiar datos de varios libros

Hola,

Que hay en el rango B2:B11?
Puedes ponerlo o al menos un ejemplo?

Saludos!!

Etiquetas: excel, macros
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 08:44.