Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/08/2014, 10:38
Spikeai
 
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